Rumah  >  Soal Jawab  >  teks badan

MySQL - Pencetus untuk mengemas kini jadual yang sama selepas operasi memasukkan

Ini yang saya cuba lakukan:

Bila ada yang baru 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 ;

memerlukanbukan operasi sayabaru dimasukkan lajur, tetapi sudah adalajur, di mana pk = NEW.edit_onpk = 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 ini

Sila 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 .

Edit

ACCOUNTS

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
🎜🎜🎜
P粉419164700P粉419164700369 hari yang lalu656

membalas semua(2)saya akan balas

  • P粉063862561

    P粉0638625612023-10-17 18:44:15

    Beginilah cara saya mengemas kini baris dalam jadual yang sama pada sisipan

    Garisan dalam

    activationCodeemail 是表 USER. Semasa memasukkan, saya tidak menyatakan nilai untuk activationCode, ia akan dicipta secara dinamik oleh MySQL.

    Tukar username 更改为您的 MySQL 用户名,并将 db_name kepada nama pangkalan data anda.

    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

    balas
    0
  • P粉262113569

    P粉2621135692023-10-17 17:55:58

    Nampaknya anda tidak boleh melakukan semua ini dalam satu pencetus. Mengikut Dokumentasi:

    Berdasarkan jawapan ini, nampaknya anda patut:

    Dengan prosedur tersimpan anda akan melakukan perubahan (sisipan dan kemas kini) secara manual. Saya belum melakukan ini dalam MySQL lagi, tetapi artikel ini kelihatan seperti contoh yang baik.

    balas
    0
  • Batalbalas