Rumah >pangkalan data >tutorial mysql >Bagaimana untuk menulis sql trigger

Bagaimana untuk menulis sql trigger

PHPz
PHPzasal
2024-02-21 11:03:041273semak imbas

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 SELEPAS kod> kata kunci menentukan pencetus Pencetus dilaksanakan sebelum atau selepas acara Kata kunci 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是触发器的名称,BEFOREAFTER关键字指定触发器在事件之前或之后执行,INSERTUPDATEDELETE关键字指定触发器关联的事件类型,table_name是触发器关联的表名。FOR EACH ROW指定触发器对每一行数据都执行,trigger_body是触发器需要执行的动作。

下面我们通过几个具体场景来展示如何编写SQL触发器。

场景一:在插入数据之前自动设置创建时间。

假设我们有一个名为users的表,其中包含idnamecreate_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

Di bawah ini kami menunjukkan cara menulis pencetus SQL melalui beberapa senario tertentu.

Senario 1: Tetapkan masa penciptaan secara automatik sebelum memasukkan data.

Katakan kita mempunyai jadual bernama 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!

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

Artikel berkaitan

Lihat lagi