MySQL的读锁和解锁

来源:互联网 发布:php最好的语言 编辑:程序博客网 时间:2024/06/05 10:25

读锁和解锁其实只是一句SQL语句,语法

LOCK/UNLOCK   TABLES    tbl_name [[AS] alias] lock_type    [, tbl_name [[AS] alias] lock_type]等等lock_type:    锁类型    READ [LOCAL]  | [LOW_PRIORITY] WRITE

lock tables table_name read,那么表示该table_name的表只能被读而不能被写,而此时插入数据时,会出现:

Table 'user' was locked with a READ lock and can't be updated

想要写的时候,可执行unlock tables,然后就可以插入数据了!

注意:user表必须为Myisam表,以上测试才能全部OK,如果user表为innodb表,则lock tables user read
local命令可能没有效果,也就是说,如果user表为innodb表,第6时刻将不会被阻塞,这是因为INNODB表是事务型的,对于事务表,例如InnoDB和BDB,–single-transaction是一个更好的选项,因为它不根本需要锁定表。

如果一个线程在一个表上得到一个 WRITE 锁,那么只有拥有这个锁的线程可以从表中读取和写表。其它的线程被阻塞。
写锁定的命令:lock tables user write.user表为Myisam类型的表。

多表控制

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

lock tables [table1] read,[table2] write,[table3] read;

把表的读写锁交给线程,让线程来管理:

$db->lock( 'user', 2 );   //2代表写,1代表读    SQL语句的操作    $db->unlock();   //开锁

此致,谢谢点赞!

0 0
原创粉丝点击