Rumah > Artikel > pangkalan data > Mengapa Trigger MySQL saya tidak berfungsi: Adakah Ralat Sintaks atau Sekatan Fungsi/Pencetus Tersimpan?
Menghadapi pencetus MySQL yang tidak bertindak balas boleh mengecewakan, terutamanya apabila pertanyaan berfungsi dengan sempurna apabila dilaksanakan secara manual. Dalam senario sedemikian, isu selalunya terletak dalam sintaks pencetus atau pengehadan yang dikenakan oleh fungsi dan pencetus yang disimpan.
Sintaks pencetus yang disediakan kelihatan mudah dan mengikut corak yang dijangkakan. Walau bagaimanapun, adalah penting untuk menyemak semula peletakan kurungan dan koma bernoktah, memastikan ia diletakkan dengan betul dan tidak menyebabkan sebarang ralat sintaksis.
Salah satu sekatan utama untuk sedar apabila menggunakan fungsi tersimpan dan pencetus adalah ketidakupayaan mereka untuk mengubah suai jadual yang sedang digunakan oleh pernyataan pemanggilan. Sekatan ini digariskan dengan jelas dalam dokumentasi:
<code class="text">"A stored function or trigger cannot modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger."</code>
Dalam pencetus yang disediakan, set pos_table kemas kini penyata PTS=((NEW.won_games*2) (NEW.tie_games*1)); cuba mengemas kini jadual yang sama (pos_table) yang sedang diubah suai oleh pencetus (kerana ia dicetuskan pada UPDATE pada pos_table). Pelanggaran sekatan yang disebutkan di atas mengakibatkan ralat yang dihadapi semasa mengedit lajur playing_games secara manual.
Untuk memintas had yang dikenakan oleh sekatan fungsi/cetusan tersimpan, adalah disyorkan untuk mempertimbangkan untuk menggunakan jenis pencetus yang berbeza, seperti SEBELUM INSERT, jika anda berhasrat untuk mengubah suai nilai semasa memasukkan. Walau bagaimanapun, dalam kes ini, pengiraan PTS boleh dilakukan secara langsung apabila memaparkan nilai, menghapuskan keperluan untuk pencetus atau fungsi yang disimpan. Pendekatan ini memudahkan kod dan mengelakkan kemungkinan konflik dengan sekatan fungsi/cetusan yang disimpan.
Atas ialah kandungan terperinci Mengapa Trigger MySQL saya tidak berfungsi: Adakah Ralat Sintaks atau Sekatan Fungsi/Pencetus Tersimpan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!