zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    [GDKOI2010] 圈地计划(网络流)
    jzoj3454 表白(love)解题报告(01分数规划+DP)
    数论之卢卡斯定理
    POJ1180 Batch Scheduling 解题报告(斜率优化)
    BZOJ 球形空间产生器 解题报告(高斯消元)
    你是怎么封装一个view的
    沙盒目录结构是怎样的?各自用于那些场景?
    这个写法会出什么问题: @property (copy) NSMutableArray *array;
    怎么用 copy 关键字?
    @property后面可以有哪些修饰符?
  • 原文地址:https://www.cnblogs.com/YDDMAX/p/6218045.html
Copyright © 2011-2022 走看看