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
P粉668804228
P粉668804228 2023-10-15 23:34:43
0
2
688

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

membalas semua(2)
P粉573809727

Sintaks yang betul ialah:

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

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
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan