id列是自动递增的。我希望“rank”列的值与从“id”列新生成的自动递增值相同(例如,假设下一个自动递增值为999...我也想让rank等于这个值)。
我能否在一个查询中完成此操作?还是必须运行额外的查询以获取自动递增值?
$query = "INSERT INTO $table1(id,name,rank)
VALUES('','bob','999')";
您可以使用以下查询在一次插入中获取实际的auto_increment值:
insert into tablename (name,rank) values ( 'bob',(SELECT AUTO_INCREMENT
FROM information_schema.tables
WHERE table_name = 'tablename'
AND table_schema = DATABASE( ) ) )
在这里查看更多信息 - 如何在MySQL中获取下一个自动增量ID
SELECT AUTO_INCREMENT ...
应该比UPDATE tablename ...
更快。 - mikllast_insert_id()
仅在插入操作完成后(无论成功与否)才会被设置。如果您尝试执行以下操作:
INSERT INTO yourtable (id, dupe_id) VALUES (null, last_insert_id())
dupe_id
能够获得与 id
相同的 ID,然而……不行。在这个语句之前,last_insert_id()
将返回由任何先前运行的 insert 创建的 ID。INSERT ...;
UPDATE yourtable SET dupe_id=last_insert_id() WHERE id=last_insert_id();
rank
的值会在插入时与id
相同。不过这是一个好的点 :) - Bxx