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 ;
結果はまだ同じです。
質問は次のとおりです。私は何を間違っていますか?