這就是我正在嘗試做的事情:
當(dāng)有一個(gè)新的 INSERT
到表 ACCOUNTS
中時(shí),我需要通過設(shè)置 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 ;
要求不是我操作新插入的列,而是已經(jīng)存在的列,其中 pk = NEW.edit_on
< /p>
但是,我無法更新同一個(gè)表:無法更新表 ACCOUNTS ... 已被調(diào)用此觸發(fā)器的語句使用
請(qǐng)?zhí)岢鼋鉀Q方法
PS:我已經(jīng)完成了在同一個(gè)表上更新后在觸發(fā)器中更新表、插入同一個(gè)表觸發(fā)器mysql、在同一個(gè)表上使用插入后觸發(fā)器更新以及在表上插入后插入和更新mysql觸發(fā)器,但它們沒有似乎回答了我的問題。
編輯
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
這就是我在插入時(shí)更新同一個(gè)表中的行的方法
activationCode
和 email
是表 USER
中的行。
插入時(shí),我沒有指定 activationCode
的值,它將由 MySQL 動(dòng)態(tài)創(chuàng)建。
將 username
更改為您的 MySQL 用戶名,并將 db_name
更改為您的數(shù)據(jù)庫名稱。
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