1
我在Windows 64平台上使用MariaDB 5.5.29。我创造了这个表:MariaDB之前为UUID插入触发器
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,然后成功插入到表。但是会发生什么呢?
Error Code: 1364. Field 'COUNTRY_UUID' doesn't have a default value
这是肯定的答案,因为我没有提供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 ;
,结果还是一样。
问题是:我做错了什么?
谢谢你@ypercube - 为你的anwer确定无误。测试成功了。 Partely。我发现,使用UNHEX的想法对于获得完整的UUID到字段是必要的:'SET NEW.COUNTRY_UUID = UNHEX(REPLACE(UUID(),' - ',''));'这是完整的解决方案。非常感谢你! – zero0 2013-03-18 11:30:51