无法在SQLYog

时间:2018-10-11 20:49:25

标签: mysql triggers database-trigger sqlyog

我看到了大量关于如何在MySQL / SQLYog中执行此操作的示例,但是我尝试的所有操作都给我一个错误。我一定是误会了一些关键的东西,似乎应该这么简单。

我想让列使用UUID()作为默认值,并且我已经知道触发器是解决此问题的方法。

我尝试了以下方法,但都失败了:

CREATE TRIGGER `tips`.`TableKey` BEFORE INSERT ON `tips`.`TableKey` FOR EACH ROW
SET `tips`.`TableKey` = UUID();

错误:未知的系统变量'TableKey'

CREATE TRIGGER UUID_Trigger
AFTER INSERT ON `databasename`.`tips`
FOR EACH ROW
SET `databasename`.`tips`.`TableKey` = UUID();

错误:您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在第4行的'。TableKey = uuid()'附近使用正确的语法

DELIMITER $$

CREATE
    /*[DEFINER = { user | CURRENT_USER }]*/
    TRIGGER `databasename`.`tips_uuid` BEFORE INSERT
    ON `databasename`.`tips`
    FOR EACH ROW BEGIN
    IF `databasename`.tips.TableKey IS NULL
      THEN
        SET `databasename`.tips.TableKey = UUID();
      END IF;
    END$$

DELIMITER ;

错误:您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在'.TableKey = UUID();附近使用正确的语法。       万一;     END'在第8行

CREATE TRIGGER tips_uuid_default
BEFORE INSERT ON tips
FOR EACH ROW
  IF tips.TableKey IS NULL
  THEN
    SET tips.TableKey = UUID();
  END IF;

错误:错误代码:1193 未知的系统变量'TableKey'

错误代码:1064 您的SQL语法有误;查看与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的“ END IF”附近使用

有人可以让我知道我在做什么错吗?似乎永远都不知道TableKey列是什么,所以我必须错误地指定表或列?

1 个答案:

答案 0 :(得分:0)

您使用Update .. Set语句更新一列。您正在设置变量值和更新列值之间进行混合匹配。请尝试以下操作:

DELIMITER $$

CREATE
    /*[DEFINER = { user | CURRENT_USER }]*/
    TRIGGER `databasename`.`tips_uuid` BEFORE INSERT
    ON `databasename`.`tips`
    FOR EACH ROW BEGIN 

    UPDATE `databasename`.tips 
    SET `databasename`.tips.TableKey = UUID() 
    WHERE `databasename`.tips.TableKey IS NULL;

    END$$

DELIMITER ;