このクエリをmysql Ver 15.1 Distrib 5.5.44-MariaDB, for Linux (x86_64) using readline 5.1
で実行しようとしていますが、常にこのエラーが発生しました。
CREATE TRIGGER trig_companies_table_insert BEFORE INSERT ON `companies`
FOR EACH ROW SET NEW.createdAt = NOW();
[Err] 1235 - This version of MariaDB doesn't yet support 'multiple triggers with the same action time and event for one table'
これはどういう意味ですか?どのようにして回避または修正できますか?
これは私が実行しようとしているクエリです:
-- brands
ALTER TABLE `brands`
CHANGE COLUMN `createdAt` `createdAt` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
CHANGE COLUMN `updatedAt` `updatedAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
CREATE TRIGGER trig_brands_table_insert BEFORE INSERT ON `brands`
FOR EACH ROW SET NEW.createdAt = NOW();
-- companies
ALTER TABLE `companies`
CHANGE COLUMN `createdAt` `createdAt` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
CHANGE COLUMN `updatedAt` `updatedAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
CREATE TRIGGER trig_companies_table_insert BEFORE INSERT ON `companies`
FOR EACH ROW SET NEW.createdAt = NOW();
-- emails
ALTER TABLE `emails`
CHANGE COLUMN `createdAt` `createdAt` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
CHANGE COLUMN `updatedAt` `updatedAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
CREATE TRIGGER trig_emails_table_insert BEFORE INSERT ON `emails`
FOR EACH ROW SET NEW.createdAt = NOW();
-- events_tracking
ALTER TABLE `events_tracking`
CHANGE COLUMN `createdAt` `createdAt` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
CHANGE COLUMN `updatedAt` `updatedAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
CREATE TRIGGER trig_events_tracking_table_insert BEFORE INSERT ON `events_tracking`
FOR EACH ROW SET NEW.createdAt = NOW();
-- media
ALTER TABLE `media`
CHANGE COLUMN `createdAt` `createdAt` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
CHANGE COLUMN `updatedAt` `updatedAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
CREATE TRIGGER trig_media_table_insert BEFORE INSERT ON `media`
FOR EACH ROW SET NEW.createdAt = NOW();
-- messages
ALTER TABLE `messages`
CHANGE COLUMN `createdAt` `createdAt` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
CHANGE COLUMN `updatedAt` `updatedAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
CREATE TRIGGER trig_messages_table_insert BEFORE INSERT ON `messages`
FOR EACH ROW SET NEW.createdAt = NOW();
-- reps
ALTER TABLE `reps`
CHANGE COLUMN `createdAt` `createdAt` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
CHANGE COLUMN `updatedAt` `updatedAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
CREATE TRIGGER trig_reps_table_insert BEFORE INSERT ON `reps`
FOR EACH ROW SET NEW.createdAt = NOW();
-- targets
ALTER TABLE `targets`
CHANGE COLUMN `createdAt` `createdAt` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
CHANGE COLUMN `updatedAt` `updatedAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
CREATE TRIGGER trig_targets_table_insert BEFORE INSERT ON `targets`
FOR EACH ROW SET NEW.createdAt = NOW();
-- territories
ALTER TABLE `territories`
CHANGE COLUMN `createdAt` `createdAt` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
CHANGE COLUMN `updatedAt` `updatedAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
CREATE TRIGGER trig_territories_table_insert BEFORE INSERT ON `territories`
FOR EACH ROW SET NEW.createdAt = NOW();
このエラーは、BEFORE INSERT
companies
テーブルのトリガー。
同じトリガーである場合(trig_companies_table_insert
)以前に作成し、今それを置き換えたい場合は、まずそれをドロップする必要があります。
DROP TRIGGER trig_companies_table_insert;
DELIMITER $$
CREATE TRIGGER trig_companies_table_insert BEFORE INSERT ON `companies`
FOR EACH ROW SET NEW.createdAt = NOW();
END$$
DELIMITER ;
他のトリガーがある場合は、両方のトリガーのコードを1つにマージしてから、既存のトリガーを削除して、新しいトリガーを作成する必要があります。
既存のトリガーのリストを表示するには、SHOW TRIGGERSを使用します。
SHOW TRIGGERS WHERE `table` = 'companies';
これは、BEFORE INSERT ON companies
のトリガーがすでにあることを意味します。
(アクション時間= BEFORE
、イベント= INSERT
)
同じイベントとアクション時間で2つ持つことはできません。
既存のBEFORE INSERT
トリガーを編集することで修正できます。