8

我正在尝试类似的事情:

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

picture_id 是我的主键,自动递增。基本上我试图把这个插入语句的 id 放在语句本身中。

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

PS。上面的语句总是把'0-test'

4

5 回答 5

10

先插入一条记录。然后用分号分隔您的语句并使用LAST_INSERT_ID()来获取新插入的自动增量 ID。一口气执行。

插入 dir_pictures .... ;
更新 dir_pictures set filename=CONCAT(LAST_INSERT_ID(),'-test') where id = LAST_INSERT_ID()
于 2009-10-28T23:30:00.237 回答
3

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

INSERT INTO dir_pictures SET filename=CONCAT((SELECT auto_increment FROM
information_schema.tables WHERE table_name='dir_pictures'), '-test')
于 2009-10-28T23:40:04.677 回答
0

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

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

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

另外,我怀疑它会在一张空桌子上工作......

于 2009-10-28T23:35:39.693 回答
0

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

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

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

SELECT picture_id, CONCAT(picture_id, file_extension) as filename
FROM dir_pictures
于 2009-10-28T23:32:43.943 回答
0

这实际上是不可能的,在出路而不是进路时简单地连接它可能符合您的最大利益。

SELECT CONCAT(id, '-text') 作为文件名 FROM dir_pictures

于 2009-10-28T23:33:08.327 回答