所以我有这个代码,我想弄清楚,我不确定如何将我的输入从一个表复制到另一个表。
说我有这个输入
Insert into TABLE Value ('blah');
我希望得到我刚刚插入的值并将其插入另一个表
Insert into ANOTHERTABLE value ('blah');
但是在这种情况下,我不知道什么是blah,我只是想从第一个声明中复制它。我怎么能这样做?
答案 0 :(得分:3)
delimiter //
create table first_table
(fieldname varchar(20));
create table second_table
(fieldname varchar(20));
create trigger insert_into_second before insert on first_table
for each row begin
insert into second_table (fieldname)
values (new.fieldname);
end
//
insert into first_table values ('blah');
delimiter ;
select * from second_table;
以上输出:
| FIELDNAME |
|-----------|
| blah |
小提琴演示: http://sqlfiddle.com/#!2/e4384/1/0
注意,在小提琴中,仅在插入FIRST_TABLE后,我从SECOND_TABLE中选择,并将插入反映到FIRST_TABLE中。创建此触发器后,任何进入FIRST_TABLE的插入也将进入SECOND_TABLE。
在MySQL中,默认语句分隔符通常是分号(;),为了创建触发器,必须将其更改为其他内容,在这种情况下,我使用双斜杠(//),这就是为什么你看到我设置在顶部分隔符然后在结尾处返回分号。
答案 1 :(得分:0)
您希望从select语句中插入。
INSERT INTO TABLE (column_name)
SELECT column_name
FROM ANOTHERTABLE
至于"得到我刚插入的那个值" - 当然,你只需要运行两次插入 - 其次是在新表上。
您可以选择刚刚从数据库插入的数据,并使用where条件
弹出新表INSERT INTO TABLE (column_name)
SELECT column_name
FROM ANOTHERTABLE
WHERE ANOTHERTABLE.ID = <YOUR ID HERE>
如果您没有最后一次插入的主键(因为它是自动增量),您应该可以使用LAST_INSERT_ID()
获取它答案 2 :(得分:0)
理想情况下,您会将某种类型的变量传递给过程或查询,然后您可以这样做:
declare
@Blah varchar(10)
,@NewId int
set @Blah = 'blah'
insert into blah
values(@Blah)
insert into blah2
values(@Blah)
--or you can do this
insert into blah
values(@Blah)
--this gets the key of the table you just inserted
set @NewId = SCOPE_IDENTITY() --LAST_INSERT_ID() or MySQL
insert into blah2
select blah
from blah
where id = @NewId