- 在实际的业务开发中,有些业务操作要多次访问数据库。一个业务要发送多条SQL语句给数据库执行。需要将多次访问数据库的操作视为一个整体来执行,要么所有的SQL语句全部执行成功。如果其中有一条SQL语句失败,就进行事务的回滚,所有的SQL语句全部执行失败。
- MySQL自动默认提交事物,当我们执行的一条语句都是一个事物,执行完语句自动提交事物。
- 在MySQL中提交事物的方式分为两种:自动提交和手动提交
- 开启事物之后所有的操作都会临时保存到事物操作日志,事物日志只有在得到commit命令之后才会将数据同步到表中,其他的任何情况都会清空事物日志(rollback,断开连接等);
事物的提交语句
事物的执行流程
手动提交事物
- 开启事物:START TRANSACTION;
- 执行sql语句
- 在控制台输入commit提交事物;
自动提交事物
通过修改mysql全局变量"autocommit"可以操作是否自动开启事物
- 在控制台输入
show variables like '%commit%';来查看是否开启自动提交事物; - 设置autocommit的状态
set autocommit = 1;,0为关闭,1为开启;
回滚点
- 在某些成功的操作完成之后,后续的操作有可能成功有可能失败,但是不管成功还是失败,前面操作都已经成功,可以在当前成功的位置设置一个回滚点。可以供后续失败操作返回到该位置,而不是返回所有操作,这个点称之为回滚点。
- 设置回滚点的语法:savepoint 回滚点的名字;
- 回到回滚点的语法:rollback to 回滚点的名字;
事物的4大特性
事物的隔离级别
事务在操作时的理想状态:多个事务之间互不影响,如果隔离级别设置不当就可能引发并发访问问题。
- 查询事物隔离级别:
show variables like '%isolation%';
-- 或
select @@tx_isolation;
- 设置事物隔离级别
set global transaction isolation level 级别字符串;
-- 如:
set global transaction isolation level read uncommitted;