Web学习历程记录(二)
多表操作
外键约束
外键:唯一标识其他表中的一条记录,用来通知数据库两张表字段之间的对应关系,并让数据库维护这样的关系
外键作用:确保数据库数据的完整性和一致性
添加外键:
foreign key (dept_id) references dept(id) alter table 从表 add constraint 外键名 foreign key(从表的外键列名) refences 主表(主键)
表与表之间的联系
一对多,一对一,多对多
多表查询
子查询
一个查询的结果作为另一个查询的条件
有查询的嵌套,内部的查询称为子查询
子查询要使用括号
事务
事务指逻辑上的一组操作,组成这组操作的单元要么全部成功,要么全部失败
作用:保证一组操作全部成功或者全部失败
MySQL进行事务管理
自动事务
一条sql语句就是一个事务,且没有办法回滚
手动开启一个事务
开启事务
start transaction
提交
commit
回滚
rollback
事务原理
- 客户库服务器,创建连接时创建用户临时文件
开启事务以后,所有的操作都会先写入到临时日志文件中 - 开启事务后,所有的操作都会先写入到临时文件中
- 所有的查询操作从表中查询,但会经过日志文件加工后才返回
- 如果事务提交则将日志文件中的数据写到表中。否则清空日志文件
回滚点
设置回滚点
savepoint 名字
回到回滚点
rollback to 名字
事务特性
原子性:事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生
一致性:事务前后数据的完整性必须保持一致
持久性:持久性是指事务一旦被提交,它对数据库中数据的改变就是永久性的
隔离性:多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事物之间数据要相互隔离,事务之间互不干扰
因为并发操作,多个用户访问同一个数据,可能引发并发访问的问题
并发访问的问题 | 含义 |
---|---|
脏读 | 一个事务读取到了另一个事务未提交的特性 |
不可重复读 | 一个事务中两次读取的数据内容不一致,这是事务update时引发的问题 |
幻读 | 一个事务中两次读取的数据数量不一致,这是insert或delete引发的问题 |
事务隔离级别
级别 | 名字 | 隔离级别 | 脏读 | 不可重复读 | 幻读 | 数据库默认隔离级别 |
---|---|---|---|---|---|---|
1 | 读未提交 | read uncommitted | 是 | 是 | 是 | |
2 | 读已提交 | read committed | 否 | 是 | 是 | Oracle |
3 | 可重复读 repeatable read | 否 | 否 | 是 | MySQL | |
4 | 串行话 | serializable | 否 | 否 | 否 |
设置隔离级别
set session transaction isolation level 隔离级别;
查询当前事务隔离级别
select @@tx_isolation;