首页 > 编程知识 正文

mysql锁表操作,mysql 锁表原因

时间:2023-05-03 20:31:47 阅读:189323 作者:1131

首先修改表的结构可能会导致表被锁定。 以前使用的是DB2、DB 2修改表结构必须锁定表,但锁定解除也很简单,有专用的关键词regon来解除表的锁定,但MySQL不同。 原因: MySQL(5.6或更高版本)支持在线DDL,并支持同时执行操作和查询。 实际上,更改表结构不一定会锁定表,但概率上会锁定表。 首先,我们将讨论两种类型的MySQL表锁。 一个是lock table中的表锁,另一个是元数据锁。 第一个表级锁由一个线程执行lock table操作。 例如,如果你执行读取操作,而另一个线程试图执行写入操作,那就不行了,他也要读吗? 没关系的,反正你只要不影响我就行了。 同样写操作的话,你这个时候读一定不行。 要说什么时候能正常读写,运行unlock table之后就可以了。 第二个元数据锁定,元数据锁定也称为MDL。 这其实是我们使用中最常见的摇表。 此MDL是隐式锁,kdls在访问表时会自动添加MDL,以确保读写正确的数据。 例如,在有人访问时,如果一个字段被修改、删除或添加,可能会影响写入的结果。 此时,我会把这张表锁上。 当我们修改字段时,MDL可能会导致表被锁定,但同一操作可能不会锁定表。 那是因为当你执行修改时,没有人遍历你修改的表。 实际上,你的程序可能在跑。 访问此表,还可以在其他人不知情的情况下访问读写表,从而导致表被锁定。 但是,尽管你只做了一个操作,你还是会访问或者修改。 处理: 步骤1查看锁定的表 show OPEN TABLES where In_use 0; 结果显示锁定的表。 在某些表中,如果关联其他表,则会锁定多个表 其实我能跨越这一步。 因为在步骤2中可以知道那些操作锁。 ) 步骤2查找进程 show processlist; 步骤3找到锁表的过程 是那个锁表的过程。 如果记住这个进程编号,它将是第一个id字段。 步骤4基尔退出这个过程 基尔xxxxx

就像我们的Linux一样的杀戮过程。 )

第五步回顾一下,有一只表还没有锁

show OPEN TABLES where In_use 0;

如果没有异常的时钟锁定过程就可以了。

MySQL修改表结构

MySQL支持在线DDL。 (在线直接修改。 当然,这是5.6以后的版本,包含5.6。 现在是9012年。 5.5以前的太古版本很少使用吧。 )

因此,无论您是navicate还是MySQL客户端,都支持在线修改,但问题是避免其他人、系统或线程影响此表的操作,从而导致MDL锁定表

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。