MySQL - 插入操作後更新同一個表格的觸發器
P粉419164700
P粉419164700 2023-10-16 20:01:46
0
2
703

這就是我正在嘗試做的事情:

當有一個新的INSERT 到表格ACCOUNTS 中時,我需要透過設定status='E'phpcnend 來更新ACCOUNTS 中的行,其中pk = NEW.edit_on cphpcn 來表示特定(舊)帳戶已被編輯。

#
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< ; /p>

但是,我無法更新同一個表格:無法更新表格 ACCOUNTS ... 已被呼叫此觸發器的語句使用

#

請提出解決方法

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


P粉419164700
P粉419164700

全部回覆(2)
P粉063862561

這就是我在插入時更新同一個表中的行的方法

activationCodeemail 是表格 USER 中的行。 插入時,我沒有指定 activationCode 的值,它將由 MySQL 動態建立。

username 變更為您的 MySQL 使用者名,並將 db_name 變更為您的資料庫名稱。

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
P粉262113569

看來您無法在觸發器中完成所有這些操作。根據文檔

根據這個答案,看來你應該:

使用預存程序,您將手動提交變更(插入和更新)。我還沒有在 MySQL 中這樣做過,但這篇文章看起來不錯範例。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板