MySQL事务处理(transaction)

事务处理(transaction processing)

MySQL的InnoDB引擎支持事务处理,MyISAM引擎不支持事务处理

若需要事务处理功能,注意选择正确的引擎。

事务处理保证成批的MySQL操作要么完全执行成功,要么完全不执行。维护了数据库的完整性,也可避免脏数据的产生。

eg:小王给小李转账100块,过程大概为:

1.小王账户扣除100块

2.小李账户增加100块。

若第一步执行成功而第二步未执行时发生了错误(宕机,bug等等),那么数据就会出现错误。

事务即为了避免这种情况发生

事务可以保证转账这一组操作作为一个整体执行,或者整体全执行,或者整体全不执行。即若该过程没有错误,整组语句提交更新,若该过程发生错误,则回退(撤销)到整组操作之前以保证数据安全。

  • **事务(transaction):**指一组SQL语句
  • **回滚(rollback):**撤销事务操作,回滚至之前的状态
  • **提交(commit):**将未真正操作的SQL语句全部操作
  • **保留点(savepoint):**指事务处理中临时的占位符,可以对它进行回滚,而不是回滚整个事务。

自动提交

MySQL语句一般默认都是自动进行提交的

通过以下语句查看:

	show variables like 'auto%';
	select @@autocommit;

MySQL事务处理(transaction)_第1张图片

开启事务

	# 第一种
	begin;
	# 第二种
	start transaction;
	# 第三种
	set autocommit=OFF;
	set autocommit=0;
	
	# 建议使用第一和第二种。避免使用第三种。
	
	#第三种即修改是否自动提交,这种修改是会话级别的改动,即临时的改动,重新进入后依然为ON。若要修改默认的提交模式应在配置文件中修改。

使用ROLLBACK

使用rollback可以回滚SQL语句。

	begin;
	# SQL语句
	rollback;

rollback 只能在一个事务处理内使用,即开启事务后才能使用。

哪些语句可以回滚?

事务处理用来管理 insert update delete 语句

对于select语句是不能回滚的(回滚select语句也没有任何意义)

不能回滚 createdrop 语句

事务处理中可以使用create和drop语句,如果你进行了回滚操作,它们不会被撤销。

提交事务(commit)

commit 命令用来提交事务

	start transaction;
	# SQL语句...
	commit;

commit 命令的执行明确的进行了事务的提交,即将事务处理中的更改提交。

commitrollback 语句执行后,事务会自动的关闭,之后的更改都将进行默认的自动提交。

你可能感兴趣的:(MySQL,mysql,数据库,sql)