mysql行锁sql语句怎么写_mysql的锁

在MySQL中,不同的存储引擎采用的不同的锁机制,如MyISAM和MEMORY存储引擎采用表级锁,InnoDB存储引擎既支持行级锁,也支持表级锁。

MySQL中使用表锁的语句如下:

lock table table_name read;共享读锁,会阻塞写

lock table table_name write;独占写锁,会阻塞读

unlock  tables;释放锁

在MyISAM中执行select和update,insert,delete操作时,系统会自动给表加上相应的锁

lock table时,需要一次锁定sql中用到的所有表,而且如果sql使用了表别名,则需要对别名也都加锁,如:

select a.first_name,b.last_name from user a,user b where a.id=b.id;需要如下的锁定方式:

lock table user as a read,user as b read;

InnoDB的表锁也是同样,下面说说InnoDB的行级锁。

InnoDB实现了两种类型的行锁:

共享锁:允许一个事务去读一行,阻止其他事务获得相同数据行的排他锁

排他锁:允许获得该锁的事务更新数据,阻止其他事务获得相同数据行的排他锁和共享锁

以下是mysql中加以上两种锁的sql语句:

select .....in share mode;共享锁

select .....for update;排他锁

另外说说InnoDB的行锁实现方式,InnoDB是通过给索引上的索引项加锁来实现,这一点和Oracle是不同的,所以只有使用索引的操作InnoDB才会使用行级锁,否则InnoDB就使用表锁。而且如果两个sql同时如果刚好用到的是同样的索引键,也会发生阻塞,另外因为一个表中可能有多个索引,如果一个操作通过某个索引锁定了数据集,另外一个操作要通过另外的索引来锁定同样的数据集,那么也会发生阻塞。

因此,在操作前,最好通过explain查看一下sql的执行计划,看操作是否使用的索引。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值