君山 发表于 2021-8-27 11:38:08

mysql中lock tables与unlock tables(锁表/解锁)使用总结

php mysql lock tables 使用有感

mysql 的 表锁 lock tables 感觉就像一个 封闭的空间

mysql发现 lock tables 命令的时候,会将带有锁标记的表(table) 带入封闭空间,直到 出现 unlock tables 命令 或 线程结束, 才关闭封闭空间。

进入封闭空间时 , 仅仅只有锁标记的表(table) 可以在里面使用,其他表无法使用。

锁标记 分为 read 和 write 下面是 两种 锁的区别


如 将 table1 设为read锁, table2 设为write锁, table3 设为read锁

lock tables read, write, read;


1. table1 仅允许[所有人]读,[空间外]如需写、更新要等待[空间退出],[空间内]如需写、更新会引发mysql报错。
2. table2 仅允许[空间内]读写更新,[空间外]如需写、更新要等待[空间退出]。
3. table3 仅允许[所有人]读,[空间外]如需写、更新要等待[空间退出],[空间内]如需写、更新会引发mysql报错。

执行到这里时,退出封闭空间,释放所有表锁
unlock tables

当前线程关闭时,自动退出封闭空间,释放所有表锁,无论有没有执行 unlock tables

function lock(){
    DB::query("LOCK TABLE ".DB::table(self::t_name())." WRITE");
}

function unlock(){
    DB::query("UNLOCK TABLES");
}





页: [1]
查看完整版本: mysql中lock tables与unlock tables(锁表/解锁)使用总结