我有一张桌子:
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中完成? 提前谢谢。
答案 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 方式。