MySQL的读锁和解锁

MySQL读写锁详解
本文详细介绍了MySQL中读锁和写锁的使用方法,包括如何使用SQL语句进行加锁和解锁操作,以及如何实现多表同时加锁。此外,还讲解了不同锁类型的应用场景及其对数据操作的影响。

读锁和解锁其实只是一句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();   //开锁

此致,谢谢点赞!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值