Mysql 事务

 

 

 

 

 

Transaction Control Language 事务控制语言
事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行

案例:转账

张三丰 1000
郭襄 1000
update 表 set 张三丰的余额=500 where name = ‘张三丰’
update 表 set 郭襄的余额=1500 where name = '郭襄'


事务的ACID属性
1.原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
2.一致性(Consistency)
事务必须使数据从一个一致性状态变换到另外一个一致性状态。
3.隔离性(Isolation)
事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个
事务内部的操作及使用的数据对并发的其他事务是隔离的,并发
执行的各个事务之间不能互相干扰。

4.持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,
接下来的其他操作和数据库故障不应该对其有任何影响。

事务的创建
隐式事务:事务没有明显的开启和结束的标记
比如insert,update,delete语句

显式事务:事务具有明显的开启和结束的标记
前提:必须先设置自动提交功能为禁用
set autocommit = 0;
步骤1:开启事务
set autocommit = 0;
start transaction;可选的
步骤2:编写事务中的sql语句(select insert update delete)
语句1;
语句2;
....
步骤3:结束事务
commit;提交事务
rollback;回滚事务

SAVEPOINT 节点名 :设置保存点

开启事务的语句:
update 表 set 张三丰的余额=500 where name = ‘张三丰’
update 表 set 郭襄的余额=1500 where name = '郭襄'
结束事务的语句:

事务的隔离级别(Isolation level)
            脏读 不可重复读 幻读
READ UNCOMMITTED : ☑️    ☑️     ☑️
READ COMMITTED    ✖️     ☑️     ☑️
REPEATABLE READ   ✖️    ✖️      ☑️
SERIALIZABLE       ✖️    ✖️     ✖️
myql中默认第三个隔离级别 REPEATABLE READ
oracle中默认第二个隔离级别 READ COMMITTED

set session transaction isolation level 隔离级别

 

 

 

 

 

 

 

show VARIABLES like'autocommit';
show ENGINES;
#演示事务的使用步骤

DROP TABLE IF EXISTS account;

CREATE TABLE account(
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(20),
    balance DOUBLE
);
INSERT INTO account(username,balance) VALUES('张无忌',1000),('赵敏',1000);

select * from account;

#开启事务
set autocommit = 0;
START TRANSACTION;
#编写一组事务的语句
UPDATE account SET balance = 1000 WHERE username = '张无忌';
UPDATE account SET balance = 1000 WHERE username = '赵敏';
#结束事务
ROLLBACK;
#COMMIT;

#3.演示savepoint的使用
SET autocommit = 0;
START TRANSACTION;
DELETE FROM account WHERE id = 2;
SAVEPOINT a;#设置保存点
DELETE FROM account WHERE id = 1;
ROLLBACK TO a;#回滚到保存点

 

posted @ 2022-01-10 12:00  donkey8  阅读(34)  评论(0)    收藏  举报