我正在尝试类似的事情:
INSERT INTO dir_pictures SET filename=CONCAT(picture_id,'-test');
picture_id 是我的主键,自动递增。基本上我试图把这个插入语句的 id 放在语句本身中。
我确信它可以通过一些额外的 PHP 代码或使用多个语句来完成,但我想知道是否有一种快速简便的方法可以一次性完成。
PS。上面的语句总是把'0-test'
先插入一条记录。然后用分号分隔您的语句并使用LAST_INSERT_ID()来获取新插入的自动增量 ID。一口气执行。
插入 dir_pictures .... ; 更新 dir_pictures set filename=CONCAT(LAST_INSERT_ID(),'-test') where id = LAST_INSERT_ID()
只需从 information_schema 中选择表的当前 auto_increment 值作为插入的一部分:
INSERT INTO dir_pictures SET filename=CONCAT((SELECT auto_increment FROM
information_schema.tables WHERE table_name='dir_pictures'), '-test')
如果您真的想在一条 SQL 语句中执行此操作,可以尝试以下 hack:
INSERT INTO dir_pictures SET filename=CONCAT((select max(picture_id)+1 from dir_pictures),'-test');
如果这是一个多线程应用程序,请注意竞争条件......
另外,我怀疑它会在一张空桌子上工作......
好吧,在插入完成之前你不会知道行 ID ......所以,我认为这永远不会起作用!
为什么不在检索行时只计算文件名呢?
INSERT INTO dir_pictures (file_extension) VALUES ('-data')
SELECT picture_id, CONCAT(picture_id, file_extension) as filename
FROM dir_pictures
这实际上是不可能的,在出路而不是进路时简单地连接它可能符合您的最大利益。
SELECT CONCAT(id, '-text') 作为文件名 FROM dir_pictures