最好的做网站的公司,牛牛网站建设,wordpress动静分离cdn,淄博网站制作多样定制1.概念
触发器是一个特殊的存储过程#xff0c;当触发器保护的数据发生变更时就会触发。
2.特性 1.触发器与表息息相关#xff0c;一般我们一个表创建六个触发器。
2.六个触发器其实是三种类六个 insert 类型 before | after insertupdate 类型 before | af…1.概念
触发器是一个特殊的存储过程当触发器保护的数据发生变更时就会触发。
2.特性 1.触发器与表息息相关一般我们一个表创建六个触发器。
2.六个触发器其实是三种类六个 insert 类型 before | after insertupdate 类型 before | after updatedelete 类型 before | after delete 当我们进行这三个操作时启动触发器。
3.触发器写法
CREATE TRIGGER trigger_name trigger_time trigger_eventON table_nameFOR EACH ROWBEGIN...END;
4.创建触发器实例代码可操作
创建一个学生表和学生详情表
-- 创建数据库
CREATE DATABASE IF NOT EXISTS Test;-- 使用数据库
USE Test;-- 创建表
CREATE TABLE IF NOT EXISTS student (id INT PRIMARY KEY,name VARCHAR(255),age INT
);
-- info详细表
CREATE TABLE stu_detail (id INT PRIMARY KEY,stu_id INT,name VARCHAR(50),age INT,address VARCHAR(100),phone VARCHAR(20)
);-- 向student表中插入多条记录
INSERT INTO student (id, name, age)
VALUES (1, John, 25),(2, Jane, 28),(3, Mike, 30),(4, Sarah, 22);-- 向student表中插入多条记录
INSERT INTO stu_detail (id, stu_id, name, age, address, phone)
VALUES (1, 1, John, 25, 123 Main St, 123-456-7890);INSERT INTO stu_detail (id, stu_id, name, age, address, phone)
VALUES (2, 2, Jane, 28, 456 Elm St, 987-654-3210);INSERT INTO stu_detail (id, stu_id, name, age, address, phone)
VALUES (3, 3, Mike, 30, 789 Oak St, 555-123-4567);INSERT INTO stu_detail (id, stu_id, name, age, address, phone)
VALUES (4, 4, Sarah, 22, 789 Oak St, 555-123-4567);
创建BEFORE INSERT触发器
该触发器作用为插入student表时先检查id是否存在假如存在的话就回滚操作并给出异常提醒不存在才可以插入
DELIMITER //
CREATE TRIGGER before_insert_Student
BEFORE INSERT ON student
FOR EACH ROW
BEGINDECLARE idExists INT;SET idExists (SELECT COUNT(*) FROM student WHERE id NEW.id);IF idExists 0 THENSIGNAL SQLSTATE 45000 SET MESSAGE_TEXT 插入ID已经存在不允许插入;END IF;
END//
DELIMITER ; 测试触发器
id冲突 id不冲突 创建AFTER UPDATE触发器
改触发器功能为 after update 触发器当student数据update时stu_detail表中对应id的记录也随之变更
-- update 触发器
CREATE TRIGGER after_update_student
AFTER UPDATE ON student
FOR EACH ROW
BEGINUPDATE stu_detailSET name NEW.name, age NEW.ageWHERE id NEW.id;
END;
测试触发器
更改成功 查看detail表是否自动变更可发现成功更改 创建 AFTER DELETE触发器
CREATE TRIGGER after_delete_student
AFTER DELETE ON student
FOR EACH ROW
BEGINDELETE FROM stu_detail WHERE id OLD.id;
END;
最后一个我就不测试了交给大家去检测一下。
5.名词解释
BEFORE : 代表的意识是在我们的操作insert,update,delete 之前就执行触发器
AFTER : 代表的意识是在我们的操作insert,update,delete 之后才执行触发器
NEW 对于insert来说是将要或者已经新增的数据条 对于update来说是将要或者已经修改的数据条 delete则没有NEW
OLD: 对于delete来说是将要或者已经删除的数据条 对于update来说是修改前的数据条 insert则没有OLD NEW和OLD需要大家想一想就知道是啥意思了。