mysql实现事务

本文详细介绍了MySQL事务的概念,包括其ACID属性——原子性、一致性、隔离性和持久性,并阐述了事务执行的过程。此外,还给出了不同隔离级别的说明,如read-uncommitted、read-committed、repeatable-read和serializable,以及如何通过SQL代码设置事务隔离级别。同时,提到了手动锁定表中的read和write锁及其应用示例。
摘要由CSDN通过智能技术生成

1、定义:确保数据的完整性,表示封装为一个工作逻辑单元的一系列数据操作语句,一组SQL语句,要么同时成功,要么同时失败。

2、事务的ACID属性:

1)原子性:此属性表明执行了所有数据相关操作或没有执行任何操作。

2)一致性:成功完成事务后,所有数据均处于一致的状态。

3)隔离性:操作对数据所作的所有更改是否对并发事务可见,2个事务间不可见。

4)持久性:完成的事务对数据所作的任何更改在系统中永久有效。

3、事务执行的过程:



4、实现事务代码可参考:

-- 没有事务处理 第一条添加成功 后面两条添加失败
insert into employee(id,name,salary) values(142,'cq',9000);
insert into employee(id,name,salary) values(142,'cq',9000);
insert into employee(id,name,salary) values(142,'cq',9000);

#开启事务,则会同时失败,同时成功
start TRANSACTION;
insert into employee(id,name,salary) values(146,'cq',9000);
insert into employee(id,name,salary) values(101,'cq',9000);
insert into employee(id,name,salary) values(102,'cq',9000);
commit;-- 手动开启的事务必须手动提交,提交事务结果反映到数据库。
其中,mysql默认自动提交事务,可关闭自动提交的事务。

set autocommit=0;#关闭自动提交
#因为关闭了自动提交事务,则添加数据不会保存到数据库中
insert into employee(id,name,salary) values(143,'cq',9000);
commit;#手动提交所有未执行的数据
5、回滚,rollback 还原(事务中若出现错误,则把所有数据恢复到事务开始前的状态),其实现还原,适用savapoint保存点方式参考代码:

-- 保存点 savepoint
begin
  declare is_error int default false;#是否出错的标志
  declare continue handler for sqlexception
  set is_error=true;#声明异常处理程序,如果sql异常,则把标志为设置为true
  start TRANSACTION;#开启事务,则会同时失败,同时成功
  savepoint s1;#创建保存点
  insert into employee(id,name,salary) values(146,'cq',9000);
  savepoint s2;
  insert into employee(id,name,salary) values(101,'cq',9000);
  insert into employee(id,name,salary) values(102,'cq',9000);
  if is_error THEN
    rollback to savepoint s1;-- 还原到s1
    insert into employee(id,name,salary) values(151,'cq',9000);
    insert into employee(id,name,salary) values(152,'cq',9000);
    commit;
  end if;
end;
6、事务的隔离级别确定事务相互隔离的程度。mysql支持以下隔离级别:

1)read-uncommitted:指定事务能查看其他事务所作的尚未提交的数据更改。

2)read-committed:指定数据更改仅在提交后才对其他事务可见。

3)repeatable-read:指定事务中的每次读取都将返回同一组数据,是隔离InnoDB的默认值。

4)serializable:指定事务在所有被访问记录和资源上放置锁。

使用sql代码设置事务隔离级别的方式:

set session transaction isolation level read uncommitted;
7、serializable隔离级别中锁的使用

1)手动锁定表中锁的类型:

      a)read锁:共享锁,阻止对资源的任何写入。

      b)write锁。

2)锁的用法参考代码:

-- 打开锁
lock table employee read;#给表加上只读锁,只能查询,不能更新
select * from employee;#成功
delete from employee where id=101;#失败
-- 解锁
unlock tables;



  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值