目录

  • 什么是存储函数
  • 存储函数和存储过程的区别
  • 创建存储函数
  • 调用存储函数
  • 删除存储函数
  • 定义与实现完整性约束

 

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  不采取实施策略