Apabila melaksanakan fungsi tersimpan atau pencetus dalam MySQL, anda mungkin menghadapi ralat:
Error: Can't update table 'brandnames' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Ralat ini berlaku apabila cuba mengemas kini jadual dari dalam fungsi atau pencetus yang disimpan, yang dilarang kerana kemungkinan kebuntuan atau panggilan rekursif tak terhingga.
Pencetus INSERT, seperti yang disediakan:
CREATE TRIGGER `capital` AFTER INSERT ON `brandnames` FOR EACH ROW UPDATE brandnames SET bname = CONCAT( UCASE( LEFT( bname, 1 ) ) , LCASE( SUBSTRING( bname, 2 ) ) )
cuba mengemas kini jadual nama jenama semasa operasi INSERT masih aktif. MySQL menghalang perkara ini untuk mengekalkan integriti data dan mengelakkan kemungkinan ralat.
Untuk menyelesaikan isu ini, pertimbangkan untuk menggunakan kaedah berikut:
Sebagai contoh, pencetus berikut akan mengemas kini lajur small_name berdasarkan nilai dalam lajur full_name:
CREATE TRIGGER `capital` BEFORE INSERT ON `brandnames` FOR EACH ROW BEGIN SET NEW.small_name = CONCAT(UCASE(LEFT(NEW.full_name,1)) , LCASE(SUBSTRING(NEW.full_name,2))) END
Atas ialah kandungan terperinci Mengapa MySQL Menyekat Pengubahsuaian Jadual dalam Fungsi dan Pencetus Tersimpan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!