mysql备忘录


 

mysql 4.x以前,varchar长度单位为字节;5.x以后,varchar长度单位为字符。


字段类型括号含义:

varchar(长度) timestamp(精度) int(显示长度(配合zerofill使用))


 

查询单用户最大连接数:

show variables like 'max_user_connections';

 

查询当前连接:

show processlist;

innodb 索引前缀长度:767个'字节' (https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html

utf8mb4字符集单个字符最大长度四字节, 767/4 = 191.75,所以现象如下:

CREATE TABLE `tt` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `str` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `str`(`str`(192))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 错误:Specified key was too long; max key length is 767 bytes

 

CREATE TABLE `tt` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `str` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `str`(`str`(191))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 成功

 


 

innodb区间锁死锁触发实例:

注:id 9 10为与同一个索引空白区间,双方都用select for update占锁,而insert操作又都要等待对方的锁释放。结构右侧会话检测到死锁而释放,左侧会话得以推进。

注:innodb_version = 5.7.28

 

posted @ 2019-11-16 11:48  rainforwind  阅读(59)  评论(0编辑  收藏  举报