Rumah  >  Soal Jawab  >  teks badan

Ralat MySql: Jadual dalam fungsi/pencetus yang disimpan tidak boleh dikemas kini kerana ia sudah digunakan oleh pernyataan yang memanggil fungsi/pencetus yang disimpan ini

Saya menjalankan pertanyaan MySQL. Walau bagaimanapun, apabila menambah baris baharu daripada input borang, saya mendapat ralat ini:

Error: Can't update table 'brandnames' in stored function/trigger because it is 
already used by statement which invoked this stored function/trigger.

Daripada kod:

CREATE TRIGGER `capital` AFTER INSERT ON `brandnames`
FOR EACH
ROW UPDATE brandnames
SET bname = CONCAT( UCASE( LEFT( bname, 1 ) ) , LCASE( SUBSTRING( bname, 2 ) ) )

Apakah maksud ralat ini?

P粉668804228P粉668804228369 hari yang lalu623

membalas semua(2)saya akan balas

  • P粉573809727

    P粉5738097272023-10-16 17:19:55

    Sintaks yang betul ialah:

    FOR EACH ROW SET NEW.bname = CONCAT( UCASE( LEFT( NEW.bname, 1 ) )
                                       , LCASE( SUBSTRING( NEW.bname, 2 ) ) )

    balas
    0
  • P粉921165181

    P粉9211651812023-10-16 11:22:02

    Apabila INSERT 触发器触发时,您无法更改表。 INSERT beberapa operasi penguncian mungkin dilakukan, yang boleh menyebabkan kebuntuan. Selain itu, mengemas kini jadual daripada pencetus akan menyebabkan pencetus yang sama menyala semula dalam gelung rekursif tak terhingga. Kedua-dua sebab ini adalah mengapa MySQL menghalang anda daripada melakukan ini.

    Namun, bergantung pada apa yang anda ingin capai, anda boleh menggunakan NEW.fieldname 访问新值,甚至可以使用旧值 - 如果执行 UPDATE --OLD.

    Jika anda mempunyai medan bernama full_brand_name 的行,并且您想在 small_name menggunakan dua huruf pertama sebagai nama pendek, anda boleh menggunakan:

    CREATE TRIGGER `capital` BEFORE INSERT ON `brandnames`
    FOR EACH ROW BEGIN
      SET NEW.short_name = CONCAT(UCASE(LEFT(NEW.full_name,1)) , LCASE(SUBSTRING(NEW.full_name,2)))
    END

    balas
    0
  • Batalbalas