可能重复:
Access Auto-Increment Value During INSERT INTO Statement
我想在一个表上运行INSERT查询,例如2个字段:id,name。
但是我想在名称字段中使用id,例如将id添加到名称中。现在我可以INSERT,然后使用PHP来获取最后一个id,然后根据它更新名称。但是我想避免使用多于1个查询。我可以使用自动增量值,但这不安全,因为可以在获取ID和运行INSERT之间运行另一个查询。那么在字段中使用id有安全的方法吗?
答案 0 :(得分:2)
单个查询无法执行此操作。但是,您可以安全地使用LAST_INSERT_ID()
更新UPDATE,因为LAST_INSERT_ID()
是安全的。它将始终返回在当前会话中插入的最后一个ID(即使有其他会话同时执行插入)
在此处阅读更多内容:http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_last-insert-id
答案 1 :(得分:0)
您可以使用类似这样的更新查询来确保获得正确的ID
update myTable set name = concat(id, name) where <where condition>
如果您想在ID和名称之间添加空格,只需使用concat(id, ' ', name)
。
如果你真的想在一个查询中做到这一点,我认为它会是这样的:
insert into myTable values(null, concat((select auto_increment from
information_schema.tables where table_schema = myDatabaseSchema and
table_name = myTable), <name data>));
编辑:忽略这个最大(id)事情 - 正如评论中指出的那样。
insert into myTable values(null, concat((select max(id)+1
from myTable), <name data>));
但是,你应该避免重复这样的数据,并在选择时简单地连接它。