2010-04-09 4 views

Répondre

1

EDIT:

Désolé pour une mauvaise interprétation de votre question. Mysql supporte uniquement les contraintes avec certains moteurs. InnoDB est celui que je connais et utilise généralement, mais d'autres pourraient ne pas vraiment être sûrs. Donc, avec Inno DB youd besoin ème schéma suivant:

CREATE TABLE my_table_a (
    `id` INTEGER UNSIGNED NOT NULL auto_increment, 
    # your other column definitions 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 

CREATE TABLE my_table_b (
    `id` INTEGER UNSIGNED NOT NULL auto_increment, 
    # your other column definitions 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 

CREATE TABLE my_table_a_b (
    `id` INTEGER UNSIGNED NOT NULL auto_increment, 
    `table_a_id` INTEGER UNSIGNED NOT NULL, 
    `table_b_id` INTEGER UNSIGNED NOT NULL 
    PRIMARY KEY (`id`), 
    KEY (`table_a_id`), 
    KEY (`table_b_id`), 
    CONSTRAINT `ab_FK_a` 
     FOREIGN KEY (`table_a_id`) 
     REFERENCES `my_table_a` (`id`), 
    CONSTRAINT `ab_FK_b` 
     FOREIGN KEY (`table_b_id`) 
     REFERENCES `my_table_b` (`id`) 
) ENGINE=InnoDB; 

SET FOREIGN_KEY_CHECKS=0; 

# Your INSERTS 

SET FOREIGN_KEY_CHECKS=1; 

Désactivera les contrôles FK ast les instructions SQL reflètent qu'après avoir effectué vos insertions. Si je me souviens bien Il va ensuite vérifier les clés une fois rallumé. Pour cette raison, vous voudrez peut-être utiliser une transaction afin que vous puissiez revenir en arrière si vous avez fait une erreur et les touches ne correspondent pas à la fin. Sinon, vous pourriez avoir des données partielles qui est jamais amusant :-)

+1

Ne répond pas à la question. En fait, supprime tous les contrôles d'intégrité qui est le contraire de ce qui est demandé. –

+1

Oui, je n'ai vraiment pas compris ce qu'il disait. J'espérais un moyen où si une clé n'existe pas dans une table et j'essaie de l'ajouter comme une clé étrangère, cela ne fonctionnerait pas. – ranzy

+0

oh j'ai mal lu .. bien qu'il ait voulu ajouter des disques relaed mais pas dans l'ordre pour son lot. Voir ci-dessus modifier. – prodigitalson

0

je ne sais pas contrainte, mais vous pouvez utiliser cette requête d'insertion:
INSERT INTO TAB3 (TAB3_key1, TAB3_key2) SELECT val1, val2 DE TAB1 REJOIGNEZ TAB2 ON EXISTS (SELECT * FROM TAB1 REJOIGNEZ TAB2 ON TAB1_key = val1 ET TAB2_key = val2) LIMITE 1; Où val1, val2 - valeurs que vous voulez insérer.

Questions connexes