cari

Rumah  >  Soal Jawab  >  teks badan

Tetapan MySql dan SQL sebelum pencetus kemas kini Kemas kini jadual/lajur berbeza tidak boleh mengemas kini jadual dalam fungsi/cetusan yang disimpan

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粉677684876P粉677684876497 hari yang lalu607

membalas semua(1)saya akan balas

  • P粉950128819

    P粉9501288192023-09-15 09:46:17

    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

    balas
    0
  • Batalbalas