当前位置:首页 > MySQL教程 > 正文内容

事务的隔离级别详解_MySQL教程,事务,隔离级别

搜教程4年前 (2020-03-03)MySQL教程157

mysql如何重置root密码_MySQL教程

mysql重置root密码的方法:1、使用service mysql stop停止MySQL服务;2、使用--skip-grant-tables参数进入安全模式的MySQL;3、使用update命令更新root密码即可。

事务的隔离级别

在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。

推荐:《mysql教程》

问题的提出

数据库是要被广大客户所共享访问的,那么在数据库操作过程中很可能出现以下几种不确定情况。

更新丢失

两个事务都同时更新一行数据,一个事务对数据的更新把另一个事务对数据的更新覆盖了。这是因为系统没有执行任何的锁操作,因此并发事务并没有被隔离开来。

脏读

一个事务读取到了另一个事务未提交的数据操作结果。这是相当危险的,因为很可能所有的操作都被回滚。

不可重复读

不可重复读(Non-repeatable Reads):一个事务对同一行数据重复读取两次,但是却得到了不同的结果。

包括以下情况:

(1) 虚读:事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时得到与前一次不同的值。

ubuntu安装mysql的方法_MySQL教程

ubuntu安装mysql的方法:首先执行apt install mysql-server mysql-client安装mysql;然后使用vi命令编辑数据库配置,允许远程登录;最后执行service mysql restart重启即可。

(2) 幻读(Phantom Reads):事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查询中未出现的数据或者缺少了第一次查询中出现的数据(这里并不要求两次查询的SQL语句相同)。这是因为在两次查询过程中有另外一个事务插入数据造成的。

解决方案

为了避免上面出现的几种情况,在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同。

未授权读取

也称为读未提交(Read Uncommitted):允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。

授权读取

也称为读提交(Read Committed):允许不可重复读取,但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。

可重复读取(Repeatable Read)

可重复读取(Repeatable Read):禁止不可重复读取和脏读取,但是有时可能出现幻读数据。这可以通过“共享读锁”和“排他写锁”实现。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。

序列化(Serializable)

序列化(Serializable):提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。

隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed。它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、幻读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。

更多编程相关内容,请关注ki4网编程入门栏目!

以上就是事务的隔离级别详解的详细内容,更多请关注ki4网其它相关文章!

分享一些MySQL数据库的优化技巧_MySQL教程

分享一些MySQL数据库的优化技巧:1、开启查询缓存,优化查询;2、explain你的select查询;3、当只要一行数据时使用limit 1;4、为搜索字段建索引;5、使用ENUM而不是VARCHAR,等等。

扫描二维码推送至手机访问。

版权声明:本文由搜教程网发布,如需转载请注明出处。

本文链接:https://www.sojiaocheng.cn/17317.html

分享给朋友:

“事务的隔离级别详解_MySQL教程,事务,隔离级别” 的相关文章

GreenPlum中一样平常SQL剧本【MySQL教程】,GreenPlum,脚本,日常

--1.指定月份统共若干天 SELECT EXTRACT(DAY FROM CAST('2017-08-01' AS DATE) + INTERVAL '1 month' - INTERVAL '1 day') SELECT EXTRACT(DAY FROM CAST(TO_CHAR(N...

mysql索引index相干敕令的细致引见【MySQL教程】,mysql,index,命令

mysql索引index相干敕令的细致引见【MySQL教程】,mysql,index,命令

本文主要内容: 显现表中多有的索引show all index 增加索引ADD INDEX, 增加唯一索引add unique index 多列团结增加索引,primary key 关键词index vs key show all index show index fr...

mysql中update与insert经常使用详解【MySQL教程】,update,insert,mysql

mysql中update与insert经常使用详解【MySQL教程】,update,insert,mysql

本文主要内容: update更新,batch批量更新 insert 数据到表中,将表中数据插进去到另一个表中 insert ignore疏忽反复数据插进去报错题目 update更新,batch批量更新 set sql_safe_updates=0;# 通例updateup...

MySQL中关于prepare道理的详解【MySQL教程】,prepare,MySQL,详解

这篇文章重要引见了MySQL prepare的相干内容,包括prepare的发生,在服务器端的实行历程,以及jdbc对prepare的处置惩罚以及相干测试,须要的朋侪能够了解下。愿望对人人有所协助。 Prepare的优点 Prepare SQL发生的缘由。首先从mysql服务器实行sql...

Mysql删除反复数据保存最小的id【MySQL教程】,Mysql,保留,数据

在网上查找删除反复数据保存id最小的数据,要领以下: DELETE FROM people WHERE peopleName IN ( SELECT peopleName FROM...

MySQL找回用户数据的案例【MySQL教程】,MySQL,案例,数据

MySQL找回用户数据的案例【MySQL教程】,MySQL,案例,数据

事变经由 有天,我们公司外区的一个贩卖C说他8月3号之前的工作流纪录找不到了。问清启事,本来是更新了微信号(我们公司的工作流是基于企业微信开辟的)。经由剖析,微信号和流程数据并没什么关系,所以开端得出结论:原本只需要更新微信号的,效果我们公司的流程体系管理员把用户先删除,再创建了新的用户。...