网站首页> 数据库> Mysql> Mysql事务与行级锁介绍

Mysql事务与行级锁介绍

时间:2022-09-12 09:06:10 阅读:1421次 来源:互联网

一、事务

哪些引擎支持事务?

MySQL支持事务的存储引擎有InnoDB,MyISAM是支持事务的

事务的四个特点:

原子性:对于数据的操作要么一起执行,要么一起失败

隔离性:在操作的数据这个事务没有执行完成,其他程序无法操作这个数据

一致性:根据MySQL的规则,保证数据执行数量是一致。

持久性:保存在磁盘中

事务开启:BEGIN 或者 START TRANSACTION

事务提交:COMMIT

事务回滚:ROLLBACK

创建数据表:

CREATE TABLE `demo` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) DEFAULT NULL,
 `tel` varchar(12) DEFAULT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `tel` (`tel`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4;

测试事务数据:

BEGIN  或者 START TRANSACTION
INSERT INTO `demo` (name,tel)VALUES('码农网','138888888882') 
INSERT INTO `demo` (name,tel)VALUES('码农网','138888888881') 
 
COMMIT
 
ROLLBACK

MySQL查询异常数据,我们可以通过事务执行ROLLBACK进行回滚。

二、行级锁:能锁住具体的某一行数据

2.1、锁机制:

表锁: myisam,早期BDB锁住整个表锁的实现,开销小,加锁的速度快一些

页锁: BDB锁住一页的数据,大概是16kb左右大小的数据折中

行锁: innodb锁住某一行的数据,开销小,加锁的速度快一些

2.1.1、排它锁:不能允许读,也不能写 ,不能与其他锁一起使用

eg:我们新建两个查询窗口,并分别加上排它锁

第一个程序

START TRANSACTION
SELECT * from `demo` WHERE id =1 for update
COMMIT
ROLLBACK

第二个程序

START TRANSACTION
SELECT * from `demo` WHERE id =1 for update
COMMIT
ROLLBACK

执行之后可以发现,第二个程序需要等待第一个程序提交之后才执行

Mysql事务与行级锁介绍

2.1.2、共享锁:可以允许读,但是不能写,可以与共享锁一起使用

eg:我们新建两个查询窗口,并分别加一把共享锁

第一个程序

START TRANSACTION
SELECT * from `demo` WHERE id =1 LOCK IN SHARE MODE

第二个程序

START TRANSACTION
SELECT * from `demo` WHERE id =1 LOCK IN SHARE MODE

Mysql事务与行级锁介绍

说明:在MySQL当中update, delete, insert, alert这些写的操作,默认加上一把排它锁。

一条数据 如果加了排它锁,就不能加其他排它锁,也不能加共享锁而共享锁,可以继续加共享锁;并且可以读取数据。

本文地址:https://www.manongw.com/article/398.html

文章来源:码农网

版权申明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 ezhongheng@126.com 举报,一经查实,本站将立刻删除。

相关文章
  • 本文主要介绍了MySQL外键约束的实例讲解的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-11-12 12:03
  • 本文主要介绍了MySQL数据库备份过程的注意事项的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-11-07 17:00
  • 本文主要介绍了mysql实现从导出数据的sql文件中只导入指定的一个表的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-11-10 17:05
  • 本文主要介绍了MySQL查看与修改字符集的方法实例教程的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-10-18 17:01
  • 本文主要介绍了MySQL 基于时间点的快速恢复方案的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-11-12 11:50
  • 本文主要介绍了MySQL Select语句是如何执行的的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-11-07 17:06
  • 本文主要介绍了mysql CPU高负载问题排查的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-11-08 08:20
  • 本文主要介绍了mySQL之关键字的执行优先级讲解的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-11-10 16:14
  • 本文主要介绍了详解mysql中的严格模式和非严格模式的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-10-20 17:46
  • 本文主要介绍了mybatis-plus分页传入参数后sql where条件没有limit分页信息操作的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-11-30 10:40