博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySql unique的实现原理简析
阅读量:5128 次
发布时间:2019-06-13

本文共 1238 字,大约阅读时间需要 4 分钟。

1、测试过程如下:

CREATE TABLE `test` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(100) DEFAULT NULL,  PRIMARY KEY (`id`),  UNIQUE KEY `name` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

事务1:                                                       事务2: mysql> select * from test;                                            +----+-------+| id | name  |+----+-------+|  1 | name1 |+----+-------+1 row in set (0.00 sec) mysql> start transaction;                                              start transaction;Query OK, 0 rows affected (0.00 sec)mysql> insert into test(name)  values('name2');(成功)                               
                                                             insert into test(name)  values('name3'); (成功,和事务1之间没有阻塞)
 
     insert into test(name)  values('name3');(失败,因为和事务未commit的数据冲突了)
    ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
commit;                                commit;                                                    

 2、分析:对于unique的insert,如果不同事务之间存在非unqiue冲突,则事务会等待冲突的事务提交,也就是等待锁。如果不存在冲突则能正在执行更新。

          mysql的某一列为unique属性时,会为该列建索引,所以该列不能太大。

                 因为大事务的执行时间较长,那么别的事务如果冲突了等待锁的事务也较长,那么事务会因为锁超时而造成整个数据库的吞吐量的降低。对于小事务可以建unique。

转载于:https://www.cnblogs.com/YDDMAX/p/6218045.html

你可能感兴趣的文章
Linux环境下Redis安装和常见问题的解决
查看>>
Android开发中常见问题分析及解决
查看>>
玩转小程序之文件读写
查看>>
Android开发中UI相关的问题总结
查看>>
MySql Host is blocked because of many connection errors 问题的解决方法
查看>>
FastDFS高可用集群架构配置搭建及使用
查看>>
.tar.gz文件和.tar.xz文件的解压和压缩
查看>>
HashPump用法
查看>>
RabbitMQ的安装
查看>>
Halcon匹配方法
查看>>
Linux安装libcholmod-dev找不到的解决方法
查看>>
cuda基础
查看>>
吉林大学考研复试题目(牛客网)
查看>>
最长公共子序列与最长公共字串
查看>>
动态规划之工作方案
查看>>
React的三大属性
查看>>
redux
查看>>
virutalenv一次行安装多个requirements里的文件
查看>>
如何让字典保持有序---Python数据结构与算法相关问题与解决技巧
查看>>
django-xadmin设置全局变量
查看>>