mysql数据库锁有哪些


本文摘自PHP中文网,作者清浅,侵删。

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

mysql数据库锁

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

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

产生共享锁的sql语句:

1

select * from ad_plan lock in share mode;

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

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

1

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数据库锁有哪些的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

一起了解什么是mysql数据库(三)

sql在mysql数据库中是如何执行的

如何优化mysql数据库

mysql数据库如何改名

mysql数据库怎么用?

mysql数据库如何修改密码?mysql数据库修改密码方法

如何在linux下修改mysql数据库密码?linux修改数据库密码的方法

mysql数据库锁有哪些

一起了解什么是mysql数据库

更多相关阅读请进入《mysql数据库》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...