概述
优点: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;
最后
以上就是外向早晨为你收集整理的触发器的使用的全部内容,希望文章能够帮你解决触发器的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复