mysql 第9天

视图

1  创建或修改视图

mysql 第9天

2   以下类型不可更新

 包含以下关键字的 SQL 语句:聚合函数(SUM、 MIN、 MAX、 COUNT 等)、 DISTINCT、 GROUP
BY、HAVING、UNION 或者 UNION ALL。
 常量视图。
 SELECT 中包含子查询。
 JION。
 FROM 一个不能更新的视图。
 WHERE 字句的子查询引用了 FROM 字句中的表。

3   WITH [CASCADED | LOCAL] CHECK OPTION 决定了是否允许更新数据使记录不再满足视图的条
件。这个选项与 Oracle 数据库中的选项是类似的,其中:
 LOCAL 是只要满足本视图的条件就可以更新;
 CASCADED 则是必须满足所有针对该视图的所有视图的条件才可以更新。
如果没有明确是 LOCAL 还是 CASCADED,则默认是 CASCADED。

4  删除视图, 当有该视图的权限

DROP VIEW [IF EXISTS] view_name [, view_name] ...[RESTRICT | CASCADE]

5 查看视图

show tables;  会一同显示视图

SHOW TABLE STATUS

下面演示的是查看 staff_list 视图信息的操作

mysql> show table status like 'staff_list' \G

6     查询某个视图的定义,可以使用 SHOW CREATE VIEW 命令进行查看:

     mysql> show create view staff_list \G   

或者   mysql> select * from views where table_name = 'staff_list' \G

存储过程和函数

存储过程和函数是事先经过编译并存储在数据库中的一段 SQL 语句的集合

存储过程和函数的区别在于函数必须有返回值,而存储过程没有

存储过程的参数可以使用IN、OUT、INOUT 类型,而函数的参数只能是 IN 类型的

存储过程和函数的相关操作

1  创建,修改存储过程或者函数

CREATE PROCEDURE sp_name ([proc_parameter[,...]])
       [characteristic ...] routine_body

CREATE FUNCTION sp_name ([func_parameter[,...]])
        RETURNS type
        [ characteristic ...] routine_body

        proc_parameter:
         [ IN | OUT | INOUT ] param_name type

        func_parameter:
         param_name type

type:
              Any valid MySQL data type

characteristic:
         LANGUAGE SQL
   | [NOT] DETERMINISTIC
   | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
   | SQL SECURITY { DEFINER | INVOKER }
   | COMMENT 'string'

routine_body:
        Valid SQL procedure statement or statements

ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...]

characteristic:
       { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
        | SQL SECURITY { DEFINER | INVOKER }
        | COMMENT 'string'

调用过程的语法为   CALL sp_name([parameter[,...]])

2

mysql 第9天

3 对存储过程或者函数进行修改,需要执行ALTER语句

4下面对 characteristic 特征值的部分进行简单的说明。
 LANGUAGE SQL:说明下面过程的 BODY 是使用 SQL 语言编写,这条是系统默认的,
为今后 MySQL 会支持的除 SQL 外的其他语言支持的存储过程而准备。
 [NOT] DETERMINISTIC: DETERMINISTIC 确定的,即每次输入一样输出也一样的程序,
NOT DETERMINISTIC 非确定的,默认是非确定的。当前,这个特征值还没有被优化
程序使用。
 { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }:这些特征值提供
子程序使用数据的内在信息,这些特征值目前只是提供给服务器,并没有根据这些
特征值来约束过程实际使用数据的情况。CONTAINS SQL 表示子程序不包含读或写
数据的语句。NO SQL 表示子程序不包含 SQL 语句。READS SQL DATA 表示子程序包
含读数据的语句,但不包含写数据的语句。MODIFIES SQL DATA 表示子程序包含写
数据的语句。如果这些特征没有明确给定,默认使用的值是 CONTAINS SQL。
 SQL SECURITY { DEFINER | INVOKER }:可以用来指定子程序该用创建子程序者的许
可来执行,还是使用调用者的许可来执行。默认值是 DEFINER。
 COMMENT 'string':存储过程或者函数的注释信息。

5   IN    使用IN类型来传递信息,存储过程内部可以对参数的值进行修改,但是修改后的值调用者不可见。不返回

OUT    值在存储过程内修改后返回调用者。

INOUT类型可以向存储过程传递信息,如果值改变,再返回给调用者


6  删除操作   需要有该过程或者函数的ALTER ROUTINE 权限

DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

7  查看存储过程或者操作

SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'pattern']

mysql 第9天

8  查看定义   SHOW CREATE {PROCEDURE | FUNCTION} sp_name

mysql> show create procedure film_in_stock \G

通过查看 information_schema. Routines 了解存储过程和函数的信息