mysql之视图篇章

什么是视图定义?

         视图是基于SQL语句中的结果集的可视化的表,可以是一个或者多个表的结合体。数据库中的设计和结构不会受到视图中的函数或者语句影响,也就是说彼此没有什么关联。


快速举个例子:

        应用场景:当前有两个表,两个表通过name关联,分别是用户表和成绩表,用户和成绩一对多对应,一个用户对应0到多个成绩,sql表语句如下:

CREATE TABLE `course` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT NULL,
  `grade` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `name` (`name`),
  CONSTRAINT `course_ibfk_1` FOREIGN KEY (`name`) REFERENCES `user` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

例如:咱们需要根据用户查询对应的成绩:


解决方案一:

平时咱们就写sql:

select 
	u.*,c.grade
from 
	user u
left join
	course c
on
	u.name = c.name;

解决方案二:

使用视图简化sql语句:

1.创建视图语句

CREATE ALGORITHM=UNDEFINED DEFINER=`code`@`%` SQL SECURITY DEFINER VIEW `tt` AS (select `u`.`id` AS `id`,`u`.`name` AS `name`,`u`.`age` AS `age`,`c`.`grade` AS `grade` from (`user` `u` left join `course` `c` on((`u`.`name` = `c`.`name`))));

select 
	*
from 
	tt

创建视图语句:

CREATE [ALGORITHM]={UNDEFINED|MERGE|TEMPTABLE}]
       VIEW 视图名 [(属性清单)]
       AS SELECT 语句
       [WITH [CASCADED|LOCAL] CHECK OPTION];


创建视图分成三部分结束:

(1)  create [ALGORITHM]={UNDEFINED|MERGE|TEMPTABLE}] view 视图名 [(属性清单)]

            ALGORITHM表示视图选择的算法(可选参数)

                             UNDEFINED:MySQL将自动选择所要使用的算法
                             MERGE:将视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分
                             TEMPTABLE:将视图的结果存入临时表,然后使用临时表执行语句

            属性清单表示视图中的列名,默认与SELECT查询结果中的列名相同(可选参数)


(2)  as select 语句

            as后面就是咱们经常写的sql语句。例如 select * from tableName


(3)   [WITH [CASCADED|LOCAL] CHECK OPTION]

            CHECK OPTION:表示更新视图时要保证在该试图的权限范围之内

      CASCADED:更新视图时要满足所有相关视图和表的条件
      LOCAL:更新视图时,要满足该视图本身定义的条件即可


删除视图:

          

DROP VIEW IF EXISTS 视图名称;









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值