一、什么是事务
为什么要使用事务这个技术?现在很多软件都是多用户,多课程,多线程的,对于同一个表可能同时有很多人在用,为保持数据的一致性,所以提出了事务的概念。
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;
查看数据库信息
就会看到你插入的数据 如果你想回滚到某一状态只需rollback调用一下就行; 如:回到savepoint a1的状态
rollback to savepoint a1;
然后再执行查询语句
就会看到表中就有一条新加的数据。
四、事务总结
事务应该具有4个属性:
原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性的状态。一致性与原子性是密切相关的。
隔离性(isolation):一个事务的执行不能被其他事务干扰,即一个事务内部操作及使用的数据对并发的其他事务隔离的,并发执行的各个事务之间不能相互干扰。
持久性(durability):持久性也成永久性。只一个事务一旦提交,它对数据库中数据的改变就应该是永久性的改变。接下来的其他操作或故障不应该对其有任何影响。
以上就是MySQL高级十——事务的应用的内容,更多相关内容请关注PHP中文网(www.php.cn)!