在MySQL中,事务由单独单元的一个或多个SQL语句组成。在这个单元中,每个MySQL语句是相互依赖的。而整个单独单元作为一个不可分隔的整体,如果单元中一旦某条SQL语句执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事务开始以前的状态;如果单元中的所有SQL语句均执行成功。则事务被顺利执行。
事务4大属性:
原子性
一致性
孤立性
持久性
原子性
原子性意味着事物的整体性和不可分割性,这就类似化学中的原子,事务就具备这样的属性,其被认为是一个不可分割的单元。
一致性
在MySQL 事务处理过程中,无论事务是完全成功或是在中途因某些环节失败而导致失败,但事务使系统处于一致的状态时,其必须保证一致性。
孤立性
孤立性是指每个事务在自己的空间发生,和其他发生在系统中的事务隔离,而且事务的结果只在它完全被执行时才能看到。即使这样的一个系统中同时发生多个事务,孤立性也可以保证特定的事务在完成之前,其结果是不被公布的。
持久性
在MySQL中,即便是数据库系统崩溃,一个提交的事务仍然在坚持。MySQL的持久性是通过一条记录事务过程中系统变化的二进制事务日志文件来实现的。
初始化事务
初始化MySQL事务,首先声明初始化MySQL事务后所有的SQL语句为一个单元。在MySQL中,应用START TRANSACTION命令来标记一个事务的开始。
初始化事务的结构如下:
START TRANSACTION;
创建事务
初始化事务成功后,可以创建事务。这里以向名称为connection的数据表中插入一条记录为例,讲解事务的创建。首先打开数据库,选定某个数据库,然后初始化事务,最后创建事务,向指定的数据表中添加记录。
查看数据是否被正确输入
事务创建成功后,建议通过SELECT语句查看数据是否被正确输入。
提交事务
在用户没有提交事务之前,当其他用户连接MySQL服务器时,应用SELECT语句查询结果,则不会显示没有提交的事务。当且仅当用户成功提交事务后,其他用户才可能通过SELECT语句查询事务结果,由事务的特性可知,事务具有孤立性,当事务处在处理过程中,其实MySQL并未将结果写入磁盘中,这样以来,这些正在处理的事务相对其他用户是不可见的。一旦数据被正确插入,用户可以使用COMMIT命令提交事务。
提交事务的命令:
COMMIT
一旦当前执行事务的用户提交当前事务,则其他用户就可以通过会话查询结果。
撤销事务(事务回滚)
撤销事务,又被称作事务回滚。即事务被用户开启、用户输入的SQL语句被执行后,如果用户想要撤销刚才的数据库操作,可使用ROLLBACK命令撤销数据库中的所有变化。
事务的存在周期
事务的周期由用户在命令提示符中输入START TRANSACTION指令开始,直至用户输入COMMIT结束。