MySQL—B站学习总结—数据库事务(TCL)
TCL:Transaction Control Language,事务控制语言
事务:
一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行
案例:转账
存储引擎:在MySQL中的数据用各种不同的技术存储在文件/内存中
查看存储引擎:SHOW ENGINES;
事物的属性:ACID
- 原子性(Atomicity):要么都执行,要么都回滚
- 一致性(Consistency):保证数据的状态操作前和操作后保持一致
- 隔离性(Isolation):多个事务同时操作相同数据库的同一个数据时,一个事务的执行不受另外一个事务的干扰
- 持久性(Durability):一个事务一旦提交,则数据将持久化到本地,除非其他事务对其进行修改
事物的创建:
隐式事务:
事务没有明显的开启和结束的标记,例:insert,update,delete语句
SHOW VARIABLES LIKE '%autocommit%'
查看自动提交的状态,默认状态是ON
显式事务:
事务具有明显的开启和结束标记,前提:必须设置自动提交事务的功能为禁止状态
设置自动提交事务的功能为禁止状态:set autocommit = 0
步骤:
- 开启事务:取消自动提交事务的功能
set autocommit = 0;(这个语句默认开启事务)
start transcation;(可写可不写的) - 编写事务的一组逻辑操作单元(多条sql语句)
insert
update
delete - 提交事务或回滚事务
- commit:提交事务(没有问题)
- rollback:回滚事务(出现问题)
演示事务的使用步骤的例子
数据库的隔离级别
当多个事务同时操作同一个数据库的相同数据时事务的并发问题有哪些?
1.脏读
2.不可重复读
3.幻读
数据库事务的隔离性
数据库事务的隔离级别
数据库提供的四种隔离级别
Oracle的事务隔离级别
Mysql的事务隔离级别
如何避免事务的并发问题?
通过设置事务的隔离级别
- READ UNCOMMITTED
- READ COMMITTED 可以避免脏读
- REPEATABLE READ 可以避免脏读、不可重复读和一部分幻读
- SERIALIZABLE可以避免脏读、不可重复读和幻读
设置隔离级别:
set session|global transaction isolation level 隔离级别名;
查看隔离级别:
select @@tx_isolation;