Heim >Datenbank >MySQL-Tutorial >Mysql事务总结

Mysql事务总结

WBOY
WBOYOriginal
2016-06-07 15:26:26960Durchsuche

数据库 事务的特性ACID 事务(Transaction)是并发控制的基本单位。 所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执

  数据库 事务的特性ACID

  事务(Transaction)是并发控制的基本单位。

  所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行。

  数据库事务必须具备ACID特性,ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)的英文缩写。

  原子性:指整个数据库事务是不可分割的工作单位。只有使据库中所有的操作执行成功,才算整个事务成功;事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到执行事务前的状态。

  一致性:指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。例如对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNTS表中Tom和Jack的存款总额为2000元。

  隔离性:指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。

  持久性:指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。

  事务的(ACID)特性是由关系数据库管理系统(RDBMS,数据库系统)来实现的。数据库管理系统采用日志来保证事务的原子性、一致性和持久性。日志记录了事务对数据库所做的更新,如果某个事务在执行过程中发生错误,就可以根据日志,撤销事务对数据库已做的更新,使数据库退回到执行事务前的初始状态。

  数据库管理系统采用锁机制来实现事务的隔离性。当多个事务同时更新数据库中相同的数据时,只允许持有锁的事务能更新该数据,其他事务必须等待,直到前一个事务释放了锁,其他事务才有机会更新该数据。

MySql事务应用

事务的特征:

Atomicity(原子性)
Consistency(稳定性,一致性)
Isolation(隔离性)
Durability(可靠性)
注意:事务只针对对数据数据产生影响的语句有效。

show engines //查看mysql锁支持的数据引擎。

MyISAM不支持事物,InnoDB支持事物。

默认情况下,MySQL将以自动提交模式运行,这意味着没一条小命令都将当做一个只有一条命令的事物来执行。

如果要让mysql支持支持事务,只需要修改数据引擎(alter table person type=INNODB)。

使用start transaction或者begin命令来开启一个事物,使用commit,或者rollback来结束事物。

事物的结束:事物除了commit,rollback会结束外,使用DDL或者DCL语句也会结束。

保存点:通过保存点机制:用户可以在事物里用savepoint name命令设置一些保存点,以后用户在使用rollback to savepoint name结束事物时,name之前的数据保存,之后的数据不保存。

mysql使用事务的关键字

begin //打开一个事务。
commit //提交到数据库。
rollback //取消操作。
savepoint //保存,部分取消,部分提交。
alter table person type=INNODB //修改数据引擎。

示例:

<code><span><span>begin</span>  

<span>update</span> person <span>set</span> name=<span>'efgh'</span> <span>where</span> id =<span>10</span> 

<span>select</span> * <span>from</span> person  

<span>rollback</span>  

<span>select</span> * <span>from</span> person </span></code>

示例:

<code><span><span>alter</span> <span>table</span> person type=INNODB 

<span>begin</span>  

<span>update</span> person <span>set</span> name=<span>'efgh'</span> <span>where</span> id =<span>10</span> 

<span>select</span> * <span>from</span> person  

<span>commit</span>  

<span>select</span> * <span>from</span> person  

<span>begin</span>  

<span>delete</span> <span>from</span> person <span>where</span> id=<span>21</span> 

<span>update</span> person <span>set</span> name=<span>'efgh'</span> <span>where</span> id =<span>10</span> 

<span>commit</span>/<span>rollback</span> </span></code>

针对上面部分提交,必须用到保存点。

事务保存点注意:

1.只能取消到某个保存点 rollback to savepoint p1。

2.不能提交某个保存 commit to savepoint p2//错误写法。

3.最后commit 把未取消的保存点去不提交到数据。

事务保存点使用例子:

<code><span><span>begin</span>;</span>  

<span><span>update</span> score <span>set</span> score=<span>40</span> <span>where</span> scoreid=<span>1</span>;</span>  

<span>savepoint s1;</span>  

<span><span>update</span> score <span>set</span> score=<span>50</span> <span>where</span> scoreid=<span>2</span>;</span>  

<span><span>select</span> * <span>from</span> score;</span>  

<span><span>rollback</span> <span>to</span> savepoint s1;</span>  

<span><span>select</span> * <span>from</span> score;</span>  

<span><span>commit</span>; </span></code>

关于MySQL事务的操作就介绍到这里,如果您想了解更多关于MySQL数据库的知识,可以看一下这里的文章:http://database.51cto.com/mysql/,相信一定不会让大家失望的!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn