Mysql

mysql從多對多關係觸發數據

  • January 15, 2019

我是觸發器的新手,所以我想知道如何從 3 個不同的表中選擇屬性以將它們插入到新表中。

我有 3 個具有多對多關係的表:

  • usersid_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// UPDATEDELETE要建構多:多關係,您需要來自兩個不同表的“名稱”。單個插入/等不會發生這種情況。

儲存過程將採用您提到的兩個名稱,它將執行兩個 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 個查詢都可以作為一個查詢執行。否則將它們放置到儲存過程中。

引用自:https://dba.stackexchange.com/questions/227126