2010-01-08 9 views
1

Je regarde une base de données qui a 3 tables dans lequel je dois insérer des données:de données MySQL connexes Insertion avec AUTO_INCREMENT

resource 
    id (AUTO_INCREMENT) 
    name 

resource_item 
    id (AUTO_INCREMENT) 
    name 
    resource_id (FK ref resource.id) 

resource_item_business_function 
    id (AUTO_INCREMENT) 
    business_function_name 
    resource_item_id 

Ce que je suis aux prises avec le fait que cela doit être scénarisé. J'insère seulement 1 enregistrement resource ainsi je peux écrire l'insertion dans la table resource assez facilement. J'ai ~ 20 resource_item enregistrements à insérer pour cela resource et je peux même le faire assez facilement en utilisant la fonction LAST_INSERT_ID(). La question est ... comment puis-je insérer dans resource_item_business_function?

Je ne sais pas comment insérer la appropriéeresource_item_id dans chaque enregistrement resource_item_business_function. Toutes les pensées seraient très appréciées.

Répondre

0

Vous devez utiliser LAST_INSERT_ID() après chaque insertion dans resource_item. Donc, votre script final pourrait ressembler à ceci:

SET AUTOCOMMIT=0; 
SET @RESOURCE_ID=0; 

INSERT INTO resource (NULL, "Some Name"); 
SELECT LAST_INSERT_ID() INTO @RESOURCE_ID; 

INSERT INTO resource_item (NULL, "Some Name", RESOURCE_ID); 
INSERT INTO resource_item_business_function (NULL, "Some Name", LAST_INSERT_ID()); 
...etc... 
INSERT INTO resource_item (NULL, "Some Name", RESOURCE_ID); 
INSERT INTO resource_item_business_function (NULL, "Some Name", LAST_INSERT_ID()); 

COMMIT; 
+0

Ugh. J'espérais qu'il y aurait une sorte de script/looping intelligent que je pourrais faire pour éviter les instructions SQL individuelles. De l'autre côté, il n'y a pas de cascade de FK, alors j'espérais pouvoir écrire le script pour supprimer automagiquement les enregistrements existants s'ils étaient exécutés plusieurs fois. Pour plus de clarté, j'ai quitté cette dernière partie. :-) –

+0

Puis abandonner les procédures une fois que le script termine son exécution, je suppose? Je ne veux définitivement pas que ce genre de procédure s'attarde sur le db. –

+0

Si ce n'est pas une opération en cours, je n'utiliserais pas les SP ou les déclencheurs de la base de données. –

Questions connexes