mysql 事务处理
transaction
事务
保证一组操作,要么全部执行,要么完全不执行。发生错误就进行回退。
事务处理是一种机制,用来管理必须成批执行的MySQL操作,以保证数据库不包含不完整的操作结果。
事务处理用来管理INSERT、UPDATE和DELETE语句。
SELECT、CREATE、DROP不能回退,即使在事务中,只会被执行,不会被回退。
一般的mysql语句的提交(写或保存)操作是自动进行的,即隐含提交(implicit commit)。
而,在事务处理块中,提交不会自动进行,需要使用COMMIT
语句进行明确的提交。
**事务(transaction)**指一组SQL语句;
**回退(rollback)**指撤销指定SQL语句的过程;
**提交(commit)**指将未存储的SQL语句结果写入数据库表;
保留点(savepoint)指事务处理中设置的临时占位符(placeholder),你可以对它发布回退(与回退整个事务处理不同)。
事务的开始与回滚,回滚前面必须要标识开始:
START TRANSACTION;
transaction ...
ROLLBACK;/COMMIT;
不管是ROLLBACK
,还是COMMIT
,事务没有完整执行时,都会自动撤销所有操作(不能撤销的不行)。
隐含事务关闭 当COMMIT或ROLLBACK语句执行后,事务会自动关闭(将来的更改会隐含提交)。
保留点:用于复杂事务处理的部分提交和回退(具体表现为在事务处理块中合适位置放置占位符),占位符就是保留点。使用SAVEPOINT
语句。
释放保留点:保留点在事务处理完成(执行一条ROLLBACK或COMMIT)后自动释放。也可以用RELEASE SAVEPOINT
明确地释放保留点。
SAVEPOINT savepoint_name;
RELEASE SAVEPOINT savepoint_name;
更改默认的提交行为:
autocommit标志决定是否自动提交更改,不管有没有COMMIT语句。
设置autocommit为0(假)指示MySQL不自动提交更改,默认是1。
SET autocommit=0;
标志为连接专用 autocommit标志是针对每个连接而不是服务器的。