[英]Mysql Auto Increment For Group Entries
我需要设置一个具有两个自动增量字段的表。 每个添加的记录的标准主键为1个字段。 另一个字段将用于将多个记录链接在一起。
这是一个例子。
field 1 | field 2
1 1
2 1
3 1
4 2
5 2
6 3
请注意,字段1中的每个值都有自动增量。 字段2的自动增量略有不同。 记录1,2和3同时进行。 记录4和5同时进行。 记录6是单独制作的。
最好阅读字段2的最后一个条目,然后在我的php程序中将其递增1? 只是寻找最佳解决方案。
您应该有两个单独的表。
ItemsToBeInserted
id, batch_id, field, field, field
BatchesOfInserts
id, created_time, field, field field
然后,您将创建一个批次记录,并将该批次的插入ID添加到将成为该批次一部分的所有项目中。
如果将batch_hash
字段添加到批处理表中,然后检查每个批处理是否唯一,那么您将获得加分,这样就不会意外地将同一批提交两次。
如果您正在寻找一种仅使用一张表的更糟糕的方法,则可以执行以下操作:
$batch = //Code to run and get 'SELECT MAX(BATCH_ID) + 1 AS NEW_BATCH_ID FROM myTable'
并将该ID添加到所有插入的记录中。 我不建议这样做。 您会遇到麻烦。
MySQL每张表仅提供一个自动增量列。 您不能定义两个,这样做也没有意义。
您的问题不是说要使用什么逻辑来控制第二个字段的增量(称为自动增量)。 大概您的PHP程序将驱动该逻辑。
不要使用PHP查询最大的ID号,然后递增并使用它。 如果这样做,您的系统很容易受到竞争条件的影响。 也就是说,如果您的PHP程序的多个实例同时尝试该操作,它们有时会错误地得到相同的数字。
Oracle DBMS有一个称为sequence
的对象,该对象会返回保证唯一的数字。 但是您正在使用MySQL。 您可以使用如下所示的编程模式获取唯一编号。
首先为序列创建一个表。 它具有一个自动递增字段,仅此而已。
CREATE TABLE sequence (
sequence_id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`sequence_id`)
)
然后,当您在程序中需要唯一编号时,一个接一个地发出以下三个查询:
INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
SELECT LAST_INSERT_ID() AS sequence;
确保第三个查询返回唯一的序列号。 即使您有数十个不同的客户端程序连接到数据库,该保证仍然有效。 这就是AUTO_INCREMENT的优点。
第二个查询( DELETE
)防止表变大和浪费空间。 除了最近的那一行,我们不在乎表中的任何行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.