Mysql视图:优化操作与安全方案
概述:
视图(View)是数据库中的一种虚拟表,虽然不包含实际数据,但可以映射真实数据,像是数据库表的镜花水月或倒影。视图会动态地保存结果集的数据,使得操作更加灵活。视图可以简化复杂查询,并且为不同用户提供不同的查询结果集,增加了数据库的安全性。
作用场景:
- 针对不同的用户或权限身份,展示不同的数据结果集。视图在不同的查询中可以映射为一张或多张基础表,从而提供更灵活的数据展示。
功能:
- 简化查询: 通过视图,复杂的查询可以变得简单。
- 灵活查询: 可以创建多种视图,满足不同用户的需求。
- 提高安全性: 视图可隐藏基础表的部分数据结构,避免暴露表的细节。
- 适用范围: 视图适用于多表连接浏览,主要用于查询操作,而不适合频繁的增、删、改操作。
视图与表的区别:
- 视图是已编译的SQL语句,而表则不是。
- 视图没有物理记录,而表有物理记录。
- 视图不占用物理空间,表则占用。
- 视图只展示基础表的数据,不能直接对视图进行增、删、改操作,除非通过SQL语句更新。
- 视图属于虚表,而表属于实表。
- 视图的建立和删除只影响视图本身,不会影响对应的基础表,但更新视图中的数据会影响基础表。
视图与表的联系:
- 视图是在基础表之上建立的虚拟表,它的结构和内容来自基础表。视图是基础表的抽象存在,可以定义为单表或多表的查询结果。
视图操作示例
单表视图创建:
- 创建一个视图,展示分数大于或等于80分的学生:
CREATE VIEW v_score AS
SELECT * FROM info
WHERE score >= 80;
- 视图数据展示:
SELECT * FROM v_score;
多表视图创建:
- 创建两个表
info
和test01
,并通过它们创建一个多表视图:
CREATE VIEW v_info(id, name, score, age) AS
SELECT info.id, info.name, info.score, test01.age
FROM info, test01
WHERE info.name = test01.name;
- 视图数据展示:
SELECT * FROM v_info;
视图的更新与影响:
-
可以通过视图来更新基础表的数据,但不能修改通过函数计算得来的字段。
-
例如,更新视图
v_score
中的数据,同时影响info
基础表:
UPDATE v_score SET score = '120' WHERE name = 'tianqi';
Mysql中的NULL值
NULL值的概念:
定义:NULL表示数据缺失,与数字0或空白字符不同。NULL值是没有实际值的。可使用 IS NULL
或 IS NOT NULL
来判断字段是否为NULL
NULL值与空值的区别:
- 空值:长度为0,不占用空间。
- NULL值:表示未知,实际占用空间
NULL值的使用示例:
1、添加新列:
ALTER TABLE info ADD COLUMN addr VARCHAR(50);
2、更新数据:
UPDATE info SET addr = 'nj' WHERE score >= 70;
3、统计数量:验证NULL值是否被计算在内。
SELECT COUNT(addr) FROM info;
4、查询NULL值:
SELECT * FROM info WHERE addr IS NULL;
5、查询非NULL值:
SELECT * FROM info WHERE addr IS NOT NULL;
连接查询
MySQL 的连接查询,通常都是将来自两个或多个表的记录行结合起来,基于这些表之间的 共同字段,进行数据的拼接。首先,要确定一个主表作为结果集,然后将其他表的行有选择 性的连接到选定的主表结果集上。使用较多的连接查询包括:内连接、左连接和右连接
模板:
create table test1 (
a_id int(11) default null,
a_name varchar(32) default null,
a_level int(11) default null);create table test2 (
b_id int(11) default null,
b_name varchar(32) default null,
b_level int(11) default null);insert into test1 values (1,'aaaa',10);
insert into test1 values (2,'bbbb',20);
insert into test1 values (3,'cccc',30);
insert into test1 values (4,'dddd',40);insert into test2 values (2,'bbbb',20);
insert into test2 values (3,'cccc',30);
insert into test2 values (5,'eeee',50);
insert into test2 values (6,'ffff',60);
总结
- 查询方便:视图提供了索引速度快和多表查询更为迅速的优点。
- 安全性:通过视图隐藏数据表的复杂性,增强了数据的安全性,特别是在权限管理中应用广泛。