MySQL之事务

一、定义

Transaction Control Lanuage——事物控制语言;

事物:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。

二、MySQL中的存储引擎

2.1 含义

存储引擎:在MySQL中的数据用各种不同的技术存储在文件(或内存)中。

2.2 如何查看储存引擎?

通过show engines;来查看MySQL支持的存储引擎。

2.3 存储引擎有哪些?

在MySQL中用最多的存储引擎有:innob,myisam,memory等。其中innob支持事务,而myisam、memory等不支持事物。

三、事务ACID属性(面试题★)

1. 原子性(Atomicity):

一个事务不可再分割,要么都执行要么都不执行。

2. 一致性(Consistency):

一个事务执行会使数据从一个一致状态切换到另一个一致状态.

3. 隔离性(Isolation):

一个事务的执行不受其他事务的干扰.

4. 持久性(Durability):

一个事务一旦提交,则会永久的改变数据库的数据.

四、事务的创建

4.1 隐式事务

事务没有明显的开启和结束的标记,比如insert、update、delete语句。

4.2 显示事务

事务具有明显的开启和结束的标记,前提:必须先设置自动提交功能为禁用。

步骤1:开启事务:

set autocommit=0;

start transaction;(可选的)

步骤2:编写事务中的sql语句(select insert update delete):

语句1;

语句2;

...

步骤3:结束事务:

commit;结束事务

rollback;回滚事务(savepoint 节点名;设置保存点,搭配rollback to 节点名使用,表示回滚到保存点)

五、事务并发问题

5.1 原因

对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题。

5.2 事务并发的类型

5.2.1 脏读

对于两个事务T1,T2,T1读取了已经被T2更新但还没有被提交的字段之后,若T2回滚,T1读取的内容就是临时且无效的。

5.2.2 不可重复读

对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段之后,T1再读取同一字段,值就不同了。

5.2.3 幻读

对于两个事务T1,T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行之后,如果T1再次读取同一个表,就会多出几行。

六、事务的隔离级别

6.1 含义

一个事务与其他事务隔离的程度称为隔离级别。

6.2 隔离级别

                                  脏读          不可重复读          幻读

read uncommitted:  √                      √                      √

read committed:      ×                      √                      √

repeatable read:      ×                      ×                     √

serializable:             ×                      ×                     ×

MySQL中默认第三个隔离级别 repeatable read;

Oracle中默认第二个隔离级别 read committed。

6.3 如何设置隔离级别

1.查看当前隔离级别:select @@tx_isolation;

2.设置当前MySQL连接的隔离级别:set session transaction isolation level read committed;

3.设置数据库系统的全局的隔离级别:set global transaction isolation level read committed;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值