触发MYSQL IPAGE

时间:2014-08-18 11:40:54

标签: mysql triggers

您好我要将我的数据库结构从我的本地数据库导入到ipage。

我收到了一个错误,如下所示:

  

#1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法   靠近''第3行

我使用的查询是

CREATE TRIGGER `pm_sales_agent_BDEL` BEFORE DELETE ON `pm_sales_agent`
 FOR EACH ROW begin
DELETE FROM `pm_sales_agent_quota` WHERE `fk_sales_agent_id` = OLD.id;
end

我尝试过在google中找到的查询检查器,但它说查询很好: 这是链接:MySQL Syntax Check

似乎有什么问题?提前谢谢!

1 个答案:

答案 0 :(得分:1)

beginend用于表示多个语句属于一起。但是,您只有一个delete语句,因此;结束create trigger语句。然后end让MySQL感到困惑。要么像这样写:

CREATE TRIGGER `pm_sales_agent_BDEL` BEFORE DELETE ON `pm_sales_agent`
 FOR EACH ROW 
DELETE FROM `pm_sales_agent_quota` WHERE `fk_sales_agent_id` = OLD.id;

或更改分隔符:

DELIMITER $$
CREATE TRIGGER `pm_sales_agent_BDEL` BEFORE DELETE ON `pm_sales_agent`
 FOR EACH ROW 
BEGIN
DELETE FROM `pm_sales_agent_quota` WHERE `fk_sales_agent_id` = OLD.id;
END $$
DELIMITER ; /*don't forget to change it back*/

<强>更新

解决错误

  

#1419 - 您没有SUPER权限并且启用了二进制日志记录(可能想要使用安全性较低的log_bin_trust_function_creators变量)

您必须指定触发器(或功能)的特征。特征可以是

  • [NOT] DETERMINISTIC
  • 包含SQL
  • 没有SQL
  • 阅读SQL数据
  • 修改SQL数据

从手册:

  

如果例程对于相同的输入参数总是产生相同的结果,则该例程被认为是“确定性的”,否则被认为是“不确定的”。如果在例程定义中既未给出DETERMINISTIC也未给出DETERMINISTIC,则默认值为NOT DETERMINISTIC。要声明函数是确定性的,必须明确指定DETERMINISTIC。


  

CONTAINS SQL表示该例程不包含读取或写入数据的语句。如果没有明确给出这些特征,则这是默认值。此类语句的示例是SET @x = 1或DO RELEASE_LOCK('abc'),它们既可以执行也不会写入数据。


  

NO SQL表示该例程不包含SQL语句。


  

READS SQL DATA表示例程包含读取数据的语句(例如,SELECT),但不包含写入数据的语句。


  

MODIFIES SQL DATA表示该例程包含可能写入数据的语句(例如,INSERT或DELETE)。

详细了解here

此外,如果您想确保代码的某些数据完整性,您应该查看外键的ON DELETE CASCADE选项。
当您从父表中删除数据时,它会从子表中删除数据。