事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。
功能实现原理:
在我们的InnoDB表中,我们执行的SQL语句,都要先存入日志文件,然后再讲执行结果提交到服务器,完成整个操作。
我们这里就是将开始由MySQL所掌握的自动提交功能,转变为由我们操作的提交功能,来完成一组SQL语句成功后,才真实改变数据库的操作。
功能需求:
1.这两个步骤中任何一个步骤失败了,我们都应该回到操作前的初始状态。
2.这两个步骤都成功了,就算成功操作,数据库中应该变化。
BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。
功能实现的语法:
1.SET @@autocommit = 0; (1,为自动提交;0,为手动提交)
举例:mysql> set @@autocommit=1;
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from bank;
+-------+
| money |
+-------+
| 100 |
+-------+
COMMIT;成功后提交
ROLLBACK;回到事务启动前的状态。
SAVEPOINT 点名;设置标记,用于使用ROLLBACK TO 点名 回滚到此点状态。
ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库系统,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。
原子性
整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性
在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
隔离性
两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。
持久性
在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
由于一项操作通常会包含许多子操作,而这些子操作可能会因为硬件的损坏或其他因素产生问题,要正确实现ACID并不容易。ACID建议数据库将所有需要更新 以及修改的资料一次操作完毕,但实际上并不可行。
目前主要有两种方式实现ACID:第一种是Write ahead logging,也就是日志式的方式。第二种是Shadow paging。
功能实现原理:
在我们的InnoDB表中,我们执行的SQL语句,都要先存入日志文件,然后再讲执行结果提交到服务器,完成整个操作。
我们这里就是将开始由MySQL所掌握的自动提交功能,转变为由我们操作的提交功能,来完成一组SQL语句成功后,才真实改变数据库的操作。
功能需求:
1.这两个步骤中任何一个步骤失败了,我们都应该回到操作前的初始状态。
2.这两个步骤都成功了,就算成功操作,数据库中应该变化。
BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。
功能实现的语法:
1.SET @@autocommit = 0; (1,为自动提交;0,为手动提交)
举例:mysql> set @@autocommit=1;
Query OK, 0 rows affected (0.00 sec)
mysql> update bank set money=100;
Query OK, 1 row affected (0.06 sec)Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from bank;
+-------+
| money |
+-------+
| 100 |
+-------+
说明:当autocommit=0时,如果对表进行提交后,然后再对这表进行查看,表中的数据会发生变化。当autocommit=1时,进行上述操作后,对表进行查询,数据不会发生改变,执行commit命令后,再对表进行查询,数据会发生变化。
COMMIT;成功后提交
ROLLBACK;回到事务启动前的状态。
SAVEPOINT 点名;设置标记,用于使用ROLLBACK TO 点名 回滚到此点状态。
ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库系统,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。
原子性
整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性
在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
隔离性
两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。
持久性
在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
由于一项操作通常会包含许多子操作,而这些子操作可能会因为硬件的损坏或其他因素产生问题,要正确实现ACID并不容易。ACID建议数据库将所有需要更新 以及修改的资料一次操作完毕,但实际上并不可行。
目前主要有两种方式实现ACID:第一种是Write ahead logging,也就是日志式的方式。第二种是Shadow paging。