数据库事务详解

 

 

测试 savepoint  ---  rollback to

# SAVEPOINT p_1   指定保存点p_1
# ROLLBACK to p_1 指定回滚点p_1
# 中间执行失败会,保存到执行成功的位置,此时可以先commit
# 然后从失败位置继续执行,执行成功后commit
# 

start TRANSACTION;

INSERT into flower (name,price) VALUES ('why',10);
SELECT * FROM flower;
SAVEPOINT f1;

INSERT into flower (name,price) VALUES ('why',40);
SELECT * FROM flower;
SAVEPOINT f2;

INSERT into flower (name,price) VALUES ('why',123); #这里执行成功,但是后面一条执行失败,可以使用rollback to f2;
INSERT into flower (name,price) VALUES ('why');
SELECT * FROM flower;
SAVEPOINT f3;

INSERT into flower (name,price) VALUES ('why',60);
SELECT * FROM flower;
SAVEPOINT f4;

ROLLBACK to f2;

COMMIT;

  

 

事物的ACID特性:

(1)    原子性(atomicity):工作单元中的每项任务要不全部执行成功(不可分割),要不都不执行;

(2)    一致性(consistency):有原子性、隔离性、持久性共同保证(该特性是最终目的),以至于数据状态不改变;

(3)    隔离性(isolation):在当前事物(或工作单元)执行完毕之前,其所访问的数据不受系统其他部分的影响;(各个事物之间不会产生相互影响)

(4)    持久性(durability):在事物执行的过程中,其对数据所做的所有改动在事物结束之前能够保存在某种物理存储设备中,这样保证在系统瘫痪时数据不丢失。

 

 事物的隔离级别及存在的问题:

                      事务的隔离级别                                            存在的问题
read uncommitted(读未提交) 脏读  不可重复读(查询时) 幻读(插入、删除、更新操作时)
read committed(读已提交)   不可重复读(查询时) 幻读(插入、删除、更新操作时)
repeatable read(可重复读)  ---默认的隔离级别     幻读(插入、删除、更新操作时)
serializable(序列化)      

 

 

 

 

posted @ 2020-11-30 12:02  whysun  阅读(176)  评论(0)    收藏  举报