如何插入带有列的记录值自动增量pk值?

时间:2010-12-13 03:47:45

标签: php mysql

我的表格如下所示,我使用它来保存上传图片名称。客户希望图像为{id}.{jpg|gif}

create table imgae(
id int autoincrement,
image text
)

如何只使用一个sql插入新记录。

4 个答案:

答案 0 :(得分:0)

您无法在MySQL中使用单个SQL语句执行此操作。如果MySQL支持Oracle样式的序列,您可以在单个语句中执行此操作。但是因为在之后插入已经发生时,auto_increment不会给你下一个id,所以你需要在访问id之前插入行。你在MySQL中最接近的是:

insert into imgae (image) values (null);
update imgae set image=concat(last_insert_id(), '.jpg') where id=last_insert_id();

顺便说一句:我看到你的表名为imgae,这可能是一个错字。你的意思是称它为image吗?此外,当我尝试运行您的create table语句时,它失败了。我不得不做一些改变才能让它工作,所以我可以验证我的答案。它应该是这样的:

create table imgae(id int auto_increment primary key, image text);

答案 1 :(得分:0)

INSERT INTO“imgae”VALUES(“image”)(CONCAT(LAST(“id”)+ 1,/ *用于获取扩展名的脚本代码/))

答案 2 :(得分:0)

INSERT INTO imgae (image) VALUES (CONCAT(LAST_INSERT_ID() + 1, ".jpg"));

但是,实际上并没有命名图像文件。在运行mysql_inser_id()以获取该值之后,您必须确保执行此操作。

答案 3 :(得分:0)

当ID已经在另一列中时,将ID存储在列中似乎是多余的。为什么不保持id相同,只是担心存储文件扩展名? (假设{id}.{jpg|gif}就是列中的所有内容,并且被严重错误地表示为text类型。然后查询它们并连接id和扩展列以获得结果。

......或者我错过了什么