Rumah  >  Artikel  >  pangkalan data  >  MySQL高级十——事务的应用

MySQL高级十——事务的应用

黄舟
黄舟asal
2016-12-29 16:47:39955semak imbas

一、什么是事务

为什么要使用事务这个技术?现在很多软件都是多用户,多课程,多线程的,对于同一个表可能同时有很多人在用,为保持数据的一致性,所以提出了事务的概念。

1、查看数据库下面是否支持事务(InnoDB支持)?

show engines;

2、查看mysql当前默认的存储引擎?

show variables like '%storage_engine%';

3、查看某张表的存储引擎?

show create table test;

4、对于表的存储结构的修改?

建立InnoDB表:Create table ... type=InnoDB;Alter table table_name type=InnoDB;

二、实例:

1、创建一个数据库bank

create table account(  
aid int not null,  
accname varchar(20) not null,  
accmoney decimal(10,2) not null,  
primary key(aid))engine = innodb default charset = gbk;

2、向account表中插入两条数据

insert into account values(1,'A',4000);  
insert into account values(2,'B',2000);

3、开启表的事务

start transaction;

4、把数据设置为主动提交

commit;  
set autocommit = 0;

5、执行下面一条语句

<pre name="code" class="sql">update account set accmoney = accmoney - 1000 where aid = 1;  
update account set accmoney = accmoney + 1000 where aid = 2;

6、打开新的MySQL命令窗口查看account表

select * from account;

会发现数据并没有发生改变,因为上面修改了指令,数据库并没有发出修改指令;

7、在原有的窗口中查询就会发现数据已经改变

select * from account;

8、进行commit实物提交

commit;

9、在另外的客户端中查看数据就会发现数据已经改变

select * from account;

三、事务回滚和还原点

1、事务的回滚

回到事务发生之前的数据状态。通过rollback。

补充:commit and chain;表示提交事务之后重新开启了新的事务。 

rollback and release;表示回滚之后断开和客户的链接。

2、还原点(实例)

set autocommit = 0;  
insert into account values(3,&#39;C&#39;,3000);  
savepoint a1;  
insert into account values(4,&#39;D&#39;,3000);  
savepoint a2;  
insert into account values(5,&#39;E&#39;,3000);  
savepoint a3;

查看数据库信息

就会看到你插入的数据

如果你想回滚到某一状态只需rollback调用一下就行;

如:回到savepoint a1的状态
rollback to savepoint a1;

然后再执行查询语句

就会看到表中就有一条新加的数据。

四、事务总结

事务应该具有4个属性:

原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性的状态。一致性与原子性是密切相关的。

隔离性(isolation):一个事务的执行不能被其他事务干扰,即一个事务内部操作及使用的数据对并发的其他事务隔离的,并发执行的各个事务之间不能相互干扰。

持久性(durability):持久性也成永久性。只一个事务一旦提交,它对数据库中数据的改变就应该是永久性的改变。接下来的其他操作或故障不应该对其有任何影响。

 以上就是MySQL高级十——事务的应用的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn