参照完整性(将数据插入两个或多个表)

时间:2013-10-15 03:39:12

标签: sql vb.net database-design

我想问一下是否可以在两个或多个表中插入一行数据:

示例查询:

插入tblsample,tblsample2('tblsample.id','tblsample2.id'')值('1','1')

我相信语法是错误的,但我想展示的是可以完成的过程。

我正在考虑将此问题转换为事务查询,就好像这个想法不起作用。

3 个答案:

答案 0 :(得分:0)

Oracle似乎支持这样的多表插入:

insert all
into sample_table (id, name) values (1, 'foo')
into sample_table2 (id, name) values (2, 'bar')
select * from dual;

但我认为没有供应商独立的方式。

答案 1 :(得分:0)

在标准SQL中无法实现。 Oracle,Microsoft SQL Server以及可能的其他DBMS允许多表插入具有某些限制。

一次只能修改一个表的限制是SQL的基本限制。它实际上不可能强制执行某些多表完整性约束。这可能就是为什么SQL DBMS通常只支持一组非常有限的约束(FOREIGN KEYs和一些CHECK约束)。

答案 2 :(得分:0)

MS SQL和Oracle可以支持多个插入,但是您应该包装在一个事务中,因为如果发生错误的一半,它将不会回滚整个SQL语句。为此,添加“;”插入之间:

INSERT INTO table1 (1,2,3,'Test');INSERT INTO table1 (3,4,5,'Test');INSERT INTO table1 (6,7,8,'Test')

但是,你可以用MS Access做的一个小技巧就是创建一个数据表,通过UNIONing一些数据来插入:

INSERT INTO table1 (SELECT 1,2,3,'TEST' UNION ALL SELECT 1,2,3,'TEST' UNION ALL SELECT 1,2,3,'TEST')

我的MS Access语法可能有问题,自从我这样做以来已经有一段时间了

这也适用于许多其他数据库,但它们的语法可能不同。关于这种方法的好处是它已经是事务性的,所以你不必将它包装在事务中。