【问题标题】:MySQL - Sorry an unexpected error happenedMySQL - 抱歉,发生了意外错误
【发布时间】:2017-11-27 05:46:29
【问题描述】:

我正在创建一个触发器,当它从学生表中删除时保存历史记录,但是当我执行触发器代码来创建它时,我收到错误消息“对不起,发生了意外错误!”你真的不知道该怎么做。

学生桌:

CREATE TABLE `Student` (
  `IDstudent` varchar(5) COLLATE utf32_spanish_ci NOT NULL,
  `Names` varchar(40) COLLATE utf32_spanish_ci NOT NULL,
  `SecNames` varchar(40) COLLATE utf32_spanish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf32 COLLATE=utf32_spanish_ci;

ALTER TABLE `Student`
  ADD PRIMARY KEY (`IDstudent`);
COMMIT;

已删除学生表:

CREATE TABLE `DeletedStudents` (
  `IDstudent ` varchar(5) COLLATE utf32_spanish_ci NOT NULL,
  `Names ` varchar(30) COLLATE utf32_spanish_ci NOT NULL,
  `SecNames ` varchar(30) COLLATE utf32_spanish_ci NOT NULL,
  `DateDeleted` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf32 COLLATE=utf32_spanish_ci;

ALTER TABLE `DeletedStudents`
  ADD PRIMARY KEY (`IDstudent`);

ALTER TABLE `DeletedStudents`
  ADD CONSTRAINT `DeletedStudents_ibfk_1` FOREIGN KEY (`IDstudent`) 
REFERENCES `Student` (`IDstudent`);
COMMIT;

触发器:

DELIMITER
\\
CREATE TRIGGER TR_Delete_Student AFTER DELETE
ON
Student FOR EACH ROW
BEGIN
INSERT INTO DeletedStudents(
    IDstudent,
    Names,
    SecNames,
    DateDeleted
)
VALUES(
old.IDstudent,
old.Names,
old.SecNames,
NOW()) ;
END \\
DELIMITER
;

【问题讨论】:

  • 什么时候执行什么代码?
  • 触发代码,抱歉我没有指定
  • 这是在创建触发器时还是在使用时?
  • 你有一堆不匹配的表和列名。请提供minimal reproducible example
  • Sorry an unexpected error happened! 不是来自 MySQL 的错误。

标签: mysql


【解决方案1】:

我遇到了同样的错误,我知道 MySql 将我们的输入作为原始字符串获取,然后将其解析为 sql 语法(在后端),因此使用 DELIMITER \\ 可能会在原始字符串中创建转义字符提供的输入因此引发错误“对不起,发生了意外错误!”这当然是解析器的错误(我的意思不是 MySql)。所以解决方案是使用\\以外的任何东西作为DELIMITER

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-14
    • 2015-08-13
    • 2017-02-07
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    相关资源
    最近更新 更多