Rumah >pangkalan data >tutorial mysql >Bagaimana untuk menulis sql trigger
SQL trigger ialah objek khas dalam sistem pengurusan pangkalan data yang secara automatik boleh melaksanakan tindakan yang ditentukan apabila peristiwa tertentu berlaku dalam pangkalan data. Pencetus boleh digunakan untuk mengendalikan pelbagai senario, seperti memasukkan, mengemas kini atau memadam data. Dalam artikel ini, kami akan memperkenalkan cara menulis pencetus SQL dan memberikan contoh kod khusus.
Sintaks asas pencetus SQL adalah seperti berikut:
CREATE TRIGGER trigger_name {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name [FOR EACH ROW] trigger_body
Di mana, trigger_name
ialah nama pencetus dan SEBELUM
atau INSERT
, KEMASKINI
dan DELETE
menentukan jenis acara yang berkaitan. dengan pencetus, table_name
code> ialah nama jadual yang dikaitkan dengan pencetus. FOR EACH ROW
menyatakan bahawa pencetus dilaksanakan untuk setiap baris data dan trigger_body
ialah tindakan yang perlu dilaksanakan oleh pencetus. trigger_name
是触发器的名称,BEFORE
或AFTER
关键字指定触发器在事件之前或之后执行,INSERT
,UPDATE
,DELETE
关键字指定触发器关联的事件类型,table_name
是触发器关联的表名。FOR EACH ROW
指定触发器对每一行数据都执行,trigger_body
是触发器需要执行的动作。
下面我们通过几个具体场景来展示如何编写SQL触发器。
场景一:在插入数据之前自动设置创建时间。
假设我们有一个名为users
的表,其中包含id
、name
和create_time
三列,我们希望在插入新用户之前自动设置create_time
为当前时间。
代码示例:
CREATE TRIGGER set_create_time BEFORE INSERT ON users FOR EACH ROW BEGIN SET NEW.create_time = NOW(); END;
场景二:在更新数据之后自动更新修改时间。
现在假设我们需要在更新用户信息之后自动更新update_time
列为最新的修改时间。
代码示例:
CREATE TRIGGER set_update_time AFTER UPDATE ON users FOR EACH ROW BEGIN SET NEW.update_time = NOW(); END;
场景三:在删除数据之前自动备份删除的数据。
在某些情况下,我们可能需要在删除数据之前自动将待删除的数据备份到另外一个表中。
假设我们有一个名为user_backup
的表,与users
表结构一致,我们希望在删除用户之前备份待删除的数据到user_backup
users
, yang mengandungi id
, name
dan create_time
> Tiga lajur, kami mahu menetapkan create_time
secara automatik kepada masa semasa sebelum memasukkan pengguna baharu. 🎜🎜Contoh kod: 🎜CREATE TRIGGER backup_user BEFORE DELETE ON users FOR EACH ROW BEGIN INSERT INTO user_backup (id, name, create_time) VALUES (OLD.id, OLD.name, OLD.create_time); END;🎜Senario 2: Kemas kini masa pengubahsuaian secara automatik selepas mengemas kini data. 🎜🎜Sekarang andaikan bahawa kita perlu mengemas kini lajur
update_time
kepada masa pengubahsuaian terkini selepas mengemas kini maklumat pengguna. 🎜🎜Contoh Kod: 🎜rrreee🎜Senario 3: Sandarkan data yang dipadamkan secara automatik sebelum memadamkannya. 🎜🎜Dalam sesetengah kes, kami mungkin perlu menyandarkan data secara automatik untuk dipadamkan ke jadual lain sebelum memadamkan data. 🎜🎜 Katakan kita mempunyai jadual bernama user_backup
, yang mempunyai struktur yang sama seperti jadual users
Kami ingin membuat sandaran data untuk dipadamkan ke user_backup dalam jadual. 🎜🎜Contoh Kod: 🎜rrreee🎜Di atas adalah contoh beberapa pencetus SQL biasa. Dalam aplikasi sebenar, pencetus yang lebih kompleks boleh ditulis mengikut keperluan. Walau bagaimanapun, perlu diingatkan bahawa terlalu banyak atau pencetus kompleks mungkin mempunyai kesan tertentu ke atas prestasi pangkalan data, jadi penilaian dan pertimbangan yang teliti diperlukan semasa mereka bentuk pencetus. 🎜
Atas ialah kandungan terperinci Bagaimana untuk menulis sql trigger. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!