常见的分类信息网站有哪些,掌握商务网站建设策略,婚纱摄影照片,外贸工厂网站做seo多吗触发器
简介
触发器用于直接在某种操作后#xff08;数据的增删改查等#xff09;#xff0c;通过事件执行设置触发器时的 sql 语句#xff0c;具有原子性。 可通过 sql 语句直接编写#xff0c;关键词#xff1a;CREATE TRIGGER 触发器名称。 例如#xff1a;在表 st…触发器
简介
触发器用于直接在某种操作后数据的增删改查等通过事件执行设置触发器时的 sql 语句具有原子性。 可通过 sql 语句直接编写关键词CREATE TRIGGER 触发器名称。 例如在表 student 上创建触发器 test (CREATE TRIGGER test)在新增一行数据之后(AFTER INSERT)根据 student 的 classId ,在表 class 中找到 id 所在行设置 number 1。
DELIMITER $$
$$
CREATE TRIGGER test
AFTER INSERT
ON student FOR EACH ROW
BEGIN UPDATE class set number number 1 WHERE id NEW.classId;
END
$$
DELIMITER ;后面方便直接使用 Dbeaver 创建触发器
NEW和OLD
这两个关键词是 mysql 设定的两张临时表名
触发器NEWOLDinsert表示将要(BEFORE)或者已经(ALTER)插入的数据×delete×表示将要(BEFORE)或者已经(ALTER)删除的数据update表示将更新后的数据表示更新前的数据
例子
新建表 学生student 、班级class
insert
AFTER INSERT插入之后触发 如新增一名学生对应班级number 1 1、创建触发器 sql 语句写于BEGIN 和 END 之间。因为是在student 表上的插入后触发ALTER INSERT 我们要更新 class 表设置number 列的值1条件是student 插入数据后新的student临时表NEW的classId等于 class表的 id 。 2、执行后 3、测试 在表student 新增一个学生学生的classId指定是class 表的火箭班的id3 这时候查看class 表是否火箭班对应的number变为了1
BEFORE INSERT插入之前触发 如新增一名学生前先查询该学生名称如果是“小六”则提示“请输入正确的姓名” 从MySQL 5.5开始,您可以使用SIGNAL语法抛出异常
signal sqlstate 45000 set message_text My Error Message;状态45000是表示未处理的用户定义的异常的通用状态
1、创建触发器 2、测试 添加名为“小六”的学生失败 正常添加一个学生 到这里目前存在了两个触发器在student表中 mysql中执行顺序BEFORE触发器-增删该操作-ALTER触发器 所以在经过addStudent BEFORE INSERT 触发器判断后将要插入student 的数据也会经过addClassNumber 触发器 在class 的number 1
delete AFTER DELETE 如删除一名学生之后class 表对应的 班级number - 1 1、创建触发器 2、测试 删掉普通班的王五和赵六 现在普通班只剩下1人张三 BEFORE DELETE 如删除相应的班级之前查询该班是否还有学生如果有就提示无法删除 1、在class 上创建触发器 2、测试 删除普通班 删除重点班
update
关于update的就不多说了可以在更新学生student 表的classId后也在class 表的对应班级number 1基本的逻辑都类似更多的是根据业务来选择及编写触发器。 测试 写到这里暂时完成了触发器的简单使用。后续有需要在继续更新上来。
可以看看我的个人博客 网站https://www.fuzm.wang / https://liwangc.gitee.io ————————————————————————— 作为初学者很多知识都没有掌握见谅如有错误请指出以期进步感谢。后续有新的学习继续补充上来。