我看到了大量关于如何在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列是什么,所以我必须错误地指定表或列?
答案 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 ;