MySql unique的实现原理简析
2024-10-06 07:13:09
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。
最新文章
- C#中如何调整图像大小
- 分布式系统理论基础 - 一致性、2PC和3PC
- response实现验证码图片
- Linux下动态库生成和使用
- 打死也不换系统?笑谈过气的Windows XP
- linux下多线程踩过的坑(不定更新)
- build.prop各种优化代码
- php获取当前文件绝对路径
- .net 企业管理系统快熟搭建框架
- Flask 扩展 Mail
- java iso8859 转utf8
- ISCSI
- redis目前最好用的客户端推荐
- PHP 合并有序数组
- Spark进阶之路-Standalone模式搭建
- [Big Data - Kafka] Kafka设计解析(四):Kafka Consumer解析
- react基础&;JSX基础
- 数据仓库基础(十二)Informatica组件(2)
- BASIC-2_蓝桥杯_01字串
- Windows 8家长控制
热门文章
- Note3 :《集体智慧编程》用户相似度计算
- Linux搭建JDK、Tomcat安装及配置
- 高性能PHP框架thinkphp5.0.0 Beta发布-为API开发而设计
- NewBluePill源码学习
- IOS处理点空白处不自动失去焦点的问题
- Python学习笔记(五)——list和tuple
- 【CentOS】磁盘管理与vim编译器
- C# 先说IEnumerable,我们每天用的foreach你真的懂它吗?
- 如何将U盘内文件拷入VMware Linux CentOS6.5虚拟机
- 【BZOJ3669】[Noi2014]魔法森林 LCT