一.MySQL存储过程
1.概念:带有逻辑的sql语句,之前的sql语句中没有条件判断,没有循环,存储过程中带上流程控制语句。
2.特点:
(1)执行效率非常快,存储过程是在 数据库的服务端执行的;
(2)移植性很差,不同的数据库存储过程不能一直;
3.存储过程的语法:

Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式

例(我们以employee表为例):
(1)不带参数的存储过程:
创建存储过程:

Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
存储过程创建成功,调用执行:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
显示结果:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式

(2)带参数的存储过程:
#1.创建带输入存储过程(利用员工编号查询员工信息):
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
存储过程创建成功,调用执行:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
显示结果:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
#2.创建带输出参数的储存过程(输出hello word):
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
存储过程创建成功
删除存储过程:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
前:Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式后:Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
#3.带输出参数的存储过程调用
mysql的变量
1)全局变量(内置变量):mysql数据库内置的变量 (所有连接都起作用)
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式

2)会话变量: 只存在于当前客户端与数据库服务器端的一次连接当中。如果连接断开,那么会话变量全部丢失!

Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式

3)局部变量: 在存储过程中使用的变量就叫局部变量。只要存储过程执行完毕,局部变量就丢失!!
首先建立存储过程:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
建立成功,现在调用,定义一个会话变量a:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
调用成功,访问变量a:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
显示结果:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
#4.带有输入输出参数的存储过程:
创建存储过程:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
创建成功,开始调用:
*输入参数
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
显示结果:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
输出参数:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
显示结果:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
(3)带有条件判断的存储过程
根据需求完成存储过程建立(输入一个整数,如果1,则返回“星期一”,如果2,返回“星期二”,如果3,返回“星期三”。其他数字,返回“错误输入”):
建立存储过程:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
调用存储过程:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
显示结果:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
(4)带循环功能的存储过程:
注意:循环控制 leave 相当于break,iterate相当于contiune;
根据需求建立存储过程(输入一个整数,求和。例如,输入100,统计1-100的和):
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
存储过程创建完成,开始调用:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
显示结果:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
(5)带循环控制功能的存储过程
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
存储过程建立成功,开始调用:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
显示结果:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式

二.触发器
1.触发器的作用:当操作了某张表时,希望同时触发一些动作/行为,可以使用触发器完成;
2.语法:

Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式

例1:( 当向员工表插入一条记录时,希望同时往日志表插入数据)
建立日志表:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
创建触发器:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
向表中插入新的数据:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
查看日志表:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
显示结果:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
例2.(修改表时触发日志表)
创建修改触发器:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
修改表中数据:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
查看日志表:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
例3.(表数据时触动日志表)
建立删除触发器:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
删除表中一条数据:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式
查询日志表数据:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式

三.MySQL的权限
1.mysql数据库权限问题:root :拥有所有权限(可以干任何事情)
(1)权限账户,只拥有部分权限(CURD)例如,只能操作某个数据库的某张表
(2)如何修改mysql的用户密码?
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式

2.mysql数据库,用户配置 : user表

Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式

3.分配权限账户
(1)权限: select insert delete update drop create/ 或,all
(2)@ 后面可以是localhost 也可以是ip 也可以给% 那%代表任意一台计算机都可以连接上来
(3)语法:

Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式

4.数据库备份和还原 注意备份还原不需要登陆数据库

Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式

四.数据的设计
1.遵循三大范式:
(1)第一大范式:要求表的每个字段必须是不可分割的独立单元
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式

(2)第二大范式:在第一范式的基础上,要求每张表只表达一个意思。表的每个字段都和表的主键有依赖。

Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式

(3)第三大范式: 在第二范式基础,要求每张表的主键之外的其他字段都只能和主键有直接决定依赖关系。

Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式

例:
工程号 工程名称 职工号 姓名 职务 薪水 工时
A1 花园大厦 1001 杨国明 工程师 65 13
A1 花园大厦 1002 班建斌 技术员 60 16
A1 花园大厦 1004 伍岳林 律师 100 19
A2 立交桥 1001 杨国明 工程师 65 13
A2 立交桥 1003 鞠明亮 工人 55 17
A3 临江饭店 1002 班建斌 技术员 60 18
A3 临江饭店 1004 伍岳林 律师 100 14

假设某建筑公司要设计一个数据库。公司的业务规则概括说明如下:
公司承担多个工程项目,每一项工程有:工程号、工程名称、施工人员等
公司有多名职工,每一名职工有:职工号、姓名、性别、职务(工程师、技术员)等
公司按照工时和小时工资率支付工资,小时工资率由职工的职务决定(例如,技术员的小时工资率与工程师不同)
正确解析:
Java学习总结(十七)——MySQL数据库(3)存储过程,触发器,数据库权限,数据库设计三大范式

                                                                                        【本次总结完毕】