赞
踩
事务:一条或多条sql语句组成一个执行单位, 一组sql语句要么都执行要么都不执行
原子性(atomicity,或称不可分割性)、
一致性(consistency)、
隔离性(isolation,又称独立性)、
持久性(durability)。
A 原子性: 一个事务是不可再分割的整体,要么都执行要么都不执行
C 一致性:一个事务可以使数据从一个一致状态切换到另外一个一致的状态
I 隔离性:一个事务不受其他事务的干扰,多个事务互相隔离的
D 持久性: 一个事务一旦提交了,则永久的持久化到本地
隐式(自动)事务:
没有明显的开启和结束,本身就是一条事务可以自动提交,比如insert. update、delete
显式事务:具有明显的开启和结束
set autocommit=0;
start transaction;#可以省略
回滚到指定的地方: rollback to回滚点名;
#开启事务
SET autocommit=0;
START TRANSACTION;
#编写一组事务的语句
DELETE FROM tab_id WHERE id=3;
#结束事务
COMMIT;#执行
#rollbakc; 回滚
SELECT * FROM tab_id;
#演示delete
set autocommit=0;
START TRANSACTION;
DELETE FROM account;
ROLLBACK;
#支持回滚
#演示truncate
SET autocommit=0;
START TRANSACTION;
TRUNCATE TABLE account;
ROLLBACK;
不支持回滚
如何解决并发问题
通过设置隔离级别来解决并发问题
隔离级别
脏读 不可重复读 幻读
read unconnitted: 读未提交 X X x
read comnitted: 读已提交 √ X X
repeatable read:可重复读 √ √ X
serializable:串行化 √ √ √
x不能解决,√能解决
mysql中默认第三个隔离级别repeatable read
oracle中默认第二个隔离级别2
每启动一个mysql程序,就会获得一个单独的数据库连接.每
个数据库连接都有一个全局变量@@tx_ isolation, 表示当前的
事务隔离级别.
- 查看当前的隔离级别:
SELECT @@tx_isolation;
- 设置当前mySQL连接的隔离级别:
set session transaction isolation level read committed;
- 设置数据库系统的全局的隔离级别:
set session global transaction isolation level read committed;
SET autocommit = 0;
START TRANSACTION;
DELETE FROM tab_id WHERE id = 4;
SAVEPOINT a;#设置保存点
DELETE FROM tab_id WHERE id = 7;
ROLLBACK TO a;#回滚到保存点
SELECT * FROM tab_id;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。