2015-05-04 45 views
1

我有兩個表。 msUser和msUserChar。我創建了msUser和msUserChar之間的關係,其中msUser中的PK是msUserChar中的FK當TableA記錄被創建時,MySQL自動將記錄插入到TableB中

我需要的是將記錄插入到msUser中時,還會在msUserChar中創建一條記錄,其中FK是從msUser。

我試過使用約束,更新級聯和各種其他關係方法。我知道,我可以使用Last_Insert_Id方法,或者使用事務性的mysql,並且只在兩個記錄都被創建時才提交。不過,我想知道,如果有辦法以關係的方式來做到這一點。

基本上,用戶必須有一個字符。所以當用戶表插入記錄時,會在用戶角色表中創建相關記錄。

的要求,這裏的表中描述:

+-----------+------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+-----------+------------------+------+-----+---------+----------------+ 
| _msId  | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| msUser | varchar(25)  | NO |  | NULL |    | 
| msPass | varchar(30)  | NO |  | NULL |    | 
| msSecret | varchar(30)  | NO |  | NULL |    | 
| msEmail | varchar(45)  | NO |  | NULL |    | 
| msAccType | int(2)   | NO |  | NULL |    | 
| msLastLog | datetime   | YES |  | NULL |    | 
+-----------+------------------+------+-----+---------+----------------+ 

+---------------+------------------+------+-----+---------+----------------+ 
| Field   | Type    | Null | Key | Default | Extra   | 
+---------------+------------------+------+-----+---------+----------------+ 
| _msCharUserID | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| _msId   | int(10) unsigned | YES | MUL | NULL |    | 
| _msCharID  | int(10) unsigned | YES | MUL | NULL |    | 
| msChar_1  | int(10)   | YES |  | NULL |    | 
| msChar_2  | int(10)   | YES |  | NULL |    | 
| msChar_3  | int(10)   | YES |  | NULL |    | 
+---------------+------------------+------+-----+---------+----------------+ 
+0

請形容這兩種 –

+0

上第一臺 –

+0

@MySQLRockstar插入後事件創建觸發器的表中的列,請查看更新的問題。 @M khalid Junaid,我知道我可以使用觸發器,但狡猾的是,利用內置於mysql中的關係有更好的方法嗎? –

回答

1

在MySQL中是不可能有一個查詢爲INSERT只能將數據插入到一個表一次。所以,如果你不想使用TRIGGERS,那麼你可以試試這個

  1. 創建一個存儲過程將執行2個INSERT語句

  2. 裹的2個插圖的交易,以確保這兩個查詢是成功的。

+0

什麼是最好的使用方法? SP,TSQ,觸發器...? –

+0

這取決於應用程序中的使用情況。 SP可以返回值,觸發器不能。您可以調用SP但不能調用CALL觸發器,它會根據限制於INSERT,UPDATE,DELETE的事件自動執行 –

+0

對於受DML語句影響的每一行,觸發器代碼也會執行一次,因此觸發器很容易成爲DML中最重要的因素性能。結帳[存儲的例程和觸發器的限制](http://dev.mysql.com/doc/refman/5.0/en/stored-program-restrictions.html) –

1

可以使用觸發器

delimiter | 

CREATE TRIGGER TrgMsUser BEFORE INSERT ON msUser 
    FOR EACH ROW 
    BEGIN 
    INSERT INTO msUserChar SET _msId = LAST_INSERT_ID(); 
    END; 
| 

delimiter ; 
相關問題