读锁和解锁其实只是一句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(); //开锁
此致,谢谢点赞!