随笔分类 - MySQL Auto Increment
摘要:问题描述 由于MySQL PXC集群的所有节点均可读写,因此当PXC集群中节点增加和减少时,PXC集群会自动调整集群各节点的自增ID步长,避免不同集群节点生成相同自增ID值产生冲突。 当PXC集群中读节点数量发生变化时,客户端执行BatchInsert方法可能返回错误的自增ID值。 问题原因 由于M
阅读全文
摘要:死锁场景 MySQL版本: 5.6.28-76.1-log Percona Server (GPL) 自增原子锁参数: innodb_autoinc_lock_mode = 1 使用pt-osc修改表,运行中频繁死锁导致pt-osc异常退出。 死锁信息 *** TRANSACTION: TRANSA
阅读全文
摘要:测试环境描述 MySQL版本: 5.7.26-29-log Percona Server (GPL) MySQL架构: 主从复制 MySQL参数: + + + | Variable_name | Value | + + + | auto_increment_increment | 1 | | aut
阅读全文
摘要:自增锁模式 在MYSQL 5.1.22版本前,自增列使用AUTO_INC Locking方式来实现,即采用一种特殊的表锁机制来保证并发插入下自增操作依然是串行操作,为提高插入效率,该锁会在插入语句完成后立即释放,而不是插入语句所在事务提交时释放。该设计并发性能太差,尤其在大批量数据在一条语句中插入时
阅读全文
摘要:对于批量插入数据的操作,MySQL申请自增的策略为: 测试Demo: 其他跳号原因: 1、语句显式插入比当前自增列更大的值 2、语句执行获取到自增值后所在事务被回滚
阅读全文
摘要:测试环境:MySQL版本:MySQL 5.7.19复制模式:ROW 执行下面语句: 执行报错: ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY' 原因分析:1、第一次INSERT语句,获得自增值为1。2、UPDATE操作完成,将表中数
阅读全文
摘要:修改普通表为自增表 将普通表修改为自增表,可分为两种类型: 1、将现有列修改为自增列,当数据类型为数值类型且表中数据唯一时,直接只用ALTER TABLE ALTER COLUMN命令进行修改,修改操作会保留现有列中数据。 2、对普通表新增自增列,如果直接使用ALTER TABLE ADD COLU
阅读全文
摘要:自增列持久化问题 5.5/5.6/5.7三个版本中,MySQL并不会将自增列分配的自增值信息固化到磁盘,当MySQL重启后,会根据自增列上当前最大值和参数auto_increment_offset来确定下一次的自增值,为快速获取自增列上最大值,MySQL要求自增列必须建有索引。 如果一张自增表的数据
阅读全文
摘要:在数据库表设计中会纠结于”自然键”和”代理键”的选择,自然键在实现数据“软删除”时实现比较复杂,部分自然键因为键值过长或多列组合导致不适合作为表主键,而比较常见两种代理键为自增列(auto incremnet)和全局唯一标识列(GUID)。 使用自增列作为主键的优缺点: 使用GUID列的优缺点: 在
阅读全文
摘要:测试环境:MySQL版本:MySQL 5.7.19复制模式:ROW 执行下面操作: ##测试脚本: CREATE TABLE T_AUTO_TEST ( ID INT AUTO_INCREMENT PRIMARY KEY, C1 INT NOT NULL, UNIQUE KEY UNI_C1(C1)
阅读全文