2012-07-29 60 views
1

目前,當一個新行插入我的users表我有1行分別插入到每個其他表:MySQL:如何使用存儲過程將行插入到不同的表中?

profiles 
user_settings 
user_activity 

目前我做的,如果從PHP:

$query = mysql_query('INSERT INTO `users` blah blah...'); 

if($query) { 
    mysql_query('INSERT INTO `profiles` blah blah...'); 
    mysql_query('INSERT INTO `user_settings` blah blah...'); 
    mysql_query('INSERT INTO `user_activity` blah blah...'); 
} 

這怎麼可以通過存儲過程來完成?因此,這項工作將由數據庫服務器完成,而不是由PHP代碼完成。從存儲過程和代碼中做這件事還有什麼好處嗎?

回答

0

我認爲你要找的是triggers而不是stored procedures。通過triggers,您可以在插入/更新/刪除查詢之後或之前執行查詢。

http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html

優點:它存儲,並直接在數據庫中調用,我想這是更高性能的爲好。

例子:

CREATE TRIGGER mytrigger AFTER INSERT ON users 
    FOR EACH ROW BEGIN 
     INSERT INTO `profiles` blah blah...; 
     INSERT INTO `user_settings` blah blah...; 
     INSERT INTO `user_activity` blah blah...; 
END; 
+0

感謝這正是我需要的。但是,我怎樣才能在'users'表中獲取剛纔插入的行的id,以便在其他表上插入一行時可以使用它?例如,我的查詢是'INSERT INTO profiles(user_id)VALUES('???');'我能替換什麼?用? – TK123 2012-07-29 22:17:13

+1

您可以使用'NEW.id'或任何您的字段名稱爲'NEW.fieldname' – Horen 2012-07-29 22:19:55

+0

來自文檔:'您可以使用別名OLD和NEW引用主題表(與觸發器關聯的表)中的列。 OLD.col_name在更新或刪除之前引用現有行的列。 NEW.col_name引用要插入的新行的列或更新後的現有行 – Horen 2012-07-29 22:23:29

相關問題