事务
一、事务的特性:(符合以下的特性就属于事务)
原子性:事务要么全执行,要么全不执行 一致性:事务执行前后,数据完整性一致 隔离性:一个事务的执行不能被其他事务干扰。 持久性:指一个事务一旦提交,对数据库中数据的改变是永久性的。(commit) 查看commit自动提交是打开的 show variables like '%auto%';![](/i/l/?n=23&i=blog/2999801/202212/2999801-20221219165409615-1398217868.png)
![](/i/l/?n=23&i=blog/2999801/202212/2999801-20221219165513174-1564980725.png)
![](/i/l/?n=23&i=blog/2999801/202212/2999801-20221219165528886-180125362.png)
![](/i/l/?n=23&i=blog/2999801/202212/2999801-20221219165545458-715181544.png)
![](/i/l/?n=23&i=blog/2999801/202212/2999801-20221219165607518-1757334676.png)
二、事务的隔离级别:如下四种
1)Read Uncommitted(读未提交,防止丢失更新) 一个事务在执行过程中,既可以访问其他事务未提交的新插入的数据,又可以访问未提交的修改数据。如果一个事务已经开始写数据,则另外一个事务不允许同时进行写操作,但允许其他事务读此行数据。此隔离级别可防止丢失更新。 脏读:事务A读取了事务B未提交的数据,事务B却回滚了。 2)Read Committed(读已提交,防止脏读) 一个事务在执行过程中,既可以访问其他事务成功提交的新插入的数据,又可以访问成功修改的数据。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。此隔离级别可有效防止脏读。 3)Repeatable Read(可重复读取,防止不可重复读和脏读) 一个事务在执行过程中,可以访问其他事务成功提交的新插入的数据,但不可以访问成功修改的数据。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。此隔离级别可有效防止不可重复读和脏读。 4)Serializable(可串行化,都可避免) 提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。此隔离级别可有效防止脏读、不可重复读和幻读。但这个级别可能导致大量的超时现象和锁竞争,在实际应用中很少使用。 mysql默认的就是可重复读(Repeatable Read) 查看隔离级别语句(select @@transaction_isolation; 或者show variables like '%transaction_isolation%';)![](/i/l/?n=23&i=blog/2999801/202212/2999801-20221219165639172-1258739352.png)
1、设置读已提交(不可重复读)
![](/i/l/?n=23&i=blog/2999801/202212/2999801-20221219165649713-1110243097.png)
![](/i/l/?n=23&i=blog/2999801/202212/2999801-20221219165700476-1598629717.png)
![](/i/l/?n=23&i=blog/2999801/202212/2999801-20221219165842356-444743143.png)
![](/i/l/?n=23&i=blog/2999801/202212/2999801-20221219165748692-2063038695.png)
2、默认的不设置就是可重复读Repeatable Read,两边数据一样的
如果执行相同的语句未提交会堵塞
![](/i/l/?n=23&i=blog/2999801/202212/2999801-20221219165919077-1138073230.png)
3、读未提交(set session transaction isolation level Read Uncommitted;)
![](/i/l/?n=23&i=blog/2999801/202212/2999801-20221219170055314-1295155310.png)
![](/i/l/?n=23&i=blog/2999801/202212/2999801-20221219170108926-153848052.png)
三、行级锁
1、一个正在查修改,另一个就会被堵塞
![](/i/l/?n=23&i=blog/2999801/202212/2999801-20221219170129125-1468665033.png)
2、只有commit之后才会查出来
![](/i/l/?n=23&i=blog/2999801/202212/2999801-20221219170141469-1053669978.png)
标签:行级,事务,隔离,Read,数据库,提交,dos,commit From: https://www.cnblogs.com/YHSDDJM/p/16992578.html