Menyelesaikan masalah Pencetus MySQL Tidak Berfungsi untuk Mengemas kini PTS pada Statistik Permainan
Pertimbangkan isu ini: walaupun pelaksanaan pertanyaan secara manual berjaya, pencetus yang bertujuan untuk mengemas kini lajur PTS secara automatik berdasarkan nilai playing_games yang diubah tidak berfungsi. Sintaks pencetus adalah mudah:
<code class="sql">CREATE TRIGGER `upd_PTS` AFTER UPDATE ON `pos_table` FOR EACH ROW BEGIN IF (NEW.played_games <> OLD.played_games) THEN update pos_table set PTS=((NEW.won_games*2)+(NEW.tie_games*1)); END IF; END</code>
Walau bagaimanapun, penyiasatan lanjut mendedahkan ralat apabila cuba mengubah suai playing_games secara manual: "Tidak dapat mengemas kini jadual pos_table dalam fungsi tersimpan/pencetus kerana ia telah digunakan oleh pernyataan yang menggunakan ini fungsi/pencetus disimpan."
Penjelasan:
Ralat ini berpunca daripada kekangan yang dikenakan oleh fungsi dan pencetus yang disimpan. Mereka dilarang mengubah jadual yang telah dibaca atau ditulis oleh pernyataan pemanggilan.
Penyelesaian:
Untuk pencetus yang dicetuskan pada operasi sisipan, jika anda berhasrat untuk mengubah suai nilai yang dimasukkan, gunakan pencetus SEBELUM INSERT dan laraskan nilai BAHARU.
Selain itu, pernyataan kemas kini yang ditulis dalam pencetus:
<code class="sql">update pos_table set PTS=((NEW.won_games*2)+(NEW.tie_games*1));</code>
adalah cacat. Ia mengemas kini keseluruhan jadual dan bukannya satu baris. Untuk senario ini, adalah lebih cekap untuk mengira PTS pada masa paparan dan bukannya mempunyai lajur khusus. Ini menghapuskan keperluan untuk pencetus dan mengatasi isu berkaitan pencetus.
Atas ialah kandungan terperinci Mengapa Trigger MySQL Saya Gagal Mengemas kini Lajur PTS Selepas Perlaksanaan Manual Berjaya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!