本文简要介绍了MySQL数据库中的锁,锁定水平,读写锁等。例如竞争,锁引起的问题以及如何解决这些问题,并将单独写文章以解释。
所有必须从事与软件相关的工作的学生或多或少都是锁的概念,那么锁到底是什么?
锁实际上是计算机协调多个进程或线程以访问特定资源的机制。
如果您不锁定,则将一起操作某个资源,这将引起混乱。锁定是将并行操作用于串行操作。当过程或线程运行资源时,我们使用锁来拦截过程或线程以防止它们干扰操作。当操作此线程时,我们让下一个线程操作资源,以便彼此不影响该资源有序的方法,极大地确保了资源的安全。
数据库中的锁定良好。数据是共享资源,每个具有操作授权的用户都可以操作数据。如果两个线程同时转到数据库的某些数据,例如库存,如果两个线程未锁定,则两个线程都会扣除库存同时。控制,它们都修改了100,结果为90或95,但总共扣除了15,正常库存为85。
如果您没有锁定,则不会保证数据的一致性。
MySQL数据库是众多数据库之一。随着IOE的开发,它已成为MySQL数据库本身主要企业结构化数据库的首选。因此。
1.3.1 MySQL锁定级别的锁定水平实际上取决于我们使用的存储引擎,并且不同的存储引擎锁也不同。
MySQL中不同锁定水平之间的区别:
1.3.2读写锁只是锁的水平。该数据库确实使用读取锁或锁定。每个级别锁定为读取锁或写锁。
此处的表锁指的是Myisam的表格锁,锁指的是InnoDB的线路锁。它们是我们最常用的,因此将其引入为例。
表共享锁
读取锁不会阻止其他用户的读取操作,但会阻止写作操作。
如何锁定?
查询操作(选择)将自动读取锁。
表独表表表表
写作锁将阻止同一表的阅读和写作操作。
在执行更新操作(更新,删除,插入等)之前,您将自动添加涉及的表
InnoDB和Myisam之间的最大区别是:一个是支持交易;另一个是使用线路 - 级别的锁。增加事务使锁更加复杂,带来了许多新问题。
InnoDB的行锁基于索引。如果索引无法访问数据,InnoDB将使用表锁。
共享锁:也称为阅读锁。
读取锁不会阻止其他交易的读数,但会阻止其他交易,这不会影响其他交易以获得读取锁。
阅读锁可以使一项交易可以读取数据线,并防止其他交易获得同一数据集的写作锁定。但是,其他交易可以继续获取当前交易的阅读。直到所有锁定版本都可以允许其他交易获得数据集的写作锁定之前。
选择将不会添加任何锁。选择...锁定在共享模式语句加共享锁。
只要有读取行数据的交易,就没有写操作的交易。
锁行(x):也称为写作锁。
可以更新写作锁的交易,这将阻止其他交易以获取读取锁定并写入数据锁。
更新操作的执行(更新,删除,插入等)将自动添加所涉及的数据。
使用SELECT ...进行更新语句锁定他。
意图共享锁(IS):
该交易旨在提供数据以共享共享锁。交易必须在数据线和共享锁之前获得表的IS锁定。
知识分子锁定他(ix):
交易打算排除数据行的锁定,交易必须在他的锁之前获得桌子的ix锁定。
不同的方案由不同的算法实现:
因此,实际上,Next-keylocks = Gap Lock+ recredlock锁