MySQL:使用插入语句本身插入的行的id

时间:2009-10-28 23:22:56

标签: php sql mysql insert-id

我正在尝试这样的事情:

INSERT INTO dir_pictures SET filename=CONCAT(picture_id,'-test');

picture_id是我的主键,自动增量。基本上我试图将这个insert语句的id放在语句本身中。

我确信可以使用一些额外的PHP代码或使用多个语句来完成,但我想知道是否有一种快速简便的方法可以一次性完成。

PS。上面的陈述总是把'0-test'

5 个答案:

答案 0 :(得分:10)

先插入记录。然后用分号分隔你的语句并使用LAST_INSERT_ID()来获取新插入的自动增量id。一次执行。

insert into dir_pictures .... ; 
update dir_pictures set filename=CONCAT(LAST_INSERT_ID(),'-test') where id = LAST_INSERT_ID()

答案 1 :(得分:3)

只需从table_schema中选择表的当前auto_increment值作为插入的一部分:

INSERT INTO dir_pictures SET filename=CONCAT((SELECT auto_increment FROM
information_schema.tables WHERE table_name='dir_pictures'), '-test')

答案 2 :(得分:0)

嗯,在插入完成之前你不会知道行ID ...所以,我认为这不会起作用!

为什么不在检索行时计算文件名呢?

INSERT INTO dir_pictures (file_extension) VALUES ('-data')

SELECT picture_id, CONCAT(picture_id, file_extension) as filename
FROM dir_pictures

答案 3 :(得分:0)

这实际上是不可能的,简单地在出路而不是进入方式中将其结合起来可能符合您的最佳利益。

  

SELECT CONCAT(id,' - text')as filename FROM dir_pictures

答案 4 :(得分:0)

如果您真的想在一个SQL语句中执行此操作,可以尝试一下hack:

INSERT INTO dir_pictures SET filename=CONCAT((select max(picture_id)+1 from dir_pictures),'-test');

如果这是一个多线程的应用程序,请注意竞争条件...

另外,我怀疑它在空桌上工作......