[英]MySQL - Trigger for updating same table after insert
這是我想要做的:
當表ACCOUNTS
有新的INSERT
,我需要通過設置status='E'
來更新ACCOUNTS
中pk
= NEW.edit_on
的行,以表示特定(舊)帳戶已被編輯。
DELIMITER $$
DROP TRIGGER IF EXISTS `setEditStatus`$$
CREATE TRIGGER `setEditStatus` AFTER INSERT on ACCOUNTS
FOR EACH ROW BEGIN
update ACCOUNTS set status='E' where ACCOUNTS.pk = NEW.edit_on ;
END$$
DELIMITER ;
要求不是我操作新插入的列,而是已經存在的pk = NEW.edit_on
列
但是,我無法更新同一張表: Can't update table ACCOUNTS ... already used by the statement that invoked this trigger
請提出解決方法
PS:我已經經歷過在同一個表上更新后在觸發器中更新表, 插入同一個表觸發器mysql , 在同一個表上插入觸發器后更新和在表上插入后插入和更新mysql觸發器,但他們似乎沒有回答我的問題。
編輯
ACCOUNTS
表:
CREATE TABLE `ACCOUNTS` (
`pk` bigint(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` bigint(9) unsigned NOT NULL,
`edit_on` bigint(10) unsigned DEFAULT NULL,
`status` varchar(1) NOT NULL DEFAULT 'A',
PRIMARY KEY (`pk`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=2147483726 DEFAULT CHARSET=latin1
這就是我如何在插入時更新同一個表中的一行
activationCode
和email
是表USER
中的行。 在插入時,我沒有為activationCode
指定值,它將由 MySQL 動態創建。
用你的 MySQL 用戶名和db_name
用你的數據庫名稱更改username
名。
CREATE DEFINER=`username`@`localhost`
TRIGGER `db_name`.`user_BEFORE_INSERT`
BEFORE INSERT ON `user`
FOR EACH ROW
BEGIN
SET new.activationCode = MD5(new.email);
END
有同樣的問題,但必須用即將進入的 id 更新一列,所以你可以做一個更新,應該在 BEFORE 和 AFTER 之前沒有 BEFORE 沒有 id 所以我做了這個技巧
DELIMITER $$
DROP TRIGGER IF EXISTS `codigo_video`$$
CREATE TRIGGER `codigo_video` BEFORE INSERT ON `videos`
FOR EACH ROW BEGIN
DECLARE ultimo_id, proximo_id INT(11);
SELECT id INTO ultimo_id FROM videos ORDER BY id DESC LIMIT 1;
SET proximo_id = ultimo_id+1;
SET NEW.cassette = CONCAT(NEW.cassette, LPAD(proximo_id, 5, '0'));
END$$
DELIMITER ;
在最后一個條目上; 這是另一個技巧:
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_schema = ... and table_name = ...
相反,您可以在插入之前使用並獲取特定表的最大 pkid,然后更新最大 pkid 表記錄。
DELIMITER $$
DROP TRIGGER IF EXISTS `setEditStatus`$$
CREATE TRIGGER `setEditStatus` **BEFORE** INSERT on ACCOUNTS
FOR EACH ROW BEGIN
SET NEW.STATUS = 'E';
END$$
DELIMITER ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.