Mysql
同時創建 MySQL CHILD 和 PARENT 記錄,並使用 MySQL Triggers 設置 CHILD.PARENT_ID
當展位不存在以及創建新孩子時,我想在父母和孩子之間建立關係。這可以通過觸發器以某種方式完成,但我不知道如何使用 SQL。
經過一番Google搜尋後,我想出了下面的觸發器概念。
- 創建孩子
- 創建父級
- 獲取最後一個父 id
- 使用 parent_id更新CURRENT子記錄
有人可以幫助我實現這一目標嗎?
DELIMITER $$ CREATE TRIGGER `database_name`.`trigger_name` AFTER INSERT ON `database_name`.`child_table` FOR EACH ROW BEGIN /*Step 1 - Create Parent record.*/ INSERT INTO `database_name`.`parent_table`(id) VALUES (``); /*Step 2 - Get last inserted ID of just created Parent record and assign to the variable*/ DECLARE last_id int; SELECT LAST_INSERT_ID INTO last_id; FROM information_schema.tables WHERE table_name = `parent_table` AND table_schema = `database_name`; /*Step 3 - Update current record child_table.parent_id with last_id variable*/ UPDATE NEW.parent_id = last_id; END$$ DELIMITER ;
或類似的東西,但它有錯誤。
DELIMITER $$ DROP TRIGGER IF EXISTS create_new_child; $$ CREATE TRIGGER create_new_child BEFORE INSERT ON child FOR EACH ROW BEGIN DECLARE last_id INT; SELECT AUTO_INCREMENT INTO last_id FROM information_schema.TABLES WHERE TABLE_NAME = parent AND TABLE_SCHEMA = DATABASE(); INSERT INTO parent (title) VALUES (`TEST`); SET NEW.parent_id = last_id; END$$ DELIMITER ;
‘where 子句’中的未知列’父’
我認為您必須在插入子行之前執行此觸發器,並且您的程式碼中有很多錯誤。
- 您必須在腳本的開頭聲明變數。
- 你用 SET 給變數賦值
- 只有 LAST_INSERT_ID() 函式是必需的,如果你在更新前執行觸發器,你只需要設置 NEW 值,就是這樣。
DELIMITER $$ DROP TRIGGER `database_name `.`trigger_name` $$ CREATE TRIGGER `database_name `.`trigger_name` BEFORE INSERT ON `database_name `.`child_table` FOR EACH ROW BEGIN DECLARE last_id int; INSERT INTO `database_name`.`parent_table`(id) VALUES (0); SET NEW.parent_id = LAST_INSERT_ID(); END $$ DELIMITER;