Tetapan MySql dan SQL sebelum pencetus kemas kini Kemas kini jadual/lajur berbeza tidak boleh mengemas kini jadual dalam fungsi/cetusan yang disimpan
P粉677684876
P粉677684876 2023-09-14 21:54:36
0
1
523

Saya mempunyai jadual gabungan dengan 2 jadual (A dan C) dengan hubungan n:m. Jadual gabungan (B) juga mengandungi beberapa maklumat.

A ----- B ------ C

Dalam jadual A, saya mempunyai lajur apabila_diubah suai yang saya sentiasa mahu sentiasa dikemas kini jika ada perubahan. Ini harus termasuk perubahan pada Jadual B.

Jadi saya mempunyai pencetus prakemas kini pada jadual B dengan pertanyaan berikut

UPDATE A SET when_modified = NOW() WHERE id = NEW.id;

Masalahnya ialah, jika saya kini melaksanakan pertanyaan kemas kini (sertai pada B), saya mendapat ralat berikut

Tidak boleh mengemas kini jadual 'A' dalam fungsi/pencetus yang disimpan kerana ia sudah digunakan oleh pernyataan yang memanggil fungsi/pencetus tersimpan ini.

Update B vv JOIN A v on vv.id = v.id SET vv.block = 1 WHERE v.status = 'finished'

P粉677684876
P粉677684876

membalas semua(1)
P粉950128819

Anda perlu menulis semula kenyataan KEMASKINI.

Anda tidak boleh mengemas kini dalam pencetus atau ini mungkin berlaku. Gelung tak terhingga

Tetapi perubahan mudah akan memberi kesan yang sama

CREATE TABLE A (id int, status  varchar(10), when_modified  datetime)
INSERT INTO A VALUES (1,'finished',now())
CREATE TABLE B (id int, block int)
INSERT INTO B VALUES(1,0)
Update B vv JOIN A  v on vv.id = v.id SET vv.block = 1, v.when_modified = NOW()  WHERE v.status = 'finished'
SELECT * FROM A
id Status apabila_diubahsuai
1 Lengkap 2023-05-15 20:31:15
SELECT * FROM B
id Sekat
1 1

Violin

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!