mysql触发器new old用法详解

MySQL触发器new old用法详解:在MySQL中,触发器可以在表上定义,当对表执行插入、更新或删除操作时自动执行。new和old关键字用于引用触发事件前后的数据。

MySQL触发器是一种特殊的存储过程,它会在指定的事件(如插入、更新或删除)发生时自动执行,触发器可以用于实现数据完整性约束、审计日志记录等功能。

创建触发器的语法如下:

mysql触发器new old用法详解

CREATE TRIGGER trigger_name
trigger_time trigger_event
ON table_name FOR EACH ROW
trigger_body;

trigger_name:触发器的名称;

trigger_time:触发器的触发时间,可以是BEFORE或AFTER;

trigger_event:触发器的事件,可以是INSERT、UPDATE或DELETE;

table_name:触发器所在的表名;

mysql触发器new old用法详解

trigger_body:触发器的具体操作,可以使用SQL语句。

以下是一些常见的触发器示例:

1、在插入数据前检查数据完整性:

DELIMITER //
CREATE TRIGGER check_before_insert
BEFORE INSERT ON users FOR EACH ROW
BEGIN
  IF NEW.age < 0 THEN
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '年龄不能为负数';
  END IF;
END;
//
DELIMITER ;

2、在更新数据后记录日志:

mysql触发器new old用法详解

DELIMITER //
CREATE TRIGGER log_after_update
AFTER UPDATE ON users FOR EACH ROW
BEGIN
  INSERT INTO user_log (user_id, action, updated_at) VALUES (OLD.id, 'UPDATE', NOW());
END;
//
DELIMITER ;

3、在删除数据前检查是否被引用:

DELIMITER //
CREATE TRIGGER check_before_delete
BEFORE DELETE ON orders FOR EACH ROW
BEGIN
  DECLARE ref_count INT;
  SELECT COUNT(*) INTO ref_count FROM order_items WHERE order_id = OLD.id;
  IF ref_count > 0 THEN
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '订单已被引用,无法删除';
  END IF;
END;
//
DELIMITER ;

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/637238.html

(0)
未希的头像未希新媒体运营
上一篇 2024-05-20 19:09
下一篇 2024-05-20 19:12

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入