我正在使用Windows 64平台上的MariaDB 5.5.29。我创建了这个表:
CREATE TABLE DM_COUNTRIES
(
COUNTRY_UUID BINARY(16) NOT NULL,
C_NAME VARCHAR(255) NOT NULL UNIQUE,
C_LOCALNAME VARCHAR(255) DEFAULT NULL,
C_COUNTRYCODE VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (COUNTRY_UUID)
)
ENGINE=InnoDB;
现在我想确保如果没有提供UUID(作为主键),它会自动插入。因此,我创建了这个触发器:
DELIMITER |
CREATE TRIGGER TRIG_BI_DM_COUNTRIES
BEFORE INSERT ON DM_COUNTRIES
FOR EACH ROW
BEGIN
IF NEW.COUNTRY_UUID IS NULL THEN
SET NEW.COUNTRY_UUID = UUID();
END IF;
END|
DELIMITER ;
为了确保所有内容都被提交(即使模式更改不需要提交):
COMMIT;
现在,当我尝试使用以下内容插入新行时:
INSERT INTO DM_COUNTRIES
(C_NAME, C_LOCALNAME, C_COUNTRYCODE)
VALUES
('Großbritannien', 'Great Britain', 'UK');
我原以为触发器会自动填入一个新的UUID,然后成功插入表中。但事实是这样的:
错误代码: 1364. 字段'COUNTRY_UUID'没有默认值
这显然是正确的答案,因为我没有提供UUID。触发器应该自动填充它。
我尝试使用unhex公式编写触发器,只是为了确保生成的值适合该字段:
DELIMITER |
CREATE TRIGGER TRIG_BI_DM_COUNTRIES
BEFORE INSERT ON DM_COUNTRIES
FOR EACH ROW
BEGIN
IF NEW.COUNTRY_UUID IS NULL THEN
SET NEW.COUNTRY_UUID = UNHEX(REPLACE(UUID(), '-', ''));
END IF;
END|
DELIMITER ;
结果仍然是一样的。 问题是:我做错了什么?
SET NEW.COUNTRY_UUID = UNHEX(REPLACE(UUID(),'-',''));
这是完整的解决方案。 非常感谢你! - zero0