我想问是否可以在两个或多个表中插入一行数据:
示例查询:
插入 tblsample, tblsample2 ('tblsample.id','tblsample2.id'') 值 ('1','1')
好吧,我相信语法是错误的,但我想展示的是可以完成的过程。
我正在考虑在事务查询中执行此操作,例如如果这个想法行不通。
我想问是否可以在两个或多个表中插入一行数据:
示例查询:
插入 tblsample, tblsample2 ('tblsample.id','tblsample2.id'') 值 ('1','1')
好吧,我相信语法是错误的,但我想展示的是可以完成的过程。
我正在考虑在事务查询中执行此操作,例如如果这个想法行不通。
Oracle 似乎支持这样的多表插入:
insert all
into sample_table (id, name) values (1, 'foo')
into sample_table2 (id, name) values (2, 'bar')
select * from dual;
但我认为没有供应商独立的方式。
在标准 SQL 中是不可能的。Oracle、Microsoft SQL Server 和可能的其他 DBMS 允许具有某些限制的多表插入。
一次只能修改一个表的限制是 SQL 的一个基本限制。这使得强制执行一些多表完整性约束实际上是不可能的。这可能就是为什么 SQL DBMS 通常只支持非常有限的一组约束(FOREIGN KEYs 和一些 CHECK 约束)。
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 做的一个小技巧是通过将一些数据联合在一起来创建要插入的数据表:
INSERT INTO table1 (SELECT 1,2,3,'TEST' UNION ALL SELECT 1,2,3,'TEST' UNION ALL SELECT 1,2,3,'TEST')
我可能有 MS Access 语法错误,自从我使用 access 执行此操作以来已经有一段时间了
这也适用于许多其他数据库,但它们的语法可能不同。这种方法的好处是它已经是事务性的,因此您不必将其包装在事务中。