1.事务:
事务用于保证数据的一致性,它由一组相关的dml语句组成,该组成的dml语句要么全部成功,要么全部失败.如:银行,微信转账就要用事务来处理,用以保证数据的一致性.
1.1 事务和锁
当执行事务操作时,(dml语句),mySQL会在表上加锁,防止其他用户改表的数据,这对用户来讲是非常重要的
mysql数据控制台事务的几个重要操作(基本操作)
1.set autocommit --改变自动提交模式,等于0时关闭自动提交模式,等于1开启自动提交模式,默认为1,使用事务时为0.
2. start transaction -- 开始一个事务,标记事务的起始点
3.commit --提交一个事务给数据库
4.rollback --将事务回滚,数据回到本次事务的初始状态
set autocommit = 0; -- 关闭mysql自动提交
-- 开始事务
start transaction
-- 设置保存点
savepoint a
-- 执行dml 操作
insert into t27 values (100,'tom')
select * from t27;
-- 设置保持点
savepoint b
-- 再次添加
insert into t27 values (100,'xb')
-- 回退到b
rollback to b
-- 继续回退 a
ROLLBACK TO a
-- 如果这样, 表示直接回退到事务开始的状态
set autocommit = 1; -- 开启mysql自动提交
1.2 回退事务
先介绍一下保存点。保存点是事务中的点,用于取消部分事务,当结束事物时(commit),会自动的删除该事物所定义的所有保存点,当执行回退事务时,通过指定保存点可以回退到指定的点
1.3 提交事务
使用commit语句可以提交事物,当执行了commit语句之后会确认事物的变化结束事物删除保存点,释放锁,数据生效,当使用commit语句结束事物后,其他会话将可以查看到事物变化后的新数据,所有数据就正式生效
1.4 事务细节讨论
1.如果不开始事务,默认情况下dml操作是自动提交的,不能回滚
2.如果开始一个事务,你没有创建保存点,你可以执行rollback。默认就是回退到你事物开始的状态.
3.你可以在这个事物中还没有提交时,创建多个保存点
4.你可以在事务没有提交前选择回退到哪个保存点
5.MySQL的事物机制需要InnoDB的存储引擎才可以使用
-- 1. 如果不开始事务,默认情况下,dml 操作是自动提交的,不能回滚
INSERT INTO t27 VALUES(300, 'milan'); -- 自动提交 commit
SELECT * FROM t27
-- 2. 如果开始一个事务,你没有创建保存点. 你可以执行 rollback,
-- 默认就是回退到你事务开始的状态
START TRANSACTION
INSERT INTO t27 VALUES(400, 'king');
INSERT INTO t27 VALUES(500, 'scott');
ROLLBACK -- 表示直接回退到事务开始的的状态
COMMIT;
-- 3. 你也可以在这个事务中(还没有提交时), 创建多个保存点.比如: savepoint aaa; -- 执行 dml , savepoint bbb
-- 4. 你可以在事务没有提交前,选择回退到哪个保存点
-- 5. InnoDB 存储引擎支持事务 , MyISAM 不支持
-- 6. 开始一个事务 start transaction, set autocommit=off;
mysql中的锁:
基于锁的属性分类:共享锁(读锁,s锁)排他锁(写锁,读锁)
基于锁的粒度分类:表锁,行锁(记录锁,间隙锁,临键锁)
基于锁的状态分类:意向共享锁,意向排它锁
2.隔离级别:
事务并发执行的时候,如果不进行事务隔离,那么就会产生脏读,脏写,重复读,幻读的问题
不可重复读:同一查询在同一事物中多次进行。由于其他提交事务。所做的修改或删除,每次返回不同的结果集,此时发生不可重复读
幻读:同一查询在同一事物中多次进行,由于其他提交事务。所做的插入操作,每次返回不同的结果集此时发生幻读