目录
- 什么是存储函数
- 存储函数和存储过程的区别
- 创建存储函数
- 调用存储函数
- 删除存储函数
- 定义与实现完整性约束
1、什么是存储函数
存储函数与存储过程一样,是由SQL语句和过程式语句组成的代码片段
2、存储函数和存储过程的区别
存储函数 | 存储过程 |
不能拥有输出参数 | 可以拥有输出参数 |
可以直接调用存储函数,不需要call语句 | 需要call语句调用存储过程 |
必须包含一条return语句 | 不允许包含return语句 |
3、创建存储函数
示例:在数据库中mysql_test中创建一个存储函数,要求该函数能根据给定的客户id号返回客户的性别,如果数据库中没有给定的客户id号,则返回"没有该客户".
用例表:customer(cust_id,cust_sex,cust_name);
->use mysql_test;
->delimiter $$
->create function fn_name(cid int) //创建一个存储函数,题目要求我们输入id号判断性别,所以是int
-> returns char(2) //返回性别,所以char类型
-> deterministic //为了提高where子句的性能加的
->begin //接下来要写函数体了
-> declare sex char(2); //声明局部变量用来装性别
-> select cust_sex into sex from customer //把这个性别放进局部变量
-> where cust_id = cid; //判断id相符
-> if sex is null then //判断这个局部变量性别对应的属性
-> return(select '没有该客户');
-> else if sex = '女' then
-> return(select "女");
-> else return(select "男");
-> end if; //用来结束else if的语句
-> end if; //用来结束if的语句
->end $$ //用来结束存储函数
3、调用存储函数
//调用存储函数,举上面的例子
customer表的数据
(1,"男","zhangsan")
(2,"女","wangwu")
(3,"女","lisi")
(4,null,"wowo")
这里我有4条数据
->select fn_name(1)$$
->男 //输出结果
->select fn_name(2)$$
->女 //输出结果
->select fn_name(4)$$
->null //输出结果
4、删除存储函数
->drop function if exists fn_name $$
//指定要删除的存储函数的名称
5、定义与实现完整性约束
示例:在数据库mysql_test中创建一个商品订单表orders,该表包含订单号order_id,商品名order_product,商品类型order_product_type,客户id号cust_id,
订购时间order_date,价格order_price,数量order_amount。要求商品订单表orders中的所有订购客户信息均已在表costomers中记录在册
->use mysql_test
->cretate table orders
->(
-> order_Id int not null auto_increment,
-> order_product char(50) not null,
-> cust_id int not null,
-> order_date datetime not null,
-> order_price double not null,
-> order_amount int not null,
-> primary key(order_id),
-> foreign key(cust_id)
-> references customers(cust_id)
-> on delete restrict
-> on update restrict
->);
//restrict 限制策略
//cascade 级联策略
//set null 置空策略
//no action 不采取实施策略