吴鹏
--------------------------------------------
多表:
外键约束:保证多表之间数据的完整性;
约束保证数据的完整性;
一张表的一个字段名指向另一张表的主键字段;
当外键设置为非空字段时,添加字段的时候,外键不能为空;
表与表的关系(重点)
一对多
一个部门有许多个员工,一个员工只属于某一个部门;
在多的一方创建外键指向一的一方的主键;
多对多
一个学生可以选择多门课程,一门课程可以被多个学生选择;
要借助第三张表(中间表,在这张表中至少有两个字段,分别作为外键指向双方的主键)
一对一
一个公司可以有一个注册地址,一个注册地址也只能对应一个公司;
唯一外键对应的方式:
假设一对一是一个一对多的关系,需要在多的一方创建外键指向一的一方的主键
将外键设置为唯一(unique);
主键对应的方式:
直接将两张表的主键进行外键的设置;
-------------------------------------------------------
多表查询的分类
连接查询:
交叉查询
查询到的时两个表的笛卡尔乘积
select * from 表1 cross join 表2;
select * from 表1,表2;
内连接 关键字:inner join(inner可以省略)
显示内连接:在sql中显示的调用关键字
语法:select * from 表1 inner jion 表2 on 关联条件(表1.字段名=表2.字段名);
隐式内连接 在sql中没有调用关键字
语法:select * from 表1,表2 where 关联条件;
外连接 关键字:outer join(outer 可以省略)
左外连接 表1为主表,主表全部显示,从表根据主表匹配来显示;
语法:select * from 表1 left outer join 表2 on 关联条件;
右外连接 表2为主表,主表全部显示,从表根据主表匹配来显示;
语法 select * from 表1 right outer join 表2 on 关联条件;
----------------------------------------------
事务:
逻辑上的一组操作(DML),组成这组操作的各个逻辑单元,要么全部成功,要么全部失败
原子性
不可分割,组成事物的各个逻辑单元不可分割
一致性
事务执行的前后,数据的完整性保持一致;
隔离性
事务执行不应该受到其它事务的干扰
多个事务在并发;
持久性
事务一旦结束,数据就持久化到数据库中;
start transaction 开启事务
commit 提交事务
rollback 回滚事务
隔离性级别:
1 Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
2 Repeatable read (可重复读):可避免脏读、不可重复读的发生。
3 Read committed (读已提交):可避免脏读的发生。
4 Read uncommitted (读未提交):最低级别,任何情况都无法保证。
以上四种隔离级别最高的是Serializable级别,最低的是Read uncommitted级别,
级别越高,执行效率就越低。所以平时选用何种隔离级别应该根据实际情况。
在MySQL数据库中默认的隔离级别为Repeatable read (可重复读)。
|