MYSQL GUID 触发器
MYSQL GUID Trigger
我创建了以下 table:
CREATE TABLE GUID(guid BINARY(16),user VARCHAR(16),expire INT(10));
我的目标是在某行的 guid = null 时创建默认 guid。
为此,我创建了一个触发器:
CREATE TRIGGER default_guid
BEFORE INSERT ON GUID
FOR EACH ROW BEGIN
IF new.guid IS NULL THEN
SET new.guid = UNHEX(REPLACE(UUID(), '-', ''));
END IF;
END;
但是,我在创建此触发器时收到以下语法错误:
ERROR 1064 (42000): You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server version for the right
syntax to use near '' at line 5
我试过几个在线语法检查器都没有成功;我的语法错误在哪里?
默认情况下,MySQL 使用分号 (;
) 来终止语句。但是,在创建触发器时,您有多个语句组成它,因此您需要告诉 MySQL 分号并不表示您已完成触发器定义,而只是表示该语句。这可以通过将分隔符设置为另一个字符组合来完成,例如 $$
:
-- Set the delimiter to $$
DELIMITER $$
CREATE TRIGGER default_guid
BEFORE INSERT ON GUID
FOR EACH ROW
BEGIN
IF new.guid IS NULL THEN
SET new.guid = UNHEX(REPLACE(UUID(), '-', ''));
END IF;
END;
$$ -- Trigger ends here
-- Reset the delimiter to ;
DELIMITER ;
我创建了以下 table:
CREATE TABLE GUID(guid BINARY(16),user VARCHAR(16),expire INT(10));
我的目标是在某行的 guid = null 时创建默认 guid。 为此,我创建了一个触发器:
CREATE TRIGGER default_guid
BEFORE INSERT ON GUID
FOR EACH ROW BEGIN
IF new.guid IS NULL THEN
SET new.guid = UNHEX(REPLACE(UUID(), '-', ''));
END IF;
END;
但是,我在创建此触发器时收到以下语法错误:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5
我试过几个在线语法检查器都没有成功;我的语法错误在哪里?
默认情况下,MySQL 使用分号 (;
) 来终止语句。但是,在创建触发器时,您有多个语句组成它,因此您需要告诉 MySQL 分号并不表示您已完成触发器定义,而只是表示该语句。这可以通过将分隔符设置为另一个字符组合来完成,例如 $$
:
-- Set the delimiter to $$
DELIMITER $$
CREATE TRIGGER default_guid
BEFORE INSERT ON GUID
FOR EACH ROW
BEGIN
IF new.guid IS NULL THEN
SET new.guid = UNHEX(REPLACE(UUID(), '-', ''));
END IF;
END;
$$ -- Trigger ends here
-- Reset the delimiter to ;
DELIMITER ;