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

mysql是否在选择、更新或删除时锁定表?,mysql,locking,Mysql,Locking,关于MySQL表lock,我有几个问题。如果有人回答我,我将不胜感激:) MySQL是否在以下情况下自动锁定表: 从成员中选择id updatemembers SET name='john',其中id=7 这两者的区别是什么: 锁定读取的表项;选择“从”项 从“项目”中选择* 出于某种原因,我的印象是MySQL会在必要的时候自动锁定表!如何检查锁定发生的时间和方式 谢谢。1.a)不需要锁 1.b)锁定表(myisam引擎),或者如果使用innodb引擎,则具有行级锁定 2.a)为读取操作

关于MySQL表
lock
,我有几个问题。如果有人回答我,我将不胜感激:)

  • MySQL是否在以下情况下自动锁定表:

    • 从成员中选择id
    • updatemembers SET name='john',其中id=7
  • 这两者的区别是什么:

    • 锁定读取的表项;选择“从”项
    • 从“项目”中选择*
  • 出于某种原因,我的印象是MySQL会在必要的时候自动锁定表!如何检查锁定发生的时间和方式

  • 谢谢。

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

    2.a)为读取操作锁定表(在释放此锁定之前,不会发生写入操作)
    2.b)不需要锁

    正如Lithu T.V所建议的,请阅读以获得所有用例

  • 据我所知,在mysql中,表不是自动锁定的。但这取决于你用什么。 例如,对于SqlTransaction,受影响的表将被锁定,直到您提交或回滚

  • a。首先锁定表,这将确保在读取表时,没有其他人可以将其锁定为写入,从而导致死锁;) B在某些特殊情况下,表上的锁可能会阻止您读取表,因此sql会失败

  • 通过“显示打开的表”,您将看到所有可用表及其锁定状态 这有点复杂,因为您要排除系统表,例如:

  • $sql=“显示从“”打开的表。$db\u name.”
    使用中的位置>0
    及
    “表”在(“;
    $tables=计数($array\u tables\u name);
    对于($i=0;$i<$tables;$i++)而言:
    $sql.=“'””$array_tables_name[$i]。“'”;
    如果($i<($tables-1))$sql.=“,”;
    endfor;
    $sql.=”;
    
    有关锁的更多信息可在此处找到:

    取决于。。。什么存储引擎?在交易中?如果是的话,隔离级别是什么?很想知道MyISAM和InnoDB。
    $sql = "SHOW OPEN TABLES FROM '".$db_name."'
    WHERE In_use > 0
    AND
    'Table' IN (";
    
    $tables = count($array_tables_names);
    for($i = 0; $i < $tables; $i++):
    $sql .= "'".$array_tables_names[$i]."'";
    if($i < ($tables-1)) $sql .= ",";
    endfor;
    
    $sql .= ")";