Mysql
mysql從多對多關係觸發數據
我是觸發器的新手,所以我想知道如何從 3 個不同的表中選擇屬性以將它們插入到新表中。
我有 3 個具有多對多關係的表:
users
有id_user
和的桌子name_user
toys
具有id_toy
和的表name_toy
user_has_toy
具有 iduser_id
和的表,該表是和toy_id
之間的多對多關係。users``toys
我想使用觸發器在新表中插入
name
和。toy
create trigger ai_usertoy after insert on users select (name_user,name_toy) new.name_user, toys.name_toy from toys
問題是我不知道如何處理觸發器中的第三個表 id 以知道哪個
id_user
對應於id_toy
.
不要使用
TRIGGER
,使用儲存過程。通常,觸發器作用於單個表,以響應該表上的
INSERT
//UPDATE
。DELETE
要建構多:多關係,您需要來自兩個不同表的“名稱”。單個插入/等不會發生這種情況。儲存過程將採用您提到的兩個名稱,它將執行兩個 IODKU(搜尋
INSERT .. ON DUPLICATE KEY UPDATE ..
)加上第三個INSERT
進入多:多關係表。
您不需要在觸發器中。您必須簡單地執行 3 個查詢:
INSERT IGNORE INTO users (name_user) VALUES ('User Name'); INSERT IGNORE INTO toys (name_toy) VALUES ('Toy Name'); INSERT INTO user_has_toy (user_id, toy_id) SELECT u.id_user, t.id_toy FROM users, toys WHERE u.name_user = 'User Name' AND t.name_toy = 'Toy Name';
name_user
表中的欄位users
必須是唯一的。在這種情況下,如果使用者是新使用者,則將插入該使用者,如果該使用者已存在,則不插入該使用者。但是在第一次查詢之後它無論如何都會存在(當然如果沒有發生其他問題)。玩具也一樣。
如果您的連接器允許 milti-quering,則所有 3 個查詢都可以作為一個查詢執行。否則將它們放置到儲存過程中。