0

我有一个有 3 行的查找表:

id | name
=== =======
 1   Pendig
 2   Sent
 3   Failed

当我将此数据插入另一个服务器/数据库上的另一个表时,如何确保使用相同的自动递增 ID 创建相同的值(名称)?

由于它是一个查找表,我可以插入表中并指定 id 吗?

4

2 回答 2

1

由于您有查找表,因此它应该与id实际情况无关。也就是说,你永远不应该看id它本身,而只将它用于连接等。如果你想查找这个透明id的,你应该使用name.

要回答您的具体问题,是的,您可以在插入期间指定自动增量 ID:

INSERT INTO t1 (id, name) VALUES (1, 'Pendig')
于 2013-10-15T20:58:53.490 回答
1

您始终可以通过指定它来覆盖 auto_increment 表中的插入 ID:

INSERT INTO yourtable (id, name) VALUES (2, 'Sent');

并将2作为 ID 值填充到表中。在执行任何其他插入并且表的内置 auto_increment 值恰好达到您自己插入的值之前,这完美地工作,例如,假设一个全新的新创建的表:

INSERT INTO yourtable (id, name) VALUES (2, 'Sent'); // force an ID
INSERT INTO yourtable (id, name) VALUES (NULL, 'foo'); // DB assigns 1
INSERT INTO yourtable (name) VALUES ('foo'); // DB assigns 2

第一个查询成功,第二个查询成功,第三个查询因主键冲突而失败,因为 DB 生成的 '2' id 现在与您手动插入的那个冲突。

如果你想保证不同数据库实例之间的ID和auto_increment兼容,那就用mysql_dump吐表给你吧。它将确保保留表中的所有 ID,并确保内部 auto_increment 指针也正确发送。

于 2013-10-15T20:59:24.527 回答