【发布时间】:2021-12-15 17:04:04
【问题描述】:
我使用 MariaDB (10.3.29-MariaDB-0+deb10u1) 和 DbVisualizer (Pro 12.1.1 [Build #3237]) 作为 IDE。
我想通过让 MariaDB 将键设置为 UUID 来管理表的主键,我从这个开始
CREATE TRIGGER before_pkey_maintenance
BEFORE INSERT ON maintenance
FOR EACH ROW
SET NEW.pkey = uuid();
效果很好,除了我开始提供自己的 UUID,当然,触发器重写了。仅当未提供 UUID 时,我才尝试以下方法来创建 UUID:
CREATE TRIGGER before_pkey_maintenance
BEFORE INSERT ON maintenance
FOR EACH ROW
IF NEW.pkey IS NULL THEN
SET NEW.pkey = uuid();
END IF;
问题是,当我执行创建时,我得到以下错误:
[Code: 1064, SQL State: 42000] (conn=1002) You have an error in your SQL syntax;
check the manual that corresponds to your MariaDB server version for the right syntax
to use near '' at line 5 [Script position: 132 - 168]
错误 1064 被记录为 (https://riptutorial.com/mysql/example/2995/error-code-1064--syntax-error) 没有正确使用反引号,我可以处理...除了该消息是指“在第 5 行使用靠近 '' 的语法”,即空字符串消息中的帮助不大。
我找到MySQL Trigger with IF statement returning #1064,它添加了“分隔符”的使用,并尝试了“|”、“//”和“$$”作为分隔符。我尝试了很多变体,都类似于以下内容:
delimiter $$
CREATE TRIGGER before_pkey_maintenance
BEFORE INSERT ON maintenance
FOR EACH ROW
IF NEW.pkey IS null THEN
SET NEW.pkey = uuid();
END IF;
END
$$
delimiter ;
...但它们都不起作用。
我查看了 DbVisualizer 的文档,没有发现任何表明它在幕后执行“魔术”的信息,但我怀疑如果上述任何一项正确,则 DbVis 正在单独执行这些操作。
【问题讨论】:
标签: dbvisualizer