如何添加第二个MYSQL增量

时间:2018-06-08 17:32:17

标签: mysql mysqli auto-increment

我有一张桌子:

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 / phpmyadmin可以这样做吗?或者这应该在PHP中完成? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

这意味着您的事务需要锁定表以防止并发插入。

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

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

答案 1 :(得分:0)

所以这是一种方法:

MYSQL表是MyISAM格式。要执行此操作(在phpmyadmin中),请转到表格,然后转到'操作'标签。在'运营'更改存储'存储引擎'到MyISAM。有关详细信息:http://richardcummings.info/convert-myisam-to-innodb-using-phpmyadmin/

现在让它增加:

转到表格'列'页面,并同时制作' Unique_ID'和' Increment_ID'主键。然后设置' Increment_ID'到' auto_increment'。更多信息:https://dev.mysql.com/doc/refman/8.0/en/example-auto-increment.html

不确定这是否是 BEST 方式,但肯定是 A 方式。