MySQL高级十——事务的应用

黄舟
发布: 2016-12-29 16:47:39
原创
958 人浏览过

一、什么是事务

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

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)!


相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板