mysql7-高阶语句2

105 阅读3分钟

mysql视图

数据库中的虚拟表,这张虚拟表中不包含真实数据,只是做了真实数据的映射

  • 视图可以理解为倒影,动态保存结果集(数据)

视图的作用

  • 简化sql语句的查询
  • 提高安全性
  • 不能添加索引提供不同结果集的“表”(以表格的形式)

功能:

  • 简化查询结果、灵活查询、可以针对不同用户呈现不同的结果、相对于有更高的的安全性
  • 本质而言视图是一种select(结果集的呈现)

视图与表的区别和联系

  1. 视图是已经编译好的sql语句。而表不是
  2. 视图没有实际的物理记录。而表有
  3. 表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改
  4. 视图是查看数据表的一种方式,可以查询数据表中某些字段结构的数据,只是一些
  5. sql语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表的结构
  6. 表属于全局模式的表,是实表;视图属于局部模式的表,是虚表
  7. 视图的建立和删除只影响视图本身,不影响对应的基本表。(但是更新视图数据,是会影响到基本表的

示例

创建单表视图

需求:满足80分的学生展示在视图中

#创建视图
mysql> create view v_score as select * from shiyan1 where score>=80;

#查看表状态
mysql> show table status\G

#查看视图
mysql> select * from v_score;

#查看视图与源表结构
#视图
mysql> desc v_score;
#源表

image.png

image.png

image.png

image.png

创建多表视图

需求:需要创建一个视图,需要输出id、学生姓名、分数以及年龄

#先创建shiyan2表(源表2)
mysql> create table shiyan2 (id int,name varchar(10),age char(10));
mysql> insert into shiyan2 values(1,'zhangsan',20);
mysql> insert into shiyan2 values(2,'lisi',33);
mysql> insert into shiyan2 values(3,'wangwu',29);

#创建视图
mysql> create view v_shiyan1(id,name,score,sge)as select shiyan1.id,shiyan1.name,shiyan1.score,shiyan2.age from shiyan1,shiyan2 where shiyan1.name=shiyan2.name;
#查看
mysql> select * from v_info;

image.png

修改源表数据

删除数据时候,源表和视图表不影响,但是更新时候影响

mysql> update shiyan1 set score='60' where name='lisi';
mysql> select * from v_shiyan1

image.png

同时通过视图修改源表

mysql> update v_score set score='120' where name='tianqi';
mysql> select * from v_score;
mysql> select * from shiyan1;

image.png

NULL值

在 SQL 语句使用过程中,经常会碰到 NULL 这几个字符。通常使用 NULL 来表示缺失 的值,也就是在表中该字段是没有值的。如果在创建表时,限制某些字段不为空,则可以使用 NOT NULL 关键字,不使用则默认可以为空。在向表内插入记录或者更新记录时,如果该字段没有 NOT NULL 并且没有值,这时候新记录的该字段将被保存为 NULL。需要注意 的是,NULL 值与数字 0 或者空白(spaces)的字段是不同的,值为 NULL 的字段是没有 值的。在 SQL 语句中,使用 IS NULL 可以判断表内的某个字段是不是 NULL 值,相反的用 IS NOT NULL 可以判断不是 NULL 值。

NULL值与空值得区别

  • 空值长度为0,不占用空间;NULL值得长度为NULL,占用空间
  • NULL无法判断出空值
  • 空值使用"=“或者”<>"来处理(!=)
  • count()计算时,NULL会忽略,空值会加入计算

插入一条记录,分数字段输入null,显示出来就是null