MySQL高级十——事务的应用

一、什么是事务

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


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




猜你喜欢

转载自blog.csdn.net/u013308496/article/details/50493730