首页 > 数据库 >数据库事务,行级锁

数据库事务,行级锁

时间:2022-12-19 17:25:35浏览次数:47  
标签:行级 事务 隔离 Read 数据库 提交 dos commit

事务

一、事务的特性:(符合以下的特性就属于事务)

原子性:事务要么全执行,要么全不执行 一致性:事务执行前后,数据完整性一致 隔离性:一个事务的执行不能被其他事务干扰。       持久性:指一个事务一旦提交,对数据库中数据的改变是永久性的。(commit) 查看commit自动提交是打开的 show variables like '%auto%'; 设为false set autocommit=0;(一个dos窗口就是connection),这是临时设置为false,关闭再打开dos窗口就失效了 autocommit设为false就是不是自动提交了,而是手动提交了,这样就是如果都对的话就是commit,如果有一条不对就可以rollback(回滚) 例如下: 删除empno为1001的员工 可以看到当前dos窗口查不到1001的员工了,但是又打开一个dos窗口可以看到可以查到所以就是没提交(commit)就是没有删除 可以看到rollback可以倒退到删除之前了,可以查到了(注意:rollback就是回滚之前所有的成功语句,比如说1,2,3,4,5这些语句1,3,5成功了2,4失败了,那么rollback就是回滚1,3,5,的语句) MySQL中常见的数据库引擎有MyISAM、InnoDB、Memory。 mysql默认就是InnoDB引擎,MyISAM不支持事务

二、事务的隔离级别:如下四种

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%';)

1、设置读已提交(不可重复读)

可以看到设置为读已提交是删除之后提交了其他dos才能查到最新的,下面是当前dos窗口没有了1003的信息 另一个dos的1003还在 提交之后就是可以查到最新的,所以就是commit之后读到最新的

2、默认的不设置就是可重复读Repeatable Read,两边数据一样的

如果执行相同的语句未提交会堵塞

 

提交了之后也是删除失败,幻读

3、读未提交(set session transaction isolation level Read Uncommitted;)

可以查到未提交的数据

三、行级锁

1、一个正在查修改,另一个就会被堵塞

2、只有commit之后才会查出来

 

 

标签:行级,事务,隔离,Read,数据库,提交,dos,commit
From: https://www.cnblogs.com/YHSDDJM/p/16992578.html

相关文章