在默认情况下,MySQL是自动提交(autocommit)的,即如果SQL执行成功了,就直接自动生效了。如果需要手动提交和回滚事务,就需要通过明确的事务控制命令来开始事务,这是和Oracle等其他数据库的事务管理明显不同的地方。
事务开启和结束语法:
#开启新事务
START TRANSACTION;
#回滚事务
ROLLBACK;
#提交事务
COMMIT;
如果希望所有的事务都不是自动提交的,那么通过修改AUTOCOMMIT来控制事务比较方便,这样就不用在每个事务开始的时候执行“START TRANSACTION”语句
#设置手动提交模式
SET AUTOCOMMIT = 0;
如果设置了“SET AUTOCOMMIT=0”,那么所有INSERT、UPDATE、DELETE等支持事务的SQL语句都需要通过明确的命令进行提交或回滚,否则这些SQL语句就不会生效。
“SET AUTOCOMMIT”语句只对当前连接会话有效。
如果需要回滚部分事务,使用SAVEPOINT。
在事务中可以通过定义SAVEPOINT(保存点),指定回滚事务的一个部分,但是不能指定提交事务的一个部分。
对于复杂的SQL操作,可以定义多个不同的SAVEPOINT,当满足不同的情况时,可回滚不同的SAVEPOINT。需要注意的是,如果定义了相同名字的SAVEPOINT,则后面的SAVEPOINT会覆盖之前的定义。对于不再需要的SAVEPOINT,可以通过“RELEASE SAVEPOINT”命令删除SAVEPOINT,删除后的SAVEPOINT就不能再使用了。
注意:DDL语句不支持事务。