网站建设对网络营销的影响,安徽城乡建设局网站,建筑效果图素材网站,wordpress logo 太小目录
一.概述
介绍 触发器的特性
操作—创建触发器
操作—new和old 操作—查看触发器
操作—删除触发器 注意事项 一.概述
介绍
触发器#xff0c;就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段#xff0c;但是…目录
一.概述
介绍 触发器的特性
操作—创建触发器
操作—new和old 操作—查看触发器
操作—删除触发器 注意事项 一.概述
介绍
触发器就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段但是触发器无需调用当对数据库表中的数据执行DML操作时自动触发这个SQL片段的执行无需手动条用。在MySQL中只有执行insert,delete,update操作时才能触发触发器的执行触发器的这种特性可以协助应用在数据库端确保数据的完整性日志记录数据校验等操作。使用别名OLD和NEW来引用触发器中发生变化的记录内容这与其他的数据库是相似的。现在触发器还只支持行级触发不支持语句级触发。触发器的特性
什么条件会触发:l、D、U什么时候触发:在增删改前或者后触发频率:针对每一行执行触发器定义在表上附着在表上操作—创建触发器
格式
1.创建只有一个执行语句的触发器 2.创建有多个执行语句的触发器 操作 演示
create database if not exists test_trigger;use test_trigger;
-- 用户表
create table user (uid int primary key,username varchar(50) not null,password varchar(50) not null
);
-- 用户信息操作日志表
create table user_logs(id int primary key auto_increment,time timestamp,log_text varchar(255)
);-- 需求1当user表添加一行数据则会自动在user_log添加日志记录
-- 定义触发器trigger_test1
create trigger trigger_test1 after insert on user
for each row
insert into user_logs values(null,now(),有新用户添加);-- 在user表添加数据让触发器自动执行
insert into user values(1,张三,123456);
结果展示 create database if not exists test_trigger;use test_trigger;
-- 用户表
create table user (uid int primary key,username varchar(50) not null,password varchar(50) not null
);
-- 用户信息操作日志表
create table user_logs(id int primary key auto_increment,time timestamp,log_text varchar(255)
);-- 需求1当user表添加一行数据则会自动在user_log添加日志记录
-- 定义触发器trigger_test1
create trigger trigger_test1 after insert on user
for each row
insert into user_logs values(null,now(),有新用户添加);-- 在user表添加数据让触发器自动执行
insert into user values(1,张三,123456);-- 需求2当user表数据被修改时则会自动在user_log添加日志记录
delimiter $$
create trigger trigger_test2 after update on user
for each row
begin insert into user_logs values(null,now(),有用户信息被修改);
end $$
delimiter ;update user set password 222222 where uid1;需求2结果是 操作—new和old
格式
MySQL中定义了NEW和oLD用来表示触发器的所在表中触发了触发器的那一行数据来引用触发器中发生变化的记录内容具体地:
触发器类型触发器类型的new和old使用insert型触发器new表示将要或已经新增的数据update型触发器OLD表示修改之前的数据NEW表示将要或已经修改后的数据delete型触发器OLD表示将要或者已经删除的数据
使用方法
new.columname(columname为相应数据表某一列名)
演示
create trigger trigger_test3 after insert on user
for each row
begin insert into user_logs values(null,now(),concat(有新用户添加信息为,new.uid,new.username,new.password)) ;
end;insert into user values(2,李四,24234); -- update
create trigger trigger_test4 after update on user
for each row
begin insert into user_logs values(null,now(),concat_ws(--,用户信息有修改修改后为,new.uid,new.username,new.password));
end;update user set password66666 where uid2; -- update
create trigger trigger_test5 after update on user
for each row
begin insert into user_logs values(null,now(),concat_ws(--,用户信息有修改修改后为,new.uid,new.username,new.password,用户信息有修改修改前为,old.uid,old.username,old.password));
end;update user set password988765654 where uid2; 操作—查看触发器 操作—删除触发器 注意事项
1.MYSQL中触发器中不能对本表进行insert ,update ,delete操作以免递归循环触发 2.尽量少使用触发器假设触发器触发每次执行1sinsert table 5o0o条数据那么就需要触发5oo次触发器光是触发器执行的时间就花费了500s而insert 50o条数据一共是1s那么这个insert的效率就非常低了。 3.触发器是针对每一行的;对增删改非常频繁的表上切记不要使用触发器因为它会非常消耗资源。