我是靠谱客的博主 外向早晨,最近开发中收集的这篇文章主要介绍触发器的使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在这里插入图片描述
优点:1、触发器可以确保数据的完整性。
2、触发器可以帮助我们记录操作日志。
3、触发器还可以用在操作数据前,对数据进行合法性检查。

缺点:1、触发器最大的一个问题就是可读性差。
2、相关数据的变更,可能会导致触发器出错。

在这里插入图片描述

#触发器

#准备工作
CREATE DATABASE dbtest17;
USE dbtest17;

#创建触发器
#建表
CREATE TABLE test_trigger(
id INT PRIMARY KEY AUTO_INCREMENT,
t_note VARCHAR(30)
);

CREATE TABLE test_trigger_log(
id INT PRIMARY KEY AUTO_INCREMENT,
t_log VARCHAR(30)
);

#查看表数据
SELECT * FROM test_trigger;
SELECT * FROM test_trigger_log;

#创建触发器
DELIMITER //

CREATE TRIGGER before_insert_test_tri
BEFORE INSERT ON test_trigger
FOR EACH ROW
BEGIN
			INSERT INTO test_trigger_log(t_log)
			VALUES('before insert...');
END //

DELIMITER ;

#测试
INSERT INTO test_trigger(t_note)
VALUES('Tom...');

SELECT * FROM test_trigger;
SELECT * FROM test_trigger_log;

#举例
DELIMITER $

CREATE TRIGGER after_insert_test_tri
AFTER INSERT ON test_trigger
FOR EACH ROW
BEGIN	
			INSERT INTO test_trigger_log(t_log)
			VALUES('after insert...');
END $

DELIMITER ;

#测试
INSERT INTO test_trigger(t_note)
VALUES('Jerry1...');

SELECT * FROM test_trigger;
SELECT * FROM test_trigger_log;

#定义触发器“salary_check_trigger”,基于员工表“employees”的INSERT事件
#在INSERT之前检查将要添加的新员工薪资是否大于他领导的薪资,如果大于领导工资
#则报sqlstate_value为‘HY000’的错误,从而使得添加失败

#准备
CREATE TABLE employees
AS
SELECT * FROM atguigudb.`employees`;
CREATE TABLE departments
AS
SELECT * FROM atguigudb.`departments`;

#创建触发器
DELIMITER //

CREATE TRIGGER salary_check_trigger
BEFORE INSERT ON employees 
FOR EACH ROW
BEGIN
			#查询到要添加的数据的manager的薪资
			DECLARE mgr_sal DOUBLE;
			
			SELECT salary INTO mgr_sal FROM employees
			WHERE employee_id = NEW.manager_id;
			
			IF NEW.salary > mgr_sal 
									THEN SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT  = '薪资高于领导薪资错误';
			END IF;						
END //

DELIMITER ;

#测试
DESC employees;
#添加成功
INSERT INTO employees(employee_id,last_name,email,hire_date,job_id,salary,manager_id)
VALUE(300,'Tom','tom@126.com',CURDATE(),'AD_VF',8000,103);

#添加失败
INSERT INTO employees(employee_id,last_name,email,hire_date,job_id,salary,manager_id)
VALUE(301,'asda','asda@126.com',CURDATE(),'AD_VF',300000,300);

SELECT * FROM employees;

#查看触发器
#①查看当前数据库的所有触发器的定义
SHOW TRIGGERS;

#②查看当前 数据库中某个触发器的定义
SHOW CREATE TRIGGER salary_check_trigger;

#③从系统库information_schema的TRIGGERS表中女查询"salary_check_trigger"触发器的信息
SELECT * FROM information_schema.`TRIGGERS`;

#删除触发器
DROP TRIGGER IF EXISTS after_insert_test_tri;

最后

以上就是外向早晨为你收集整理的触发器的使用的全部内容,希望文章能够帮你解决触发器的使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部