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