MySQL 插入列值与自动增量相同的行

Bxx*_*Bxx 5 php mysql

id 列是自动递增的。我希望“rank”列与“id”列中新生成的自动增量值具有相同的值。(例如,说下一个自动增量值为 999 ......我希望排名也等于这个)

我可以在一个查询中做到这一点吗?或者我是否必须运行一个额外的查询来获取自动增量值之前

$query = "INSERT INTO $table1(id,name,rank)
VALUES('','bob','999')";
Run Code Online (Sandbox Code Playgroud)

Ond*_*tek 5

您可以使用以下查询在一次插入中获取实际的 auto_increment 值:

insert into tablename (name,rank) values ( 'bob',(SELECT AUTO_INCREMENT
FROM information_schema.tables
WHERE table_name = 'tablename'
AND table_schema = DATABASE( ) ) )
Run Code Online (Sandbox Code Playgroud)

在此处查看更多信息 -如何在 mysql 中获取下一个自动递增 id

  • 这保证是原子的吗? (6认同)

Mar*_*c B 4

last_insert_id()仅在插入完成(成功与否)后设置。如果你尝试类似的事情

INSERT INTO yourtable (id, dupe_id) VALUES (null, last_insert_id())
Run Code Online (Sandbox Code Playgroud)

并希望dupe_id获得与分配给 相同的 ID id,然后...不,不会。last_insert_id()将返回在此特定语句之前运行的任何插入创建的 ID。

你必须做(基本上):

INSERT ...;
UPDATE yourtable SET dupe_id=last_insert_id() WHERE id=last_insert_id();
Run Code Online (Sandbox Code Playgroud)