您好我要将我的数据库结构从我的本地数据库导入到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
似乎有什么问题?提前谢谢!
答案 0 :(得分:1)
begin
和end
用于表示多个语句属于一起。但是,您只有一个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变量)
您必须指定触发器(或功能)的特征。特征可以是
从手册:
如果例程对于相同的输入参数总是产生相同的结果,则该例程被认为是“确定性的”,否则被认为是“不确定的”。如果在例程定义中既未给出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
选项。
当您从父表中删除数据时,它会从子表中删除数据。