Mysql系列课程--第七章 触发器和存储过程
来源:互联网 发布:java观察者模式实例 编辑:程序博客网 时间:2024/06/08 08:59
Mysql第六章触发器和存储过程
一.触发器
1.被动,不是由用户执行,而是满足条件后自动执行一系列sql
2.触发条件: insert ,update ,delete
3.触发时间可以分为:after , before
创建触发器(student表插入一条数据触发在student_bak表里备份一条数据):
delimiter //create trigger tr_stu1after insert on studentfor each rowbegininsert student_bak(s_no,s_name,c_no,c_name,score) values(new.s_no,new.s_name,new.c_no,new.c_name,new.score);end //
创建触发器(student表删除数据触发在student_bak表里备份数据):
delimiter EOFcreate trigger tr_stu_del_bakafter delete on studentfor each rowbegininsert student_bak(s_no,s_name,c_no,c_name,score) values(old.s_no,old.s_name,old.c_no,old.c_name,old.score);end EOF
delimiter //:定义结束标识符为//,碰到//代表结束,也可以定义成其他的
new :代表新插入的数据
old :代表删除的旧数据
删除触发器:
drop trigger tr_stu_del_bak;
二.面试题
数据:
create table a (aid int primary key,create_date datetime,num int,money int,status varchar(1) default 'N');insert into a values(1,sysdate(),3,900,'N');insert into a values(2,sysdate(),2,900,'N');insert into a values(3,sysdate(),5,1000,'N');create table b (bid int,aid int,create_date datetime,money int);
答案:
delimiter //create trigger upa_addbafter update on afor each rowbegindeclare status_new varchar(1);declare num int;set status_new = (select status from a where aid = old.aid);set num = 0;if status_new = 'Y' thenwhile num < old.num do insert b values(num+1,old.aid,date_add(old.create_date,interval num month),old.money/old.num); set num = num +1;end while;end if;end//
三.存储过程
1.为了处理业务逻辑,相当于JAVA里的方法
2.循环判断加上一堆sql语句
3.有参存储过程(求两个参数和):
delimiter //create procedure pro_sum(i int ,j int)begin select i+j '求和';end //
调用存储过程:call pro_sum(7,8);
4.无参存储过程:
delimiter //create procedure pro_sum()begindeclare i int;declare j int;set i = 5;set j = 6;select i+j '求和';end //
调用存储过程:call pro_sum();
5.插入5000条数据
delimiter //create procedure auto_addStu(num int)begin declare i int;set i = 0;while i < num doinsert student(s_no,s_name,s_age) values(i+1,concat('Zara',i+1),round(rand()*20+10));set i = i + 1 ;end while;end//
调用存储过程:call auto_addStu(5000);
四.事务
1.要不都执行,要么都不执行。
2.要么提交commit,要么回滚rollback。
开启事务:
start transaction;insert t_user(name,sex,age,buildtime) values('张三','男',18,20171202125339);insert t_user(name,sex,age,buildtime) values('张三','男',18,20171202125339);insert t_user(name,sex,age,buildtime) values('张三','男',18,20171202125339);insert t_user(name,sex,age,buildtime) values('张三','男',18,20171202125331);rollback;
详细课程查询:
Mysql系列课程–第一章 Sql分类 常用命令
Mysql系列课程–第二章 约束 自增主键
Mysql系列课程–第三章 建表 插数据
Mysql系列课程–第四章 备份 普通查询
Mysql系列课程–第五章 高级查询 表连接 子查询 case when
Mysql系列课程–第六章 索引和视图
Mysql系列课程–第七章 触发器和存储过程
Mysql系列课程–第八章 sql精选35道题
- Mysql系列课程--第七章 触发器和存储过程
- mysql中查看存储过程和触发器
- MYSQL 存储过程,游标和触发器
- mysql 自定义存储过程和触发器
- Mysql学习 - 触发器和存储过程
- Mysql 存储过程、函数和触发器
- mysql编程(存储过程和触发器)
- mysql中的函数 存储过程和触发器
- mysql初学之触发器和存储过程
- mysql存储过程,视图和触发器
- MySql视图、存储过程和触发器
- mysql 触发器+存储过程
- mysql 触发器,存储过程
- Mysql 第四章 触发器、存储过程
- 触发器和存储过程
- 触发器和存储过程
- 触发器和存储过程
- 触发器和存储过程
- Android判断屏幕锁屏的方法总结
- 架构师需要注意DDoS攻击
- SDUT-3373-->数据结构实验之查找一:二叉排序树
- CrossFTP Enterprise(ftp上传工具)官方中文版V1.98.7下载 | CrossFTP破解版
- Longest Uncommon Subsequence I
- Mysql系列课程--第七章 触发器和存储过程
- vue.js学习
- python 字符串比较忽略大小写的方法
- 国外对各种设计模式讲解的比较好的Blog
- 网络编程
- 薪水支付案例
- gradle cleanidea ecplise 遇到的错误unsupported major.minor version 52.0
- UICC
- SQL查找非空元素(!=NULL)