使用ID INSERT查询

时间:2011-08-13 21:41:16

标签: php mysql

  

可能重复:
  Access Auto-Increment Value During INSERT INTO Statement

我想在一个表上运行INSERT查询,例如2个字段:id,name。

但是我想在名称字段中使用id,例如将id添加到名称中。现在我可以INSERT,然后使用PHP来获取最后一个id,然后根据它更新名称。但是我想避免使用多于1个查询。我可以使用自动增量值,但这不安全,因为可以在获取ID和运行INSERT之间运行另一个查询。那么在字段中使用id有安全的方法吗?

2 个答案:

答案 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>));

但是,你应该避免重复这样的数据,并在选择时简单地连接它。