`
d2hellen
  • 浏览: 105686 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

MySQL INNODB锁机制简单试验

阅读更多
使用mysql连接mysql数据库,建两个会话(连接)。每个会话中都分别

set autocommit=0;

关闭自动提交。使用INNODB表做一下试验。



会话一:

mysql> desc test;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| a | int(11) | NO | PRI | | |
| b | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test values(1,'abcde');
Query OK, 1 row affected (0.00 sec)

会话二:

mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from test;
Empty set (0.00 sec)

mysql> delete from test where a=1;
这里被锁住了(会话一中commit;或者rollback;,会话二才会有响应)

过了一会儿,报错:

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

上述情况下,ORACLE中不会被锁住。



下面是更加需要注意的:

会话一:

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from test;
+---+-------+
| a | b |
+---+-------+
| 1 | abcde |
+---+-------+
1 row in set (0.00 sec)
mysql> insert into test values(1,'abcde');
ERROR 1062 (23000): Duplicate entry '1' for key 1

会话二:

mysql> delete from test where a=1;
还是被锁住,过一会儿,则

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

我在两个会话中执行了SET TRANSACTION ISOLATION LEVEL READ COMMITTED ;

结果仍然相同。



再做新的试验:

会话一:

mysql> create table testfk(a int, constraint fk_testfk foreign key(a) references test(a)) engine=innodb;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into testfk values(1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+---+-------+
| a | b |
+---+-------+
| 1 | abcde |
+---+-------+
1 row in set (0.00 sec)

mysql> select * from testfk;
+------+
| a |
+------+
| 1 |
+------+
1 row in set (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> update test set a=2 where a=1;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`test/testfk`, CONSTRAINT `fk_testfk` FOREIGN KEY (`a`) REFERENCES `test` (`a`))

会话二:

mysql> update test set a=1 where a=1;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

因此,在mysql innodb中使用事务,如果插入或者更新出错,一定要主动显式地执行rollback,否则可能产生不必要的锁而锁住其他的操作。
分享到:
评论

相关推荐

    mysql事务与锁机制(存储引擎和锁、MyISAM锁机制、InnoDB锁机制、Next-Key锁、Dead-Lock).docx

    ### MySQL事务与锁机制详解 #### 一、锁概念简介 **1、基础描述** 锁机制主要用于解决数据库中多线程或多个会话同时访问同一数据资源时出现的竞争问题。在MySQL中,锁机制是非常重要的组成部分之一,它与其他核心...

    MySQL8.0锁机制和事务

    MySQL 8.0 锁机制和事务 MySQL 8.0 中的锁机制和事务是数据库系统中非常重要的概念。锁机制是指数据库系统中对数据访问的控制机制,而事务是指数据库系统中的一组操作单元。了解锁机制和事务是非常关键的,因为它们...

    InnoDB锁机制学习笔记

    MySQL的引擎简介,InnoDB的锁机制与事务隔离级别

    MySQL Innodb 索引原理详解

    ### MySQL Innodb 索引原理详解 #### 1. 各种树形结构 在深入探讨MySQL Innodb索引之前,我们先了解几种基本的树形数据结构,包括二叉搜索树、B树、B+树以及B*树。 ##### 1.1 搜索二叉树(Binary Search Tree) ...

    MySQL高级 锁机制

    MySQL的锁机制是数据库管理系统中用于控制并发操作的重要机制,对于多用户环境下的数据一致性、事务隔离性和系统性能有着至关重要的影响。本文将深入探讨MySQL的高级锁机制,包括表锁和行锁,并提供一些优化建议。 ...

    mysql innodb恢复数据工具.rar

    这是我从网上找到的mysql/mariadb对innodb表进行数据恢复的工具,实现从innodb的数据库文件中恢复数据,用于实现下面情况:1、直接下载了innodb数据库的文件,而不是导出其数据,想恢复数据时(需要有完整的文件,...

    Mysql 高可用 InnoDB Cluster 多节点搭建过程

    Mysql 高可用 InnoDB Cluster 多节点搭建过程 Mysql 高可用 InnoDB Cluster 多节点搭建过程是指使用 Mysql 的 InnoDB Cluster 功能来搭建一个高可用性的集群环境。在这个过程中,我们将使用四台服务器,node01、...

    mysql innodb类型数据库表 根据ibd文件获取表 space id

    mysql innodb类型数据库表 根据ibd文件获取表 space id,用于恢复innodb类型数据表数据

    MySQL InnoDB Cluster安装.docx

    MySQL InnoDB Cluster是一种高可用性解决方案,用于在MySQL 8中构建分布式数据库系统。它基于InnoDB存储引擎,提供了一种自动化的故障切换和数据复制功能,确保即使在单个节点故障时,整个集群也能保持运行。以下是...

    mysql insert锁机制1

    在MySQL的InnoDB存储引擎中,插入操作不仅涉及到行级锁,还可能涉及Gap锁和Next-Key Locks,这些锁机制的设计是为了防止幻读(Phantom Read)和其他并发问题。 1. 数据库版本:文中提到的是MySQL 5.6.27。不同版本...

    MySQL:锁机制.pdf

    在MySQL中,锁机制是保障数据操作安全的重要组成部分,其主要分为表锁、行锁和间隙锁。本知识点详细解读了MySQL锁机制的定义、分类、特点以及具体的应用案例。 1. 锁的定义和分类 在数据库系统中,锁是用来控制多...

    MySQL体系结构及原理(innodb)图文完美解析

    InnoDB提供了多种高级功能,如外键约束、事务管理以及崩溃恢复机制等。 3. **MySQL与InnoDB的关系** MySQL可以使用多种不同的存储引擎,而InnoDB是其中最流行的一个。从MySQL 5.1版本开始,InnoDB被集成作为插件...

    MySQL的锁机制解析

    MySQL的锁机制是数据库管理系统中用于控制并发操作的重要机制,对于保证数据的一致性和完整性起着至关重要的作用。本文将深入解析MySQL中的锁机制,帮助读者理解其工作原理,为面试准备或日常数据库管理提供有力支持...

    mysql索引和锁机制简介

    关于mysql中的innodb存储引擎的索引机制简介,详细介绍了锁机制

Global site tag (gtag.js) - Google Analytics