首页 > 代码库 > MySql unique的实现原理简析
MySql unique的实现原理简析
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。
MySql unique的实现原理简析
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。