无法在sqlyog中创建触发器

5anewei6  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(552)

这个问题在这里已经有答案了

mysql设置默认id uuid(2个答案)
我可以在mysql中使用函数作为默认值吗(8个答案)
两年前关门了。
我在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服务器版本相对应的手册,以获得使用near'的正确语法。 TableKey =第4行的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服务器版本对应的手册,以获得使用near'.tablekey=uuid()的正确语法;结束if;在第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列是什么,所以我必须错误地指定表或列?

qojgxg4l

qojgxg4l1#

使用更新列 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 ;

相关问题