前言:
今天姐妹们对“mysql事务c”大致比较注意,小伙伴们都想要剖析一些“mysql事务c”的相关知识。那么小编也在网上搜集了一些对于“mysql事务c””的相关资讯,希望兄弟们能喜欢,大家一起来了解一下吧!什么是事务?Transaction
常言道:能不麻烦就不麻烦,能简单化就简单化。但是为什么需要事务呢? 事务:用来保证一个业务的完整性,最大的优势就是回滚,并撤销正在进行的所有未提交的修改; 作用是:事务关联业务,业务中的步骤要么成功,要么全部撤销
事务必须在innodb聚集索引下使用,myisam非聚集索引事务无效。
事务有什么特性?
特性,说到事务不得不说ACID 要是面试官问到事务,从ACID开始说起,就很能用自己的语言表述出来你所了解到的事务
在MYSQL下系统默认自动提交事务,单条SQL语句,数据库系统自动将其作为一个事务执行,这种事务被称为隐式事务。
手动把多条SQL语句作为一个事务执行,使用BEGIN开启一个事务,使用COMMIT提交一个事务,这种事务被称为显式事务
A:原子性:Atomicity
每个事务都是一个独立的整体,事务是最小单位,不可拆分,事务要么成功,要么回滚,不可部分成功,部分失败 什么是回滚? 事务发生回滚就是把之前所有的步骤全部撤销(这也是原理)
C:一致性:consistency
简单说就是:操作之前与操作之后都处于一致性的状态
I:隔离性:Isolation
数据库会给每个用户开启事务,但是一个事务不能被其他事物所影响,多个并发事务之间要相互隔离(并发读)
D:持久性:Durability
在事务提交时,数据的改变是永久的,即便系统故障也不会丢失。
事务的隔离性?
事务的操作,一共分为两种:读事务(select)和修改事务(insert,update),如果没有隔离性操作,多个事务可以对一个事务进行修改,最终究达不到想要的效果,回想一下要是所有人都可以修改你的事务,那岂不是你的业务项目就很危险了,安全性低。 例如:
两个事务对同一条事务进行修改,可能造成数据丢失一个事务读取另一个事务未提价的事务,脏读一个事务读取事务的同时,另一个事务正在修改此条数据,多次读取返回来不同的数据一个事务在一定范围内查询,另一个事务数据进行添加或者删除操作,可以在本事务中查询到,这就出现了数据的幻读
保证事务的安全性,一个回话可操作性的级别,决定能被其他会话操作的程度。 隔离性越高,效率越低,安全性越高,读并发越低
事务的隔离级别:UNCOMMITTED:read uncommitted---未提交读---不安全--不安全极端
未提交读:一个事务可以读取另一个事务中未提交的数据
比如你在一个公司里,老板说要不我们更改一下上班机制(事务),不在九九六了(修改),周末双休(修改),但是还没有真正提交实施(未提交),但是你听到了修改机制的这件事情(读取未提交事务),然后你周六就真的不去上班了,事后可想而知了.....情况很严重
会出现的问题:脏读,不可重复读,幻读
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;复制代码COMMITTED:read committed--- 提交读----Oracle默认给出的级别,数据量大
提交读:一个事务读取数据必须在另一个数据提交后。 你拿着银行卡去买单,卡里余额一万五,此时你老婆拿着拿着你的副卡跟朋友去购物,买了一个包一万五,并提交,此时你在用你的 卡买单时查询卡余额时,发现卡里没钱了。就是多个事务可以同时进行修改并提交,发生了提交读,不可重复读的机制。
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;复制代码
会出现的问题:不可重复读,幻读。 不会出现:脏读
REAPTABLE: repeatable read----重复读--- MYSQL默认给出的隔离级别
可重复读,就是在开始读取数据(事务开启)时,不再允许修改操作。幻读的出现:一个事务读取不到另一个事务insert并且提交的数据,但是可以进行修改 就是你拿着卡去买单,卡里余额一万五,但是此时你老婆拿着副卡也去买单,但是此时是用不了的,因为你正在用着这张卡,你开启了事务,你老婆买单这个事务不能对卡进行操作。
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;复制代码
会出现的问题:幻读。 不会出现:脏读,不可重复读,
SERIALIZABLE: serializable--串行化----锁机制--最安全的机制效率低
最高级的事务隔离,事务不相互冲突,每一个数据行都加上了共享锁,保证安全性的同时,降低了效率,适用于安全情况要求特别高的情况下,同时可能出现超时的现象和锁竞争的现象
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;复制代码
不会出现:脏读,不可重复读,幻读
事务隔离性产生的问题:脏读:
事务读取了另一个事务未提交的数据,
不可重复读:
事务A在第一次读取数据后,事务B对数据进行了修改并提交,事务A在重复读取数据时发生改变 第二次读取的数据具体内容与第一次读取的数据内容不一致,不会发生数据行数或者列数的改变
幻读
事务A在一定范围内进行查询,事务B对A查询范围的数据进行添加或者删除数据,在事务A中可以在一定范围内查询到事务B修改后的数据 第二次读取数据与第一次读取数据的不一致,发生了行数上的改变。
操作事务你需要知道的操作:
-- 查看是否为自动提交SHOW SESSION VARIABLES LIKE 'autocommit';-- 开启或关闭自动提交,开启为1,关闭为0SET autocommit=1;-- 查看自动性select @@autocommit;-- 查看隔离性级别SELECT @@tx_isolation;-- 开启事务1begin;--开启事务1start transaction;-- 事务提交commit;-- 事务回滚rollback;复制代码
end》》》
原文链接:
标签: #mysql事务c