Maaf untuk bertanya soalan ini sekali lagi kerana terdapat banyak perkara di forum tentang isu ini. Tapi saya harap masalah saya lain dari yang lain. Maaf atas bahasa Inggeris saya yang teruk.
Mula-mula saya ada 2 meja (meja ibu bapa dan meja anak) Ibu bapa (lokasi)
loc_id | saiz_loc |
---|---|
1 | 100 |
2 | 75 |
Kanak-kanak (Kawasan)
ar_id | ar_loc_id | saiz_ar |
---|---|---|
1 | 2 | 35 |
2 | 2 | 40 |
Ini adalah pencetus pasca padam saya.
CREATE TRIGGER after_delete_area_location AFTER DELETE ON area FOR EACH ROW BEGIN UPDATE location SET loc_size = loc_size + old.ar_size WHERE loc_id=old.ar_loc_id END;
Sebagai contoh, jika saya ingin memadam ar_id = '2', maka ar_size akan dikemas kini dalam position loc_size.
Memandangkan nilai loc_size ialah "0", nilainya ialah 40 selepas pencetus dijalankan.
Masalahnya ialah pencetus tidak berjalan dengan betul, selepas pencetus berjalan loc_size tidak dikemas kini sama sekali, hanya nilai "0".
Adakah saya terlepas sesuatu atau sesuatu sedang berlaku kerana ia tidak berfungsi.
Tolong bantu saya selesaikan masalah ini. Terima kasih banyak - banyak.
Saya tidak nampak salah dengan pencetus anda. Saya telah mengujinya dan ia berfungsi. Untuk melengkapkannya, saya menambah picu sisipan di atas meja
区域
.Seperti yang anda lihat, dalam kedua-dua operasi sisip dan padam, nilai dikemas kini dengan sewajarnya.
-- Dikemas kini dari sini --
Ini ialah pernyataan pencetus
after_insert_area_location
的增强版本,我将在其中演示新添加的 IF 语句以保持数据完整性。请注意,SIGNAL
yang digunakan untuk menimbulkan ralat yang bertindak sebagai mesej amaran dan menamatkan operasi.Seperti yang anda lihat, pencetus
IF
语句中的SIGNAL
语句引发了一个错误,其中包含 SQL_STATE 代码77777
dan mesej: dipratetap. Ini akan membuat asal perubahan yang dibuat sejak baris baharu dimasukkan.Ringkasnya, kita boleh menggunakan pernyataan IF dalam pencetus untuk mempunyai sedikit kawalan ke atas aliran data. Pernyataan SIGNAL boleh digunakan untuk sengaja memanggil ralat untuk menghentikan/membuat asal pelaksanaan pencetus dan memulakan tindakan pencetus. Seperti yang dinyatakan di atas, bukan sahaja pernyataan
UPDATE
没有执行,引发触发器的insert
dalam pencetus juga dibuat asal.