php mysql lock tables 使用有感
mysql 的 表锁 lock tables 感觉就像一个 封闭的空间
mysql发现 lock tables 命令的时候,会将带有锁标记的表(table) 带入封闭空间,直到 出现 unlock tables 命令 或 线程结束, 才关闭封闭空间。
进入封闭空间时 , 仅仅只有锁标记的表(table) 可以在里面使用,其他表无法使用。
锁标记 分为 read 和 write 下面是 两种 锁的区别
如 将 table1 设为read锁, table2 设为write锁, table3 设为read锁
lock tables [table1] read,[table2] write,[table3] read;
1. table1 仅允许[所有人]读,[空间外]如需写、更新要等待[空间退出],[空间内]如需写、更新会引发mysql报错。
2. table2 仅允许[空间内]读写更新,[空间外]如需写、更新要等待[空间退出]。
3. table3 仅允许[所有人]读,[空间外]如需写、更新要等待[空间退出],[空间内]如需写、更新会引发mysql报错。
执行到这里时,退出封闭空间,释放所有表锁
unlock tables
当前线程关闭时,自动退出封闭空间,释放所有表锁,无论有没有执行 unlock tables
[PHP] 纯文本查看 复制代码 function lock(){
DB::query("LOCK TABLE ".DB::table(self::t_name())." WRITE");
}
function unlock(){
DB::query("UNLOCK TABLES");
}
|