Mysql trigger on Delete to multiple tables (同样报错1235)

标签 mysql triggers sql-delete cascading-deletes

我有 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/

相关文章:

mysql - SELECT * FROM $table 其中任何内容 = $x?

java - 映射语句集合不包含 mybatis 映射器的值

php - codeigniter 中的 JQuery 实时搜索

mysql - 如何删除表上的存储过程?

sql-server - 删除时间序列中的重复项

c# - SQL删除命令?

php - 如何删除mysql表中的重复值

events - 插件中可安装的 onEdit 触发器 - 错误 - 文档未被使用

mysql - 删除 : You can't specify target table 'table_name' for update in FROM clause

postgresql - 为使用批量插入的表使用插入时触发更新旧记录