使用ID插入查询


INSERT query using ID

可能重复:
在INSERT INTO语句期间访问自动增值

我想对一个表运行一个INSERT查询,例如有两个字段:id、name。

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

没有办法在单个查询中做到这一点。但是,您可以安全地将UPDATE与LAST_INSERT_ID()一起使用,因为LAST_INSERT_ID()是安全的。它将始终返回当前会话中插入的最后一个ID(即使同时有其他会话进行插入(

点击此处阅读更多信息:http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_last-插入id

您可以使用类似这样的更新查询来确保获得正确的id

update myTable set name = concat(id, name) where <where condition>

如果您想在id和name之间添加一个空格,只需使用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>));

编辑:忽略这个max(id(的东西-正如评论中所指出的。

insert into myTable values(null, concat((select max(id)+1 
from myTable), <name data>));

但是,您应该避免重复这样的数据,只需在选择时插入即可。