码迷,mamicode.com
首页 > 数据库 > 详细

MySql unique的实现原理简析

时间:2016-12-24 20:42:24      阅读:281      评论:0      收藏:0      [点我收藏+]

标签:rem   table   执行时间   实现原理   res   engine   阻塞   pre   com   

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的实现原理简析

标签:rem   table   执行时间   实现原理   res   engine   阻塞   pre   com   

原文地址:http://www.cnblogs.com/YDDMAX/p/6218045.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!