Ini yang saya cuba lakukan:
Bila ada yang baruINSERT
到表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 ;
memerlukanbukanoperasi sayabaru dimasukkanlajur, tetapisudah adalajur, di manapk = NEW.edit_on
pk = BARU.edit_on
<无法更新表 ACCOUNTS ... 已被调用此触发器的语句使用
Walau bagaimanapun, saya tidak boleh mengemas kini jadual yang sama:
Tidak boleh mengemas kini AKAUN jadual ... sudah digunakan oleh pernyataan yang memanggil pencetus iniSila cadangkan penyelesaian
PS: Saya telah melakukan jadual kemas kini dalam pencetus selepas kemas kini pada jadual yang sama, masukkan ke dalam jadual yang sama pencetus mysql, kemas kini pada jadual yang sama menggunakan pencetus selepas sisip dan masukkan dan kemas kini pencetus mysql selepas sisipan di atas meja tetapi mereka nampaknya tidak menjawab soalan saya .
EditACCOUNTS
AKAUN
Jadual:
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
Beginilah cara saya mengemas kini baris dalam jadual yang sama pada sisipan
Garisan dalamactivationCode
和email
是表USER
. Semasa memasukkan, saya tidak menyatakan nilai untukactivationCode
, ia akan dicipta secara dinamik oleh MySQL.Tukar
username
更改为您的 MySQL 用户名,并将db_name
kepada nama pangkalan data anda.Nampaknya anda tidak boleh melakukan semua ini dalam satu pencetus. MengikutDokumentasi:
Berdasarkanjawapan ini, nampaknya anda patut:
Dengan prosedur tersimpan anda akan melakukan perubahan (sisipan dan kemas kini) secara manual. Saya belum melakukan ini dalam MySQL lagi, tetapiartikel inikelihatan seperti contoh yang baik.