Rumah  >  Artikel  >  pangkalan data  >  Apakah sintaks pencetus dalam Mysql

Apakah sintaks pencetus dalam Mysql

WBOY
WBOYke hadapan
2023-05-28 23:17:351936semak imbas

1. Definisi:

Atur cara yang dibenamkan dalam MySQL termasuk pencetus dan prosedur tersimpan, yang kedua-duanya mempunyai persamaan. Pencetus ialah tindakan yang dicetuskan oleh peristiwa. Apabila pangkalan data melaksanakan peristiwa ini, pencetus diaktifkan untuk melakukan tindakan yang sepadan. Dalam MySQL, syarat pencetus termasuk operasi UPDATE, INSERT dan DELETE.

  • Dalam MySQL, pada masa ini hanya UPDATE, INSERT dan DELETE sahaja akan mencetuskan pencetus dan operasi lain tidak menyokong pencetus. Ini sangat berbeza daripada pencetus dalam Oracle, jadi perhatikan perbezaannya.

  • Hanya satu pencetus dibenarkan untuk setiap peristiwa dalam setiap jadual pencetus. Oleh itu, maksimum 6 pencetus dibenarkan bagi setiap nilai jadual. Jika jadual perlu mencetuskan dua peristiwa, INSERT dan DELETE, anda perlu mencipta dua pencetus masing-masing.

  • Hanya jadual yang menyokong pencetus, paparan dan jadual sementara tidak.

2 Sintaks:

CREATE TRIGGER TRIGGER_NAME
BEFORE/AFTER 
UPDATE/INSERT/DELETE ON TABLE_NAME 
FOR EACH ROW
#触发器主体
[BEGIN]
SQL操作
[END];
  • Mencipta pencetus: Ia sama seperti mencipta prosedur tersimpan, menggunakan pernyataan CREATE, tetapi jadi berhati-hati, tiada ATAU GANTI di sini.

  • TRIGGER_NAME: Nama pencetus. Dalam MySQL, adalah perlu untuk memastikan bahawa pencetus dalam setiap jadual adalah unik, dan pencetus dalam setiap pangkalan data mungkin tidak unik Ini bermakna dua jadual dalam pangkalan data boleh mempunyai pencetus yang sama. Tingkah laku ini tidak dibenarkan dalam pangkalan data lain. Untuk mengekalkan ketekalan pemformatan, TRIGGER_NAME hendaklah seunik mungkin.

  • SEBELUM/SELEPAS: Saat picu dilepaskan. Jika anda mahu pencetus dilaksanakan sebelum peristiwa berlaku, anda boleh menggunakan "SEBELUM".

  • Operasi: KEMASKINI/INSERT/DELETE, yang akan mencetuskan peristiwa dan syarat yang sepadan. MySQL hanya membenarkan ketiga-tiga operasi DDL ini menyokong pencetus, dan operasi lain tidak disokong.

  • UNTUK SETIAP BARIS: Setiap baris yang terjejas oleh peristiwa pencetus mesti mengaktifkan tindakan pencetus. Dalam MySQL, row triggering bermakna FOE EACH ROW tidak boleh ditinggalkan dan statement triggering tidak disokong.

  • Isi pencetus: Ia boleh sama ada satu pernyataan SQL atau blok struktur kompleks yang terdiri daripada BEGIN...END.

# 创建一个触发器T1,在对表customer做插入操作时,就会触发T1,之后会在日志表note中插入一条数据
CREATE TRIGGER T1
AFTER 
INSERT ON customer
FOR EACH ROW # 触发器主体
INSERT INTO note(日期,目标,操作) VALUES(NOW(),'customer','insert');

3. Memadamkan pencetus

Sama seperti memadamkan jadual dan prosedur tersimpan, pernyataan DROP digunakan untuk memadamkan pencetus.

#删除触发器T1
DROP TRIGGER IF EXISTS T1;

Pencetus tidak boleh dikemas kini dan diubah suai Jika anda ingin mengubah suai kandungan pencetus, anda hanya boleh memadamkan pencetus dahulu dan kemudian mencipta pencetus baharu.

4. Pencetus pertanyaan

#在已知数据库内,查询触发器
SHOW TRIGGERS;
SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_NAME = '触发器名'
#查询所有的触发器
SELECT * FROM information_schema.TRIGGERS(WHERE TRIGGER_SCHEMA = '数据库名')

5. Penggunaan jenis pencetus LAMA dan BARU

Pencetus dicetuskan sebelum atau selepas operasi DDL, dan akan sentiasa dilakukan pada jadual sasaran . Apabila perubahan tertentu dibuat, kadangkala kita perlu mengetahui nilai sebelum dan selepas jadual sasaran diubah, yang memerlukan penggunaan LAMA dan BARU.

Seperti namanya, LAMA ialah nilai sebelum perubahan, iaitu nilai sebelum KEMASKINI atau yang akan DELETE atau telah DELETE.

Dan BARU ialah nilai baru selepas UPDATE iaitu nilai yang hendak di INSERT atau telah di INSERT.

Apakah sintaks pencetus dalam Mysql

Contoh khusus:

#创建customer表
CREATE TABLE `customer` 
(`CUST_ID` int(11) NOT NULL AUTO_INCREMENT,
`CUST_NAME` varchar(10) NOT NULL,
`CUST_TEL` varchar(10) DEFAULT NULL,
PRIMARY KEY (`CUST_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

#向表中插入数据

#创建一个update触发器
CREATE TRIGGER T2
AFTER 
UPDATE ON customer
FOR EACH ROW 
#old和new的使用方法:old.columnname/new.columnname(列名)
#将更新前后的值,赋值给两个变量
SELECT OLD.CUST_ID,NEW.CUST_ID INTO @OLD_ID,@NEW_ID;

#触发触发器T2
UPDATE customer SET CUST_ID = '10000' WHERE CUST_NAME = 'AAA';

#查询OLD和NEW
SELECT @OLD_ID,@NEW_ID;

Atas ialah kandungan terperinci Apakah sintaks pencetus dalam Mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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