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
501

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!