您的位置:首页 > 数据库 > MySQL

MySQL高级十——事务的应用

2016-01-10 20:58 936 查看
一、什么是事务

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

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,'C',3000);
savepoint a1;
insert into account values(4,'D',3000);
savepoint a2;
insert into account values(5,'E',3000);
savepoint a3;


查看数据库信息

select * from account;
就会看到你插入的数据

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

如:回到savepoint a1的状态

rollback to savepoint a1;


然后再执行查询语句

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

四、事务总结

事务应该具有4个属性:

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

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

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

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

持久性(durability):持久性也成永久性。只一个事务一旦提交,它对数据库中数据的改变就应该是永久性的改变。接下来的其他操作或故障不应该对其有任何影响。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: