


Mengapa Saya Tidak Boleh Mengemas kini Jadual Di Dalam Pencetus Yang Mengubah Suai Jadual Yang Sama dalam MySQL?
Nov 08, 2024 pm 10:52 PMPencetus Penyelesaian Masalah: Ketidakserasian dengan Pengubahsuaian Jadual
Dalam MySQL, pencetus ialah alat berkuasa yang digunakan untuk mengautomasikan tindakan pangkalan data berdasarkan peristiwa tertentu. Walau bagaimanapun, apabila pencetus menghadapi masalah dalam pelaksanaan, penyelesaian masalah adalah penting. Artikel ini menangani ralat biasa yang dihadapi apabila pencetus MySQL gagal berfungsi.
Penerangan Isu:
Seorang pengguna melaporkan bahawa pencetus mereka tidak mengemas kini lajur tertentu (PTS ) apabila lajur playing_games yang sepadan dalam pos_table berubah. Walaupun pertanyaan berfungsi secara manual, pencetus gagal mencetuskan kemas kini.
Struktur Pencetus:
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
Ralat Ditemui:
Apabila cuba mengedit lajur playing_games secara manual, pengguna menerima ralat yang menyatakan: "Tidak dapat mengemas kini jadual pos_table dalam fungsi/pencetus tersimpan kerana ia telah digunakan oleh pernyataan yang menggunakan fungsi/pencetus tersimpan ini".
Penyelesaian:
Isu berpunca daripada fakta bahawa pencetus cuba mengubah suai jadual yang sama (pos_table) yang dirujuk dalam peristiwa pencetus (kemas kini bermain_permainan). Seperti yang didokumenkan dalam Sekatan Program Tersimpan MySQL, fungsi atau pencetus yang disimpan tidak boleh mengubah suai jadual yang telah digunakan oleh penyataan pemanggilan.
Penyelesaian Alternatif:
Untuk mengelakkan isu ini, adalah disyorkan untuk menggunakan pencetus SEBELUM INSERT. Dalam kes ini, pencetus boleh diubah suai seperti berikut:
CREATE TRIGGER `upd_PTS` BEFORE INSERT ON `pos_table` FOR EACH ROW BEGIN SET NEW.PTS = ((NEW.won_games*2)+(NEW.tie_games*1)); END
Pertimbangan Tambahan:
Selain ralat yang dihadapi, artikel itu juga menyerlahkan isu dengan menyimpan lajur yang dikira seperti PTS. Memandangkan ia boleh dikira dengan mudah daripada lajur lain semasa paparan, lajur mungkin lebih cekap dan kurang terdedah kepada ralat untuk mengelak daripada menyimpannya sebagai lajur berasingan.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Mengemas kini Jadual Di Dalam Pencetus Yang Mengubah Suai Jadual Yang Sama dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Kurangkan penggunaan memori MySQL di Docker

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table?

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama

Apa itu SQLite? Gambaran Keseluruhan Komprehensif

Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin)

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah

Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)?

Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL?
