2011-11-04 7 views
0

Je tente de créer une procédure stockée qui crée une insertion dans des tables. L'insertion affecte deux tables et il y a un FK entre elles.Mysql: Procédure d'insertion avec deux tables (FK)

enter image description here

CREATE PROCEDURE `db`.`add_user_hr` (
    IN in_Pass VARCHAR(45), 
    IN in_Value VARCHAR(45), 
    IN in_HR_ID INT, 
    ) 
BEGIN 
    INSERT INTO HR 
     (
      Value 
     ) 
     VALUES 
     (
      in_Value 
     ); 

    INSERT INTO User 
     (
      Password, 
      HR_idHR 
     ) 
     VALUES 
     (
      in_Pass, 
      (Get the ID from HR) 
     ); 
END 

Comment puis-je faire en sorte que l'ID correct entre dans l'utilisateur. Et s'il y a une erreur dans l'insert dans HR, qui dois-je faire pour qu'il devienne tyr pour faire un insert dans User? Ive regardé dans "commit" mais ne sais pas comment il est utilisé. Ou y a-t-il une meilleure façon de faire cela?

Dans cet exemple, j'ai une table UserType. Est-ce nécessaire à pour savoir quel type d'utilisateur il est postérieur? Et comment puis-je l'utiliser dans l'insert, sélectionnez la procédure dans le avenir?

Merci à tous!

Répondre

0

Si PK (clé primaire) a des options AUTO_INCREMENT que vous pouvez faire quelque chose comme ceci:

declare value_id_v INT; 
insert into hr(value) values(value_in); 

set value_id_v = last_insert_id(); 

Maintenant, vous pouvez utiliser value_id_v pour effectuer des insertions. Voici le lien à lire à propos de cette fonction LAST_INSERT_ID

+0

S'il y en a beaucoup qui utilisent cette procédure en même temps, il y a un changement que last_insert_id(); est-ce que c'est incorrect? – Linqan

+0

Cette fonction fonctionne au niveau de la session. – ravnur