Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencegah Sisipan atau Kemas Kini dengan Data Tidak Sah Menggunakan Pencetus dalam MySQL?

Bagaimana untuk Mencegah Sisipan atau Kemas Kini dengan Data Tidak Sah Menggunakan Pencetus dalam MySQL?

Susan Sarandon
Susan Sarandonasal
2024-11-21 21:42:12155semak imbas

How to Prevent Inserts or Updates with Invalid Data Using Triggers in MySQL?

Mencegah Sisipan atau Kemas Kini dengan Pencetus dalam MySQL

Apabila menangani kekangan semakan, MySQL kadangkala mengabaikannya. Ini menimbulkan persoalan tentang cara menggunakan pencetus dengan berkesan untuk mengawal sisipan dan kemas kini dalam kes sedemikian. Sebagai contoh, jadual bernama "foo" mempunyai atribut "agensi" yang hanya boleh menerima nilai antara 1 dan 5.

Pada mulanya, pencetus dicipta untuk menghalang nilai di luar julat ini daripada dimasukkan ke dalam jadual:

create trigger agency_check
before insert on foo
for each row
begin
    if (new.agency < 1 or new.agency > 5) then
        #Do nothing?
    end if;
end

Walau bagaimanapun, pencetus tidak secara eksplisit menghentikan sisipan atau kemas kini baris dengan nilai agensi yang tidak sah. Untuk melaksanakan gelagat sedemikian, pertimbangkan untuk menggunakan sintaks SIGNAL:

create trigger agency_check
before insert on foo
for each row
begin
    if (new.agency < 1 or new.agency > 5) then
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'your error message';
    end if
end

Pencetus yang diubah suai ini kini akan menimbulkan ralat dengan mesej yang ditentukan, memastikan sisipan atau kemas kini tidak berjaya apabila nilai agensi berada di luar julat yang telah ditetapkan. Pendekatan ini menyediakan kaedah yang lebih mantap untuk menguatkuasakan kekangan semakan dalam MySQL.

Atas ialah kandungan terperinci Bagaimana untuk Mencegah Sisipan atau Kemas Kini dengan Data Tidak Sah Menggunakan Pencetus dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn