MYSQL当中的视图语法
它的语法与SQLServer一样
视图的一系列操作
--视图是从一个或多个表(或视图)的行或列的子集创建的虚拟表,不占用数据库物理存储空间;
--视图并不是一个真正的表,但可以像使用一个真实的表一样使用视图。
一、创建视图
基本语法:
create view 视图名 [(列名列表)]
as 查询语句
--如果"列名列表"没有出现,则需在查询语句中为每一个出现的且没有具体列名的列指定列名。
--只有在当前数据库中才能创建视图。创建视图时,源表可以是基本表,也可以是视图。
--视图的命名规则必须遵循标识符命名规则,不能与表同名,即使定义相同的视图,也不能同名。
--不能把规则、默认值或触发器与视图相关联。
--查询语句有以下限制:
-- 1、定义视图的用户必须有执行
select 的权限;
-- 2、不能使用
computer 或 computer by 子句;
-- 3、不能使用
order by 子句;
-- 4、不能使用
into 子句;
-- 5、不能在临时表或表变量上创建视图。
举例:
create view sexm_view
as
select * from student
where sex='男'
二、视图信息的查询
使用 sp_helptext 存储过程
语法:
[exec] sp_helptext '视图名'
三、使用视图
1、使用视图查询数据
语法:
select 列名列表 from 视图名
举例:
select * from sexm_view
--使用视图查询时,若其关联的基本表中添加了新字段,则必须重新创建视图才能
--查询到新字段。如果与视图相关联的表或视图被删除,则该视图将不能再使用。
--说明:
--执行上面的查询语句时,SQL查询处理器首先在数据库中查找名叫sexm_view的表格,
--但是会没有结果,因为数据库中没有这样的表,然后查询处理器会判断sexm_view是否是视图,
--若不是视图,则查询出错,若是视图,则查询处理器根据用户对视图的定义,查询出结果,
--把查询的结果作为一张表格返回给SQL语句,从而完成SQL的查询
2、使用视图插入数据
语法:
insert 视图名
values(值列表)
当视图所依赖的基本表有多个时,不能向该视图插入数据,因为这将会影响多个基本表。
3、使用视图修改数据
语法:
update 视图名
set 列名=表达式[,列名=表达式[,...]]
当视图所依赖的基本表有多个时,则一次修改该视图只能变动一个基本表的数据。
4、使用视图删除数据
语法:
delete from 视图名
[where 条件]
可能通过视图删除其所依赖的基本表的数据。
修改视图的原则:
如果视图中不包含基表中被定义为非空的列时,通过视图向表中插入记录的操作将不能进行。
在定义视图的select语句后的字段列表中使用了数学表达式,不能通过这样的视图进行数据的更新操作(插入,修改,删除)
在定义视图的select语句后的字段列表中使用聚合函数,不能通过这样的视图进行数据的更新操作(插入,修改,删除)
在定义视图的select语句中使用了
distinct ,union , top , group by 或 having 子句,不能通过这样的视图进行数据的更新操作(插入,修改,删除)
四、修改视图的定义
语法:
alter view 要修改的视图名
as 新的查询语句
五、删除视图
语法:
drop view 视图名列表
六、索引
索引是对数据库表中一个或多个列的值进行排序的结构
SQL Server可以建立两种索引:
1、聚集索引
表中各行的物理顺序与索引顺序相同,一个表只能包含一个聚集索引
。
2、非聚集索引
表中各行的物理顺序与索引顺序可以不同,一个表中的每一列都可以有自己的非聚集索引,
类似书的目录,实际数据保存在一个地方,索引放在另一个地方,索引带有指针指向具体的位置。
在SQL Server两种基本类型索引基础之上我们可建立索引的唯一性。
唯一索引是作为聚集索引或非聚集索引的一部分而创建的,不能单独创建。
当你在表中创建 unique 或 primary key 约束后,SQL Server会在表中自动生成一个唯一索引。
填充因子是在创建索引时指定的,它用来在索引的各个页上预留一定比例的可用空间,以供将来进行数据扩充时使用。
填充因子指定了创建索引后要在页中输入数据的量。
语法:
with Fillfactor=x
--x>=1 and
x<=100
如果无须再修改数据,可以指定填充因子100,这样将完全占满索引页,因而所占用的存储空间最少。
如果需要频繁地修改表中的数据,则应指定一个较低的填充因子,以便在数据页中保留更多的空白空间 。
一、创建索引
语法:
create [ unique ] [ clustered | nonclustered ]
index 索引文件名
on 表名(列名)
[with fillfactor=x]
--nonclustered可以省略。
--在某列上创建了唯一索引,就不能向该列插入重复的值。
--可以为视图创建索引。
创建聚集索引的说明:
选择唯一值比例高的数据列,一般应选择主键列;
先创建聚集索引,再创建非聚集索引;
在创建聚集索引时使用FILLFACTOR选项以确保在插入新行时有足够的可用空间。
一个表可以有多个(最多249个)非聚集索引。
创建非聚集索引的说明:
除非绝对必要,否则请不要添加非聚集索引,这是因为非聚集索引需要额外的维护开销;
在频繁访问的列上建立索引;
默认情况下,CREATE INDEX 语句创建的是非聚集索引;
在相异值多的数据列上创建非聚集索引。
创建唯一索引的说明:
由于每一行都包含一个唯一的值,唯一索引可以确保实体完整性;
不能在包含重复数据的列上创建唯一索引;
在创建唯一索引前必须更新或删除重复的数据。
创建索引的说明:
适合创建索引情况:
该列频繁用于进行搜索;
该列用于对数据进行排序。
不适合创建索引情况:
列中仅包含几个不同的值;
表中仅包含几行。
二、索引的查看
语法:
[exec] sp_helpindex 表名
三、删除索引
语法:
drop index 表名 索引名