首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql是否在选择、更新或删除上锁定表?

mysql是否在选择、更新或删除上锁定表?
EN

Stack Overflow用户
提问于 2013-04-16 09:46:39
回答 2查看 17.4K关注 0票数 7

关于MySQL table lock,我有几个问题。如果有人回答,我很感激:)

  1. 在下列情况下,MySQL是否自动锁定表:
代码语言:javascript
复制
- `SELECT id FROM members;`
- `UPDATE members SET name = 'john' WHERE id = 7;`

  1. 这两者之间有什么区别:
代码语言:javascript
复制
- `LOCK TABLE items READ ; SELECT * FROM 'items;`
- `SELECT * FROM 'items';`

  1. 出于某种原因,我的印象是MySQL会在必要的情况下自动锁表!如何检查锁定发生的时间和方式?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-04-16 10:05:36

1.a)不需要锁

1.b)锁定表(myisam引擎),或者如果您使用innodb引擎,则具有行级锁定。

2.a)锁定表以进行读操作(直到释放此锁为止,不发生写入操作)

2.b)不需要锁

正如LithuT.V建议的那样,请阅读文档以获得所有的用例。

票数 5
EN

Stack Overflow用户

发布于 2013-04-16 10:07:39

  1. 据我所知,在mysql中,表不是自动锁定的。但这取决于你用的是什么。例如,使用SqlTransaction,受影响的表将被锁定,直到提交或回滚。
  2. a.首先锁定表,这将确保在读取表时,没有其他人能够锁定它以写入,从而导致死锁;b.在某些特殊情况下,表上的锁可能会阻止您读取表,因此sql失败。
  3. 使用“显示打开的表”,您将看到所有可用的表及其锁定状态--这有点复杂,因为要排除系统表,比如:

$sql =“从‘.$db_name.’显示打开的表‘,其中In_use >0和'Table’IN (";$tables = count($array_tables_names);for($i = 0;$i < $tables;$i++):$sql .=”‘.$array_tables_names$i.’;if($i <($ TABLES 1) $sql .= ";“;AND;$sql .= ")";

有关锁的更多信息可以在这里找到:http://dev.mysql.com/doc/refman/5.1/en//lock-tables.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16033768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档