2013-10-15 3 views
2

Je veux demander si est-il possible d'insérer une ligne de données à deux ou plusieurs tables:intégrité référentielle (Insertion de données à deux ou plusieurs tables)

exemple de requête:

insert dans tblsample, tblsample2 ('tblsample.id', 'tblsample2.id' ') valeurs (' 1 ',' 1 ')

bien je crois que la syntaxe est fausse mais ce que je veux montrer est le processus qui aurait pu être fait.

Je pense à faire cela dans une requête de transaction comme si cette idée ne fonctionne pas.

+0

i mis là parce que l'intégrité référentielle je pensais que lorsque vous ajoutez un certaines données à une table, vous devez mettre les données à l'autre table avec intégrité référentielle de la première table. C'est aussi ma préoccupation si je vais ajouter à la première table ce serait un problème si je ne fais pas quelque chose à l'autre table. –

+0

Avez-vous une base de données spécifique avec laquelle vous travaillez? MS SQL, Oracle, MS Access, etc. – Steve

+0

MS Access comme une exigence d'un enseignant. Dans ma propre préférence, je suis à l'aise d'utiliser le serveur Mysql mais comme ce dont elle a besoin. J'utilise MS Access. –

Répondre

0

Oracle semble soutenir insert de table multi comme ceci:

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

Mais je pense qu'il n'y a pas vendeur de manière indépendante.

+0

Je voudrais essayer Oracle. Merci Btw. –

0

Ce n'est pas possible en SQL standard. Oracle, Microsoft SQL Server et probablement d'autres SGBD permettent des insertions multi-tables avec certaines limitations.

La restriction qu'une seule table peut être modifiée à la fois est une limitation fondamentale de SQL. Cela rend pratiquement impossible l'application de certaines contraintes d'intégrité multi-tables. C'est probablement la raison pour laquelle les SGBD SQL supportent généralement un ensemble très limité de contraintes (FOREIGN KEY et certaines contraintes CHECK).

0

MS SQL et Oracle peut prendre en charge plusieurs inserts, mais vous devez envelopper dans une transaction parce que si la moitié du chemin par une erreur se produit, il ne sera pas annuler toute instruction SQL. Pour ce faire, ajoutez un ";" entre vos inserts:

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

Mais, une petite astuce que vous pouvez faire avec MS Access est de créer un tableau de données à insérer par UNIONing certaines données ensemble:

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

je peux avoir l'accès MS syntaxe incorrecte, cela fait un moment que je l'ai fait avec accès

Cela fonctionne également avec de nombreuses autres bases de données, mais leur syntaxe peut être différente. Une bonne chose à propos de cette approche est qu'il est déjà transactionnel, donc vous n'avez pas à l'emballer dans une transaction.

+0

Nice. Merci pour l'idée. Je vais travailler avec celui-ci. –

Questions connexes