Mysql 触发器(复习)

今天考虑一个删除记录回收站的时候,突然想到了触发器这个东西,基本上之前也很少使用。废话不不多说,先看它的解释:

在MySQL中,触发器(Trigger)是一种特殊的存储过程,它会在指定的事件(例如插入、更新或删除数据)发生时自动执行。

触发器通常用于实现复杂的业务逻辑,例如在插入新数据时自动更新相关的记录、在删除数据时执行一些额外的清理操作等等。

MySQL中的触发器有两种类型:行级触发器和语句级触发器。行级触发器会在每一行数据受到影响时执行,而语句级触发器则会在每一次SQL语句执行完毕后执行一次。

看一个示例你就明白了:

 

CREATE TRIGGER log_deleted_user_menu_records AFTER UPDATE ON user_menu FOR EACH ROW
BEGIN
       --第一次判断
	IF
		OLD.deletestatus = 'NOT_DELETED' 
		AND NEW.deletestatus = 'USER_DELETED' THEN
			INSERT INTO deleted_records ( table_name, record_id, deleted_at, deletestatus )
		VALUES
			( 'user_menu', OLD.id, NOW(), 'USER_DELETED' );
		-- 第二个判断
		ELSEIF OLD.deletestatus = 'USER_DELETED' 
		AND NEW.deletestatus = 'TRASH_DELETED' THEN
			UPDATE deleted_records 
			SET deleted_at = NOW(),
			deletestatus = 'TRASH_DELETED' 
			WHERE
				table_name = 'user_menu' 
				AND record_id = OLD.id;
                        -- 最后走的判断
			ELSE UPDATE deleted_records 
			SET deleted_at = NOW(),
			deletestatus = 'DELETED' 
			WHERE
				table_name = 'user_menu' 
				AND record_id = OLD.id;
			
		END IF;
		
	END;

log_deleted_user_menu_records 触发器名称

AFTER UPDATE ON user_menu FOR EACH ROW 是指在user_menu表每一行发生变化后执行,(当然还可以在之前执行)

OLD.deletestatus 指user_menu字段中变化之前的deletestatus 值

NEW.deletestatus 那对应就是新值啦

其他语句一看就知道了,

然后测试一下,先看下面的user_menu表中id=3的一条记录,

此时deleted_records中是没有的,

Mysql 触发器(复习)_第1张图片

Mysql 触发器(复习)_第2张图片

下面我要改变id=3它的deletestatus值 了;

UPDATE test_database.user_menu SET deletestatus = ‘USER_DELETED’ WHERE id = 3

Mysql 触发器(复习)_第3张图片

这个时候我们再来看记录表的数据;自动创建了一条记录,这就是触发器的作用;

Mysql 触发器(复习)_第4张图片

然后再给小伙伴们说一下,触发器的注意事项

下面是触发器的优缺点和如何适当使用它们的一些注意事项:

优点:

  1. 数据完整性保障:触发器可以强制执行业务规则和数据完整性约束,例如强制某些列不允许为空、禁止插入重复数据等。
  2. 自动化操作:触发器可以自动执行一些操作,例如在插入、更新或删除数据时,同时更新其他表或列的值。
  3. 提高数据库性能:触发器可以减少应用程序对数据库的请求,从而减少网络延迟和服务器负载。

缺点:

  1. 难以维护:在大型数据库中,触发器可能会变得非常复杂,难以理解和维护。
  2. 降低性能:触发器的执行可能会降低数据库性能,特别是在处理大量数据时。
  3. 安全问题:触发器可能会被黑客利用,从而危及数据库的安全。

适当使用触发器需要注意以下几点:

  1. 仅在必要时使用触发器:在设计数据库时,应该仅在必要时使用触发器,以避免过多的复杂性和性能问题。
  2. 保持简单:尽量保持触发器的逻辑简单和易于维护。
  3. 测试和调试:在生产环境中使用触发器之前,应该对其进行彻底的测试和调试,以确保其正确性和稳定性。
  4. 安全性:在使用触发器时应该考虑安全问题,例如使用适当的安全措施来防止黑客利用触发器对数据库进行攻击。

总之,使用触发器可以提高数据完整性、自动化操作和提高数据库性能,但也需要注意其维护和性能问题,以及安全问题。

 

你可能感兴趣的:(Mysql,数据库,sql)