如何向一个数据库中两张表插入数据?

如何向一个数据库中两张表插入数据?,第1张

可以啊,建议你用触发器。比如在Table1中:\x0d\x0aCreateTriggerAutoInsert\x0d\x0aForInsert\x0d\x0aAs\x0d\x0ainsertintoTable2values(1,2)\x0d\x0a然后你只要执行:\x0d\x0ainsertintoTable1values(1,2)\x0d\x0a那么自动启用触发机制,自然Table2中也有了。

下面以mysql数据库为例分情况一一说明:

两张表:insertTest和insertTest2,前者中有测试数据:

1.如果2张表的字段一致,并且希望插入全部数据,可以用这种方法:

INSERT INTO 目标表 SELECT * FROM 来源表

insert into insertTest select * from insertTest2

2.如果只希望导入指定字段,可以用这种方法:

INSERT INTO 目标表 (字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM 来源表

注意字段的顺序必须一致。

insert into insertTest2(id) select id from insertTest2

3.如果您需要只导入目标表中不存在的记录,可以使用这种方法:

INSERT INTO 目标表

(字段1, 字段2, ...)

SELECT 字段1, 字段2, ...

FROM 来源表

WHERE not exists (select * from 目标表

where 目标表.比较字段 = 来源表.比较字段)

1>.插入多条记录:

insert into insertTest2

(id,name)

select id,name

from insertTest

where not exists (select * from insertTest2

where insertTest2.id=insertTest.id)

2>.插入一条记录:

insert into insertTest

(id, name)

SELECT 100, 'liudehua'

FROM dual

WHERE not exists (select * from insertTest

where insertTest.id = 100)

严格意义上讲,没有所谓“同时插入”的手段,只有“要么都插入(分先后),要么都不插入”的机制,这个机制就叫做“事务”,是数据库服务器的执行单位,是原子 *** 作。

由上,将两个insert命令包装为一个事务,如下:

declare @OK integer

begin transaction

set @OK = 0

while 1 = 1

begin

insert table1 values( ... )

set @OK = @@error

if @OK <>0

Break

insert table2 values (... )

set @OK = @@error

Break

end

if @OK = 0

commit transaction

else

rollback transaction

通过触发器也能实现需求,其底层原理依然是事务,触发器和引发它执行的语句被自动地包装到一个事务中。不过,强烈不建议使用该方法,用此伎俩会导致业务逻辑分散,而人的思维还是需要一定的连贯性,集中在一起显然有助于表达和理解,当需要改进或者调试错误时徒增繁琐,实在是弊大于利。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11861761.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存