视图、存储过程、触发器1.视图视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在行和列数据来自定义视图的查询中使用的表并且是在使用视图时动态生成的。通俗的讲视图只保存了查询的SQL逻辑不保存查询结果。所以我们在创建视图的时候主要的工作就落在创建这条SQL查询语句上。1.1 语法创建视图CREATE [OR REPLACE] VIEW 视图名称(列名列表) AS SELECT语句[WITH[CASCADED|LOCAL] CHECK OPTION]查看创建视图语句SHOW CREATE VIEW 视图名称;查看视图数据SELECT * FROM 视图名称…;查看数据中中所有视图SHOW FULL TABLES IN 数据库名 WHERE Table_type VIEW;修改视图CREATE [OR REPLACE] VIEW 视图名称(列名列表) AS SELECT语句 [WITH [CASCADED|LOCAL] CHECK OPTION]; 或 ALTER VIEW 视图名称(列名列表) AS SELECT语句 [WITH [CASCADED|LOCAL] CHECK OPTION];删除视图DROP VIEW [IF EXISTS] 视图名称[,视图名称];1.2 检查选项当使用WITH CHECK OPTION子句创建视图时MySOL会通过视图检查正在更改的每个行例如 插入更新删除以使其符合视图的定义。MySQL允许基于另一个视图创建视图它还会检查依赖视图中的规则以保持一致性。视图的插入、删除、更新语句和基本表的语句一致当执行增删改操作时实际改变的是基本表中的数据但是不建议通过视图更改基本表。为了确定检查的范围mysql 提供了两个选项:CASCADED 和 LOCAL默认值为CASCADEDcascaded在对视图进行更删改操作时会核查该视图及所有直接或间接依赖的视图创建语句中的条件只有当所有条件都满足才能够操作成功例如create view v1 as select id,name from student where id20;因为没有指定WITH CHECK OPTION子句插入时不会核查条件id20直接插入成功create view v2 as select id,name from v1 where id10 with cascaded check option;插入时会核查v2中的条件id10和v1中的条件id20只有全部满足时才会插入成功相当于给v1添加了with cascaded check option子句create view v3 as select id,name from v2 where id15;由于v3没有指定WITH CHECK OPTION子句不会核查条件id15但是由于v2指定了with cascaded check option子句所以会核查v2的条件id10和v1的条件id20;local在对视图进行更删改操作时会核查该视图及所有直接或间接依赖的且使用WITH CHECK OPTION子句的视图创建语句中的条件只有当所有条件都满足才能够操作成功例如create view v4 as select id,name from student where id20;因为没有指定WITH CHECK OPTION子句插入时不会核查条件id20直接插入成功create view v5 as select id,name from v4 where id10 with local check option;插入时会核查v5中的条件id10因为v4中没有使用WITH CHECK OPTION子句所以不会核查v4中的条件id20也就是说不会给v4添加with local check option子句create view v6 as select id,name from v5 where id15;因为没有指定WITH CHECK OPTION子句插入时不会核查条件id15由于v5使用了with local check option子句所以会核查v5中的条件id10又因为v4中没有使用WITH CHECK OPTION子句所以不会核查v4中的条件id20也就是说仅仅核查有with local check option子句的视图中的条件1.3 更新及作用要使视图可更新视图中的行与基础表中的行之间必须存在一对一的关系即视图中的每一行必须直接对应基础表中的唯一一行不能有多行映射到视图中的同一行也不能有视图中的一行映射到基础表中的多行如果视图包含以下任何一项则该视图不可更新或插入聚合函数或窗口函数SUM()、MIN()、MAX()、COUNT()等DISTINCTGROUP BYHAVINGAUNION 或者 UNION ALL1.4 视图的作用简单视图不仅可以简化用户对数据的理解也可以简化他们的操作。那些被经常使用的查询可以被定义为视图从而使得用户不必为以后的操作每次指定全部的条件。安全数据库可以授权但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据。数据独立视图可帮助用户屏蔽真实表结构变化带来的影响。
MySQL(十二)视图、存储过程、触发器详细讲解
视图、存储过程、触发器1.视图视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在行和列数据来自定义视图的查询中使用的表并且是在使用视图时动态生成的。通俗的讲视图只保存了查询的SQL逻辑不保存查询结果。所以我们在创建视图的时候主要的工作就落在创建这条SQL查询语句上。1.1 语法创建视图CREATE [OR REPLACE] VIEW 视图名称(列名列表) AS SELECT语句[WITH[CASCADED|LOCAL] CHECK OPTION]查看创建视图语句SHOW CREATE VIEW 视图名称;查看视图数据SELECT * FROM 视图名称…;查看数据中中所有视图SHOW FULL TABLES IN 数据库名 WHERE Table_type VIEW;修改视图CREATE [OR REPLACE] VIEW 视图名称(列名列表) AS SELECT语句 [WITH [CASCADED|LOCAL] CHECK OPTION]; 或 ALTER VIEW 视图名称(列名列表) AS SELECT语句 [WITH [CASCADED|LOCAL] CHECK OPTION];删除视图DROP VIEW [IF EXISTS] 视图名称[,视图名称];1.2 检查选项当使用WITH CHECK OPTION子句创建视图时MySOL会通过视图检查正在更改的每个行例如 插入更新删除以使其符合视图的定义。MySQL允许基于另一个视图创建视图它还会检查依赖视图中的规则以保持一致性。视图的插入、删除、更新语句和基本表的语句一致当执行增删改操作时实际改变的是基本表中的数据但是不建议通过视图更改基本表。为了确定检查的范围mysql 提供了两个选项:CASCADED 和 LOCAL默认值为CASCADEDcascaded在对视图进行更删改操作时会核查该视图及所有直接或间接依赖的视图创建语句中的条件只有当所有条件都满足才能够操作成功例如create view v1 as select id,name from student where id20;因为没有指定WITH CHECK OPTION子句插入时不会核查条件id20直接插入成功create view v2 as select id,name from v1 where id10 with cascaded check option;插入时会核查v2中的条件id10和v1中的条件id20只有全部满足时才会插入成功相当于给v1添加了with cascaded check option子句create view v3 as select id,name from v2 where id15;由于v3没有指定WITH CHECK OPTION子句不会核查条件id15但是由于v2指定了with cascaded check option子句所以会核查v2的条件id10和v1的条件id20;local在对视图进行更删改操作时会核查该视图及所有直接或间接依赖的且使用WITH CHECK OPTION子句的视图创建语句中的条件只有当所有条件都满足才能够操作成功例如create view v4 as select id,name from student where id20;因为没有指定WITH CHECK OPTION子句插入时不会核查条件id20直接插入成功create view v5 as select id,name from v4 where id10 with local check option;插入时会核查v5中的条件id10因为v4中没有使用WITH CHECK OPTION子句所以不会核查v4中的条件id20也就是说不会给v4添加with local check option子句create view v6 as select id,name from v5 where id15;因为没有指定WITH CHECK OPTION子句插入时不会核查条件id15由于v5使用了with local check option子句所以会核查v5中的条件id10又因为v4中没有使用WITH CHECK OPTION子句所以不会核查v4中的条件id20也就是说仅仅核查有with local check option子句的视图中的条件1.3 更新及作用要使视图可更新视图中的行与基础表中的行之间必须存在一对一的关系即视图中的每一行必须直接对应基础表中的唯一一行不能有多行映射到视图中的同一行也不能有视图中的一行映射到基础表中的多行如果视图包含以下任何一项则该视图不可更新或插入聚合函数或窗口函数SUM()、MIN()、MAX()、COUNT()等DISTINCTGROUP BYHAVINGAUNION 或者 UNION ALL1.4 视图的作用简单视图不仅可以简化用户对数据的理解也可以简化他们的操作。那些被经常使用的查询可以被定义为视图从而使得用户不必为以后的操作每次指定全部的条件。安全数据库可以授权但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据。数据独立视图可帮助用户屏蔽真实表结构变化带来的影响。