MySQL(四)锁

目录

一、锁的概念:

二、MyISAM 锁:

2.1 共享读锁

2.2 独占写锁

2.3 解锁——MyISAM

三、InnoDB 锁:

3.1 共享锁

3.2 排他锁

3.3 解锁——InnoDB

四、mysql 中 myisam 与 innodb 的区别?

查看哪些语句被阻塞了:


一、锁的概念:

  • 锁是计算机协调多个进程或线程并发访问某一资源的机制。 
  • 在数据库中,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、 有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个 重要因素。
  • 锁对数据库而言显得尤其重要,也更加复杂。

二、MyISAM 锁:


 读锁,对 MyISAM 表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一 表的写请求
 读锁,对 MyISAM 表的读操作,不会阻塞当前 session 对表读,当对表进行修改会报错
 读锁,一个 session 使用 LOCKTABLE 命令给表 f 加了读锁,这个 session 可以查询锁定表 中的记录,但更新或访问其他表都会提示错误;
 写锁,对 MyISAM 表的写操作,则会阻塞其他用户对同一表的读和写操作;
 写锁,对 MyISAM 表的写操作,当前 session 可以对本表做 CRUD,但对其他表进行操作 会报错。

2.1 共享读锁

语法:lock table 表名 read

2.2 独占写锁

语法:lock table 表名 write

2.3 解锁——MyISAM

语法:unlock tables 或者 begin


三、InnoDB 锁:


       在 mysql 的 InnoDB 引擎支持行锁。
       共享锁又称:读锁。当一个事务对某几行上读锁时,允许其他事务对这几行进行读操作,但 不允许其进行写操作,也不允许其他事务给这几行上排它锁,但允许上读锁。
       排它锁又称:写锁。当一个事务对某几个上写锁时,不允许其他事务写,但允许读。更不允 许其他事务给这几行上任何锁。包括写锁。

3.1 共享锁

语法:lock in shate mode

例:select * from 表名 where 条件 lock in share mode;

3.2 排他锁

语法:for update

例:select * from 表名 where 条件 for update

注意:
    1.两个事务不能锁同一个索引。
    2.insert ,delete , update 在事务中都会自动默认加上排它锁。
    3.行锁必须有索引才能实现,否则会自动锁全表,那么就不是行锁了

3.3 解锁——InnoDB

语法:begincommit 或者 rollback

四、mysql 中 myisam 与 innodb 的区别?

4.1 MyISAM:强调的是性能,每次查询具有原子性,其执行数 度比 InnoDB 类型更快,但是不提供事务支持

     InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚 (rollback)和崩溃修复能力(crash recovery capabilities)的事务安全 (transaction-safe (ACID compliant))型表;

4.2 MyISAM 支持表级锁, InnoDB 支持行级锁

4.3 InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败.

查看哪些语句被阻塞了:


1、select * from sys.innodb_lock_waits     注意:只有MySql 5.7版本才有
2、通用写法:

SELECT
    r.trx_id waiting_trx_id,
    r.trx_mysql_thread_id waiting_thread,
    r.trx_query waiting_query,
    b.trx_id blocking_trx_id,
    b.trx_mysql_thread_id blocking_thread
FROM
    information_schema.innodb_lock_waits w
INNER JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_id
INNER JOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id


3、查看MySQL当前默认的存储引擎

-- 查看MySQL当前默认的存储引擎
show variables like'%storage_engine%';

4、 查看某张表的存储引擎

-- 查看某张表的存储引擎
show create table 表名 ;

5、查看MySql的隔离级别:mysql 默认的事务隔离级别为 repeatable-read(可重复读)

-- 查看MySql的隔离级别:mysql 默认的事务隔离级别为 repeatable-read(可重复读)
show variables like'%tx_isolation%';

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值