Rumah  >  Artikel  >  pangkalan data  >  Mengapa Trigger MySQL Saya Gagal Mengemas kini Lajur PTS Selepas Perlaksanaan Manual Berjaya?

Mengapa Trigger MySQL Saya Gagal Mengemas kini Lajur PTS Selepas Perlaksanaan Manual Berjaya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-06 07:05:02749semak imbas

Why Is My MySQL Trigger Failing to Update the PTS Column After Manual Execution Succeeds?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn