事务:
第一种隔离级别:Read uncommitted(读未提交)
第二种隔离级别:Read committed(读提交)
第三种隔离级别:Repeatable read(可重复读取)
第四种隔离级别:Serializable(可序化)
-- 查询默认的隔离机制
select @@transaction_isolation;
-- 模拟未提交的操作--------------
-- 开启事务
begin;
SELECT * FROM `sys_users` where id = 2;
-- 操作数据库
UPDATE sys_users set username = '123345' WHERE id = 2;
-- 回滚
ROLLBACK;
-- 模拟提交的操作
begin;
UPDATE sys_users set username = '123345' WHERE id = 2;
COMMIT;
-- ----------------------------------
-- 以下为复杂操作
1、
-- 关闭自动提交
SET autocommit = 0;
-- 修改默认的隔离级别 READ UNCOMMITTED 读取未提交----------------------
-- 去读未提交的信息
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- 查找隔离情况
select @@transaction_isolation;
begin;
SELECT * FROM `sys_users` where id = 2;
ROLLBACK;
2、
-- 修改默认的隔离级别 READ COMMITTED 读取已提交-----------------
-- 去读已提交的信息
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- 查找隔离情况
select @@transaction_isolation;
SET autocommit = 0;
begin;
SELECT * FROM `sys_users` where id = 2;
ROLLBACK;
COMMIT;
3、
– 修改默认的隔离级别 REPEATABLE READ 可重复读-----------------
– 保留第一次进来的读取值,别人的不影响该事务查找的值
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
– 查找隔离情况
select @@transaction_isolation;
SET autocommit = 0;
begin;
SELECT * FROM `sys_users` where id = 2;
ROLLBACK;
COMMIT;
4、
– 修改默认的隔离级别 SERIALIZABLE 可序列化-----------------
– 一个事务没有提交,另一个事务会卡在那里
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- 查找隔离情况
select @@transaction_isolation;
SET autocommit = 0;
begin;
SELECT * FROM `sys_users` where id = 2;
ROLLBACK;
COMMIT;
-- 假设并发打断代码
begin;
--悲观锁
SELECT * FROM `sys_users` where id = 2 for UPDATE
--乐观锁
SELECT * FROM `sys_users` where id = 2 and username='ddd'
-- 可以改变事务查看update后的结果
UPDATE sys_users set username = 'ccc' WHERE id = 2;
--回到上个语句查看select的结果
--SELECT * FROM `sys_users` where id = 2;
COMMIT;
ROLLBACK;
锁:
– 锁 悲观锁
begin;
–数据库层面加锁
SELECT * FROM sys_users
where id = 2 for UPDATE;
ROLLBACK;
COMMIT;
– 乐观锁 逻辑层面加锁 where条件那些
SELECT * FROM sys_users
where id = 2
UPDATE sys_users set username = ‘ccc’ WHERE id = 2;
事务满足如下几个特性:
原子性(Atomicity):
一个事务中的所有操作要么全部完成,要么全部不完成。
一致性(Consistency): 事务执行前后数据库的状态保存一致。
隔离性(Isolation) 多个并发事务对数据库进行操作,事务间互不干扰。
持久性(Durability) 事务执行完毕,对数据的修改是永久的,即使系统故障也不会丢失