SQL触发器语句实例,轻松掌握INSERTUPDATE-DELETE


当涉及到数据库操作时,触发器(Trigger)是一种非常有用的工具,它可以在特定的事件(如INSERT、UPDATE或DELETE)发生时自动执行一段代码。这可以用于确保数据的完整性、自动更新其他表或执行其他复杂的操作。

1. INSERT触发器

假设我们有两个表:`orders`和`audit_log`。每当在`orders`表中插入新的订单时,我们想要将插入的详细信息记录到`audit_log`表中。

sql

DELIMITER //

CREATE TRIGGER after_order_insert

AFTER INSERT ON orders

FOR EACH ROW

BEGIN

INSERT INTO audit_log (action, table_name, record_id, old_data, new_data)

VALUES ('INSERT', 'orders', NEW.order_id, NULL, CONCAT('Order ID: ', NEW.order_id, ', Product: ', NEW.product, ', Amount: ', NEW.amount));

END;

//

DELIMITER ;

在这个例子中,我们创建了一个名为`after_order_insert`的触发器,它在`orders`表上的`INSERT`操作之后触发。它使用`NEW`关键字来引用新插入的行,并将相关信息插入到`audit_log`表中。

2. UPDATE触发器

假设我们想要`orders`表中订单的更改。每当更新`orders`表中的订单时,我们想要将更改的详细信息记录到`audit_log`表中。

sql

DELIMITER //

CREATE TRIGGER after_order_update

AFTER UPDATE ON orders

FOR EACH ROW

BEGIN

INSERT INTO audit_log (action, table_name, record_id, old_data, new_data)

VALUES ('UPDATE', 'orders', OLD.order_id, CONCAT('Order ID: ', OLD.order_id, ', Product: ', OLD.product, ', Amount: ', OLD.amount), CONCAT('Order ID: ', NEW.order_id, ', Product: ', NEW.product, ', Amount: ', NEW.amount));

END;

//

DELIMITER ;

在这个例子中,我们创建了一个名为`after_order_update`的触发器,它在`orders`表上的`UPDATE`操作之后触发。它使用`OLD`和`NEW`关键字来引用更新前后的行,并将相关信息插入到`audit_log`表中。

3. DELETE触发器

假设我们想要`orders`表中删除的订单。每当从`orders`表中删除订单时,我们想要将删除的详细信息记录到`audit_log`表中。

sql

DELIMITER //

CREATE TRIGGER after_order_delete

AFTER DELETE ON orders

FOR EACH ROW

BEGIN

INSERT INTO audit_log (action, table_name, record_id, old_data, new_data)

VALUES ('DELETE', 'orders', OLD.order_id, CONCAT('Order ID: ', OLD.order_id, ', Product: ', OLD.product, ', Amount: ', OLD.amount), NULL);

END;

//

DELIMITER ;

在这个例子中,我们创建了一个名为`after_order_delete`的触发器,它在`orders`表上的`DELETE`操作之后触发。它使用`OLD`关键字来引用被删除的行,并将相关信息插入到`audit_log`表中。

这些示例应该能帮助您理解如何在SQL中使用触发器。请注意,这些示例是基于MySQL的语法,如果您使用的是其他数据库系统(如SQL Server、Oracle等),语法可能会有所不同。

希望这些示例对您有所帮助!如果您有任何其他问题或需要进一步的帮助,请随时提问。