将inserted id用于另一个列值

时间:2015-11-28 18:27:36

标签: php mysql sql database

我有一个自动递增的标识列(id)。

id|name|image_path

我想知道是否有某种方法使用mysql,在image_path中使用新插入的id。 例如,如果插入新行并获得id 2,我希望image_path为“/images/2.png”。 或者我是否必须使用传统方式,通过插入然后获取此ID然后更新条目?

2 个答案:

答案 0 :(得分:1)

我的观点是,用一个查询是不可能的。在插入行之前,您不会知道新的自动增量值。你仍然可以编写1个查询来实现你想要的东西(实际上会执行2个查询):

    insert into `t`(`id`, `name`, `image_path`)
    values(
      (SELECT `auto_increment` FROM INFORMATION_SCHEMA.TABLES
       WHERE `table_name` = 't'),
      '1234',
      concat(
        '/images/',
        (SELECT `auto_increment` FROM INFORMATION_SCHEMA.TABLES
         WHERE `table_name` = 't'),
        '.png'
      )
    )

无论如何更安全的是:

START TRANSACTION;
set @c = (select ifnull(max(`id`),0) + 1 from `t`);
insert into `t`(`id`, `name`, `image_path`) values (@c,'123',concat('/images/',@c,'.png'));
COMMIT;

答案 1 :(得分:-1)

是的,有可能用oracle。我们有动态的sql功能。

试过以下。

创建一个序列,然后创建一个以id作为输入的过程,并动态创建一个insert语句,以满足您的要求。

create sequence seq1 start with 1;

create table image1(id1 number,image varchar2(50));

create or replace procedure image1_insert(id1 in number)
as
sql_stmt varchar2(50);
image_path varchar2(50);
begin
sql_stmt:='insert into image1 values(:1,:2)';
image_path:='/image/'||id1||'.png';
execute immediate sql_stmt using id1,image_path;
end;

begin
image1_insert(seq1.nextval);
end;


id  image
4   /image/4.png
5   /image/5.png

select *from image1;
相关问题