我的表格如下所示,我使用它来保存上传图片名称。客户希望图像为{id}.{jpg|gif}
。
create table imgae(
id int autoincrement,
image text
)
如何只使用一个sql插入新记录。
答案 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和扩展列以获得结果。
......或者我错过了什么