Rumah >pangkalan data >tutorial mysql >MySQL menerangkan penggunaan pencetus dalam istilah yang mudah dan ringkas

MySQL menerangkan penggunaan pencetus dalam istilah yang mudah dan ringkas

WBOY
WBOYke hadapan
2022-09-01 14:41:312092semak imbas

Pembelajaran yang disyorkan: tutorial video mysql

Dalam pembangunan sebenar, kita sering menghadapi situasi ini: terdapat 2 Atau berbilang jadual yang saling berkaitan , seperti maklumat produk dan maklumat inventori masing-masing disimpan dalam dua jadual data yang berbeza Apabila kami menambah rekod produk baharu, untuk memastikan integriti data, kami juga mesti menambah rekod produk baharu pada jadual inventori . Dengan cara ini, kita mesti menulis dua langkah operasi yang berkaitan ini ke dalam program dan membungkusnya dengan transaksi untuk memastikan kedua-dua operasi ini menjadi operasi atom, sama ada kesemuanya dilaksanakan atau tiada satu pun daripadanya dilaksanakan.

Jika anda menghadapi keadaan istimewa, anda mungkin perlu menyelenggara data secara manual, supaya mudah untuk melupakan satu langkah, mengakibatkan kehilangan data. Pada masa ini, kita boleh menggunakan pencetus. Anda boleh mencipta pencetus supaya pemasukan data maklumat produk secara automatik mencetuskan pemasukan data inventori. Dengan cara ini, anda tidak perlu risau tentang kehilangan data kerana terlupa menambah data inventori.

Gambaran keseluruhan pencetus

MySQL menyokong pencetus bermula dari versi 5. 0. 2. Pencetus MySQL, seperti prosedur tersimpan, adalah program yang dibenamkan dalam pelayan MySQL. Pencetus ialah operasi yang dicetuskan oleh peristiwa, termasuk acara INSERT, UPDATE dan DELETE.

Acara yang dipanggil merujuk kepada tindakan pengguna atau mencetuskan tingkah laku tertentu. Jika program pencetus ditakrifkan, apabila pangkalan data melaksanakan pernyataan ini, ia bersamaan dengan peristiwa yang berlaku dan pencetus akan dicetuskan secara automatik untuk melaksanakan operasi yang sepadan. Apabila operasi memasukkan, mengemas kini dan memadam dilakukan pada data dalam jadual data dan beberapa logik pangkalan data perlu dilaksanakan secara automatik, pencetus boleh digunakan untuk mencapainya.

Penciptaan pencetus

Sintaks pencetus penciptaan

CREATE TRIGGER 触发器名称 
{BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名 
FOR EACH ROW 
触发器执行的语句块;

Penerangan:

Nama jadual: Menunjukkan objek yang dipantau oleh pencetus.

SEBELUM |. SEBELUM bermaksud pencetus sebelum acara; SELEPAS bermaksud pencetus selepas peristiwa.

MASUKKAN |. KEMASKINI |.

INSERT bermaksud mencetuskan apabila rekod dimasukkan;

KEMASKINI bermaksud mencetuskan apabila rekod dikemas kini

DELETE bermaksud mencetuskan apabila rekod dipadamkan.

Contoh kod 1

Buat dua jadual

CREATE TABLE test_trigge r (
id INT PRIMARY KEY AUTO_INCREMENT ,
t_note VARCHAR ( 30 )
) ;
CREATE TABLE test_trigger_log (
id INT PRIMARY KEY AUTO_INCREMENT ,
t_log VARCHAR ( 30 )
) ;

Buat pencetus

DELIMITER / /
CREATE TRIGGER befo_re_insert
BEFORE INSERT ON test_trigger 
FOR EACH ROW
BEGIN
 INSERT INTO test_trigger_log ( t_log )
 VALUES ( ' befo re_inse rt ' ) ;
END / /
DELIMITER ;

Masukkan data ke dalam jadual data test_trigger

INSERT INTO test_trigger (t_note) VALUES ('测试 BEFORE INSERT 触发器');

Lihat data dalam jadual data test_trigger_log

SELECT * FROM test_trigger_log

Contoh kod 2

Buat Trigger

DELIMITER / /
CREATE TRIGGER after_insert
AFTER INSERT ON test_trigger
FOR EACH ROW
BEGIN
 INSERT INTO test_trigger_log ( t_log )
 VALUES ( ' after_insert ' ) ;
END / /
DELIMITER ;

memasukkan data ke dalam jadual data test_trigger.

INSERT INTO test_trigger (t_note) VALUES ('测试 AFTER INSERT 触发器');

Lihat data dalam jadual data test_trigger_log

SELECT * FROM test_trigger_log

Contoh kod 3

Tentukan pencetus "salary_check_trigger" , Berdasarkan peristiwa INSERT jadual pekerja "pekerja", sebelum INSERT, semak sama ada gaji pekerja baru yang akan ditambah lebih besar daripada gaji ketuanya Jika lebih besar daripada gaji ketua, satu kesilapan daripada sqlstate_value menjadi 'HY000' akan dilaporkan, menyebabkan penambahan gagal.

DELIMITER //
CREATE TRIGGER salary_check_trigger
BEFORE INSERT ON employees FOR EACH ROW
BEGIN
DECLARE mgrsalary DOUBLE;
SELECT salary INTO mgrsalary FROM employees WHERE employee_id = NEW.manager_id;
IF NEW.salary > mgrsalary THEN
SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = '薪资高于领导薪资错误';
END IF;
END //
DELIMITER ;

Kata kunci BAHARU dalam proses pengisytiharan pencetus di atas mewakili rekod baharu pernyataan INSERT.

Lihat pencetus pemadaman

Kaedah 1: Lihat definisi semua pencetus dalam pangkalan data semasa

SHOW TRIGGERS

Kaedah 2: Lihat definisi pencetus dalam pangkalan data semasa Kaedah

SHOW CREATE TRIGGER 触发器名

Kaedah 3: Soal maklumat pencetus "pemeriksa_gaji" daripada jadual TRIGERS sistem maklumat_schema perpustakaan.

SELECT * FROM information_schema.TRIGGERS;

Padamkan pencetus

DROP TRIGGER IF EXISTS 触发器名称

Kelebihan pencetus

1.

Andaikan kita menggunakan jadual pengepala pesanan pembelian (demo.importhead) untuk menyimpan maklumat keseluruhan pesanan pembelian, termasuk nombor pesanan pembelian, nombor pembekal, nombor gudang, jumlah kuantiti pembelian, jumlah pembelian dan penerimaan tarikh.

Gunakan jadual butiran pesanan pembelian (demo.importdetails) untuk menyimpan butiran barangan yang dibeli, termasuk nombor pesanan pembelian, nombor produk dan kuantiti pembelian

Kuantiti, harga belian dan jumlah pembelian tidak sama dengan jumlah kuantiti dan jumlah amaun dalam butiran pesanan pembelian Ini adalah ketidakkonsistenan data.

Untuk menyelesaikan masalah ini, kami boleh menggunakan pencetus untuk menetapkan bahawa apabila terdapat pemasukan data, pengubahsuaian dan pemadaman dalam jadual butiran pesanan pembelian

, operasi 2 langkah akan secara automatik dicetuskan:

1) Kira semula jumlah kuantiti dan jumlah amaun dalam jadual butiran pesanan pembelian

2) Gunakan nilai yang dikira dalam langkah pertama untuk mengemas kini jumlah kuantiti dan jumlah amaun dalam meja pesanan pembelian.

Dengan cara ini, jumlah kuantiti dan jumlah amaun dalam jadual pengepala pesanan pembelian akan sentiasa sama dengan jumlah kuantiti dan

jumlah amaun yang dikira dalam jadual butiran pesanan belian adalah konsisten dan tidak bercanggah antara satu sama lain.

2. Pencetus boleh membantu kami merekodkan log operasi.

Menggunakan pencetus, anda boleh merakam secara khusus perkara yang berlaku pada masa. Contohnya, merekodkan pencetus untuk mengubah suai amaun nilai simpanan ahli ialah contoh yang sangat

. Ini sangat membantu kami memulihkan senario tertentu apabila operasi dilakukan dan mencari punca masalah dengan lebih baik.

3. Pencetus juga boleh digunakan untuk menyemak kesahihan data sebelum mengendalikannya.

Contohnya, apabila pasar raya membeli barang, pengurus gudang perlu memasukkan harga belian. Walau bagaimanapun, adalah mudah untuk melakukan kesilapan dalam operasi manusia Contohnya, apabila memasukkan kuantiti

, anda mengimbas kod bar apabila memasukkan jumlah, anda membaca nombor siri dan harga yang dimasukkan jauh melebihi harga jualan , mengakibatkan Kerugian yang besar...

Ini boleh digunakan untuk menyemak data yang sepadan melalui pencetus sebelum operasi sisipan atau kemas kini sebenar, ralat segera dalam masa dan mengelakkan

data yang salah Masukkan sistem tersebut.

Kelemahan pencetus

1. Salah satu masalah pencetus terbesar ialah kebolehbacaan yang lemah.

Oleh kerana pencetus disimpan dalam pangkalan data dan didorong oleh peristiwa, ini bermakna pencetus mungkin tidak dikawal oleh lapisan aplikasi. Ini sangat mencabar untuk penyelenggaraan sistem.

Sebagai contoh, buat pencetus untuk mengubah suai operasi caj semula ahli. Jika terdapat masalah dengan operasi dalam pencetus, kemas kini jumlah nilai simpanan ahli akan gagal. Saya menggunakan kod berikut untuk menunjukkan

Hasilnya menunjukkan bahawa sistem menggesa ralat dan medan "aa" tidak wujud.

Ini kerana operasi pemasukan data dalam pencetus mempunyai medan tambahan dan sistem menggesa ralat. Walau bagaimanapun, jika anda tidak memahami pencetus ini, anda mungkin berfikir bahawa terdapat masalah dengan kenyataan kemas kini itu sendiri, atau terdapat masalah dengan struktur jadual maklumat ahli. Mungkin anda juga akan menambah medan yang dipanggil "aa" pada jadual maklumat ahli untuk cuba menyelesaikan masalah ini, tetapi hasilnya akan sia-sia.

2. Perubahan dalam data berkaitan boleh menyebabkan ralat pencetus.

Terutamanya perubahan dalam struktur jadual data boleh menyebabkan ralat pencetus, sekali gus menjejaskan operasi normal operasi data. Ini akan menjejaskan kecekapan menyelesaikan masalah punca ralat dalam aplikasi disebabkan oleh penyembunyian pencetus itu sendiri.

Nota

Perhatikan bahawa jika kekangan kunci asing ditakrifkan dalam jadual anak, dan kunci asing menentukan klausa ON UPDATE/DELETE CASCADE/SET NULL, mengubah suai jadual induk akan dirujuk . Apabila nilai kunci atau baris rekod yang dirujuk oleh jadual induk dipadamkan, ia juga akan menyebabkan pengubahsuaian dan operasi pemadaman jadual anak Pada masa ini, pencetus yang ditakrifkan berdasarkan kenyataan KEMASKINI dan PADAM jadual anak diaktifkan.

Contohnya: pernyataan DELETE berdasarkan jadual pekerja jadual anak (t_employee) mentakrifkan pencetus t1, dan medan nombor jabatan (did) jadual anak mentakrifkan kekangan kunci asing yang merujuk kepada jabatan jadual induk jadual (t_department) Lajur kunci utama ialah nombor jabatan (did), dan kunci asing mempunyai klausa "ONDELETE SET NULL" Kemudian jika jadual jabatan jadual induk (t_department) dipadamkan pada masa ini, pekerja meja anak jadual (t_employee)

Pembelajaran yang disyorkan :tutorial video mysql

Atas ialah kandungan terperinci MySQL menerangkan penggunaan pencetus dalam istilah yang mudah dan ringkas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:jb51.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam