首页 >数据库 >mysql教程 > 正文

mysql数据库锁有哪些

原创2020-09-15 13:57:21014076

MySQL数据库中的锁有:1、共享锁,表示对数据进行读操作;2、排他锁,表示对数据进行写操作;3、行锁,对一行记录加锁,只影响一条记录;4、意向锁,为了在一个事务中揭示下一行将要被请求锁的类型。

mysql数据库锁

1、共享锁(Shared Lock,也叫S锁)

共享锁(S)表示对数据进行读操作。因此多个事务可以同时为一个对象加共享锁。

产生共享锁的sql语句:

select * from ad_plan lock in share mode;

2、排他锁(Exclusive Lock,也叫X锁)

排他锁表示对数据进行写操作。如果一个事务对对象加了排他锁,其他事务就不能再给它加任何锁了。
产生排他锁的sql语句:

 select * from ad_plan for update;

3、行锁(Row Lock)

对一行记录加锁,只影响一条记录。

通常用在DML语句中,如INSERT, UPDATE, DELETE等。

InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。

InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!

4、意向锁

意向锁是表级锁,其设计目的主要是为了在一个事务中揭示下一行将要被请求锁的类型。InnoDB 中的两个表锁:
意向共享锁(IS):表示事务准备给数据行加入共享锁,也就是说一个数据行加共享锁前必须先取得该表的IS锁;
意向排他锁(IX):类似上面,表示事务准备给数据行加入排他锁,说明事务在一个数据行加排他锁前必须先取得该表的IX锁。
意向锁是 InnoDB 自动加的,不需要用户干预。
对于INSERT、UPDATE和DELETE,InnoDB 会自动给涉及的数据加排他锁;对于一般的SELECT语句,InnoDB 不会加任何锁,事务可以通过以下语句显式加共享锁或排他锁。
共享锁:SELECT … LOCK IN SHARE MODE;
排他锁:SELECT … FOR UPDATE;

锁的级别

根据锁的级别或密度来划分,MySQL有三种锁的级别:页级、表级、行级。

(1)表级锁

开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

(2)行级锁

开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

(3)页面锁

开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

以上就是mysql数据库锁有哪些的详细内容,更多请关注php中文网其它相关文章!

php中文网最新课程二维码

声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理

相关文章

相关视频


网友评论

文明上网理性发言,请遵守 新闻评论服务协议

我要评论
  • 专题推荐

    推荐视频教程
  • MySql参考手册MySql参考手册
  • MySQL权威开发指南(教程)MySQL权威开发指南(教程)
  • MySQL高级进阶视频教程MySQL高级进阶视频教程
  • 视频教程分类