我有 3 个表:
- 性格_
- 学到的技能
- 技能
“character_”包含字符列表的某些信息,而表“skills”包含技能列表。 第三张表是每个角色学习的技能列表。
但是我希望能够从 character_ 表中删除一个角色,它还会删除该角色的名称以及它从“learned_skills”表中学到的技能。
我假设在这种情况下需要触发器。我知道语法是:
CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR REACH ROW tigger_statement;
但是我不知道 trigger_statement 应该是什么样子。
CREATE TRIGGER delete_char_ AFTER DELETE ON character_ FOR REACH ROW trigger_statement
单条语句是否足够,还是需要多条语句和/或级联?
在这种情况下你会怎么做?
CREATE TABLE character_ (
Name_ varchar (30) NOT NULL,
Class varchar (30),
World_Type varchar (15),
Str integer ,
WS integer ,
BS integer ,
Fel integer ,
Per integer ,
Int_ integer ,
Agi integer ,
WP integer ,
Tough integer ,
PRIMARY KEY (Name_) ,
FOREIGN KEY (Class) REFERENCES Class(Class_name),
FOREIGN KEY (World_Type) REFERENCES World_Type(Name_) );
CREATE TABLE Skills (
SkillName varchar (30) NOT NULL,
Type_ varchar (30),
Characteristic varchar (30),
Descriptor varchar (30),
PRIMARY KEY (SkillName) );
CREATE TABLE Learned_Skills (
Character_Name varchar (30) NOT NULL,
Skill_Name varchar (40) NOT NULL,
PRIMARY KEY (Character_Name,Skill_Name),
FOREIGN KEY (Character_Name) REFERENCES character_(Name_),
FOREIGN KEY (Skill_Name) REFERENCES Talents(TalentName) );
更新:
所以我在理解和创建 DELETE 触发器方面得到了帮助,但我发现需要在两个表上创建多个触发器,我知道不可能在具有相同触发时间和事件的两个表上创建触发器,但有办法解决吗?我需要的是:
DELIMITER //
CREATE TRIGGER delete_char_ AFTER DELETE ON character_
FOR EACH ROW begin
DELETE FROM learned_skills
WHERE learned_skills.Character_Name = old.Name_;
DELETE FROM learned_talents
WHERE learned_talents.Character_Name = old.Name_;
END;
//
DELIMITER ;
当我运行这段代码时,我得到了错误代码:
1235, this version of mysql doesn't yet support 'multiple triggers with the samme action time and event for one table
最佳答案
这是它的样子:
CREATE TRIGGER delete_char_ AFTER DELETE ON character_
FOR EACH ROW
DELETE FROM learned_skills
WHERE learned_skills.Character_Name = old.Name_;
您需要替换 <field>
无论 character_
的主键是什么.这将从 learned_skills 表中删除所有具有 <field>
的内容。的 character_
被删除。
关于Mysql trigger on Delete to multiple tables (同样报错1235),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23813048/