MySQL锁和隔离机制

一:MySQL

二:MySQL事务

三:MySQL隔离级别

1.1为什么要有锁?

因为数据库要解决并发控制问题。在同一时刻,可能会有多个客户端对某张表的某条数据或某些数据进行操作,比如有的在读取该行数据,其他的尝试去删除它。为了保证数据的一致性,数据库就要对这种并发操作进行控制,因此就有了锁的概念。

1.2锁的分类

    1.2.1按对数据的操作类型

        LOCK TABLES tb_namelock_type{READ|WRITE};

        UNLOCKTABLES ;

        读锁(共享锁):针对同一块数据,多个读操作可以同时进行而不会互相影响。

写锁(排它锁):当前写操作没有完成前,它会阻断其他写锁和读锁。

        示例1:读锁


        示例2:写锁

    1.2.2锁的粒度:MySQL服务器仅支持表级别的所,行所需要存储引擎完成

        表锁:管理锁的开销最小,同时允许的并发量也最小的锁机制。MyIsam存储引擎使用的锁机制。当要写入数据时,把整个表都锁上,此时其他读、写动作一律等待。在MySql中,除了MyIsam存储引擎使用这种锁策略外,MySql本身也使用表锁来执行某些特定动作,比如alter table.

        行锁:可以支持最大并发的锁策略。InnoDB存储引擎采用这种策略

2.1 ACID

    原子性(Autmic):事务所引起的数据库操作,要么都完成,要么都不执行

    一致性(Consistency):完成之前和完成之后是一样的(两个帐户的钱,转账之前和之后的总和是一样的)

    隔离性(Isolation):一个事务的执行不能影响另一个事务的执行

    持久性(Durability):一旦事务成功完成,系统必须保证任何故障都不能引起事务的不一致性。

2.2事务的状态

2.3保存点(SAVEPOINT

一个很大的事务,这个事务有100个操作,执行到80个的时候发现第75个错了,怎么办?

撤销??---->80个都撤销了--->不好

这样就引出保存点了,每10个做一次保存点

    回滚保存点:ROLLBACK TO sid

    

示例:


3.1事务的隔离级别

    READ-UNCOMMITTED读未提交  别人一操作,立马就能看见(最低的隔离级别)

    READ-COMMITTED读提交  别人提交了,才能看见

    REPEATABLE-READ可重读

(不管别的事务是否提交,我的事务之内看到的依然是一样的,例如A事务执行了UPDATE操

作,B事务执行SELECT操作,在A执行前和后,B执行的结果都一样)

    SERIALIZABLE可串行化

    查看当前数据库的隔离级别:

        SHOW GLOBAL VARIABLES LIKE ‘%ISO%‘;

        SELECT @@TX_ISOLATION;

3.2事务隔离级别对事务的影响

3.2.1READ-UNCOMMITTED示例

【客户端1

【客户端2

【客户端1

【客户端2

总结:客户端2在一个事务内,两次读取的数据不一样,产生了幻读

3.2.2READ-COMMITTED

【客户端1

【客户端2

【客户端1

【客户端2

总结:客户端1未执行提交之前,客户端2看不到更新后的数据,客户端1执行提交之后,客户端2看到了更新以后的数据,客户端2在一个事务内,执行两次查询仍然看到了不同的结果,依然存在幻读的问题

3.2.3REPEATABLE-READ

【客户端1

【客户端2

【客户端1

【客户端2


总结:客户端2在提交前和提交后看到的数据依然不一样,产生了幻读

3.2.4SERIALIZABLE

【客户端1

【客户端2

【客户端1

【客户端2

总结:虽然不存在数据幻读的问题,但是执行效率非常低

时间: 2024-08-03 15:23:41

MySQL锁和隔离机制的相关文章

【MySQL】MySQL锁和隔离级别浅析一

参考:http://imysql.cn/2008_07_10_innodb_tx_isolation_and_lock_mode 本文只是对于"SELECT ... LOCK IN SHARE MODE"和"SELECT ... FORUPDATE"事务中的锁和RR隔离级别内的测试,针对于表结构.索引结构以及其他隔离级别情况下的触发锁类型,可以参考网易何登成网盘中"MySQL 加锁处理分析.pdf"这篇文章,很细致. 何登成百度网盘:http:/

一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制

首先说一下数据库事务的四大特性 1 ACID 事务的四大特性是ACID(不是"酸"....) (1) A:原子性(Atomicity) 原子性指的是事务要么完全执行,要么完全不执行. (2) C:一致性(Consistency) 事务完成时,数据必须处于一致的状态.若事务执行途中出错,会回滚到之前的事务没有执行前的状态,这样数据就处于一致的状态.若事务出错后没有回滚,部分修改的内容写入到了数据库中,这时数据就是不一致的状态. (3) I:隔离性(Isolation) 同时处理多个事务时

【MySQL】MySQL锁和隔离级别浅析二 之 INSERT

最近在整理线上性能时,发现一台线上DB出现两个insert产生的死锁问题 ------------------------ LATEST DETECTED DEADLOCK ------------------------ 150119 10:55:08 *** (1) TRANSACTION: TRANSACTION 578E79C8, ACTIVE 0 sec inserting mysql tables in use 1, locked 1 LOCK WAIT 7 lock struct(

MySQL锁的管理机制

转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/48805847 ********************************** ********************************** MySQL server层面的一些锁? table-level locking(表级锁) ? page-level locking(页级锁) ? row-level locking(行级锁)-----------------------

mysql 锁和隔离事务

--查询表锁争用情况show status like 'ord%';--查看数据库中表的状态,是否被锁:SHOW PROCESSLIST; --脏读 读未提交--A事务读取了B事务修改但未提交的数据 B稍后时候进行了回滚,那么A就发生了脏读 --不可重复读 读不回去了--A事务在进行相同条件查询的时候,(两次或者两次以上)出现了每次结果不一样,因为在查询期间有其他事务进行了update操作,导致结果不一致 --幻读 读多了--A事务在进行相同条件查询的时候,因为在查询期间发现记录数不一样了 ,因

理解MySql事务隔离机制、锁以及各种锁协议

一直以来对数据库的事务隔离机制的理解总是停留在表面,其内容也是看一遍忘一边.这两天决定从原理上理解它,整理成自己的知识.查阅资料的过程中发现好多零碎的概念如果串起来足够写一本书,所以在这里给自己梳理一个脉络,具体的内容参考引文或在网上搜一下.由于平时接触最多的是MySQL,所以文章中某些部分是MySQL特有的特性,请读者注意. 数据库并发操作会引发的问题: 多个事务同时访问数据库时候,会发生下列5类问题,包括3类数据读问题(脏读,不可重复读,幻读),2类数据更新问题(第一类丢失更新,第二类丢失更

mysql锁机制使用总结

1.隔离级别 (1)读不提交(Read Uncommited,RU) 这种隔离级别下,事务间完全不隔离,会产生脏读,可以读取未提交的记录,实际情况下不会使用. (2)读提交(Read commited,RC) 仅能读取到已提交的记录,这种隔离级别下,会存在幻读现象,所谓幻读是指在同一个事务中,多次执行同一个查询,返回的记录不完全相同的现象.幻读产生的根本原因是,在RC隔离级别下,每条语句都会读取已提交事务的更新,若两次查询之间有其他事务提交,则会导致两次查询结果不一致.虽然如此,读提交隔离级别在

Mysql锁机制和事务控制

如何加锁 锁定表的语法:    LOCK TABLES    tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}    [, tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}] ...解锁语法:    UNLOCK TABLES innodb的存储引擎提供行级锁,支持共享锁和排他锁两种锁定模式,以及四种不同的隔离级别. 死锁 InnoDB自动检测事务的死锁,并回滚一个

mysql锁机制整理

Auth: jinDate: 20140506 主要参考整理资料MYSQL性能调优与架构设计-第七章 MYSQL锁定机制http://www.cnblogs.com/ggjucheng/archive/2012/11/14/2770445.html理解MySQL--架构与概念http://www.cnblogs.com/yequan/archive/2009/12/24/1631703.html 一.mysql锁类型及应用介绍1.锁类型和应用类型相對其他數據庫而言,MySQL的鎖機制比較簡單,其