首页 > 解决方案 > 如何添加第二个 MySQL 增量

问题描述

我有一张桌子:

TABLE
--------------------------------------
Unique ID | Increment ID | value | 
--------------------------------------

如果看到唯一 ID 已经有值,您将如何确保“增量 ID”值自动增加。例如

Table
--------------------------------------
Unique_ID | Increment_ID | value | 
=====================================
random1   | 1            | value1
random1   | 2            | value2
random2   | 1            | value3
random2   | 3            | value5
--------------------------------------

如果我给它发送一行:

INSERT INTO TABLE (Unique_ID,value) VALUES (random2,value6);

我想得到的是:

--------------------------------------
Unique_ID | Increment_ID | value  | 
=====================================
random1   | 1            | value1
random1   | 2            | value2 
random2   | 1            | value3 
random2   | 3            | value5 
random2   | 2            | value6 
--------------------------------------

MySQL甚至可以做到这一点吗?还是应该在 PHP 中完成?

标签: mysqlauto-increment

解决方案


MySQL 仅对 MyISAM 表支持每组自动增量功能。

但这并不是使用 MyISAM 表的充分理由。

要实现每组自动增量,INSERT 需要独占访问组中的行集,以确保它可以计算该组的下一个增量 ID,而不会与其他并发会话插入到同一组。

这意味着您的事务需要针对并发插入锁定表。

无论如何,MyISAM 在写入期间使用表锁定,因此它可以支持这种特殊的自动增量行为。

但是像 InnoDB 这样的行级锁定存储引擎不支持它。它会阻碍并发插入,并且 MySQL 的许多功能旨在帮助并发工作。


推荐阅读