索引表
索引:对数据库表中一个或多列的值进行排序的结构
像书的索引一样,数据库索引就是为了使查询数据效率快
索引分为聚集索引和非聚集索引。非聚集索引是按照数据存放的物理位置为顺序的,能够提高检索的速度;而非聚集索引则不一样,非聚集索引对于单行的检索很快
索引使用B+树结构
创建索引
CREATE [UNIQUE] [CLUSTERED] INDEX <索引名> ON <表名>( <列名>[<次序>],<列名>[<次序>]);
其中次序:升序(ASC)降序(DSC),默认为升序
UNIQUE:表明此索引的每一个索引值只对应一个唯一的数据记录
CLUSTER:表明要建立的索引是聚集索引,索引项的顺序是按数据存放的物理位置组织的
例如要快速查找某出版社,则可以建立索引:CREATE INDEX book_idx2 ON book(出版社);
删除索引
DROP INDEX<索引名>
索引删除后便不再是数据库模式的一部分。
视图
视图时虚表,不含表中的任何列或数据,包含的是一个SQL查询。仅仅是用来查看存储在别处的数据的一种设施,返回的数据是从其他表中检索出来的。
视图应用
重用SQL语言、简化复杂的SQL操作,使用表的组成部分、保护数据、更改数据格式和表示、
视图使用规则
1、视图必须唯一命名
2、视图可以嵌套,创建的视图数目没有限制
3、ORDER BY可以在视图中使用,如果SELECT语句中含有ORDER BY,则视图中的ORDER BY将会被覆盖
4、视图不能索引
5、视图可以和表一起使用
创建视图
CREATE VIEW <视图名> AS <查询子句> [WITH CHECK OPTION];
查询子句可以是任意的SELECT 语句,但通常不允许含有ORDER BY和 DISTINCT
WITH CHECK OPTION 表示对UPDATE、INSERT、DELETE操作时保证修改、插入、删除必须满足子查询中的限制条件
例如在关系模式中 Student(Sno, Sname, Sage, Sex, SD, Email, Tel)建立“计算机系”(CS)学生的视图,并要求进行修改、插入、删除必须满足只有计算机系的学生
CREATE VIEW CS-Student AS SELECT Sno, Sname, Sage, Sex, FROM student WHERE SD = 'CS' WITH CHECK OPTION;
视图的属性列名可以省略,但在一定情况下需要明确指定视图的所有列名
(1)某个目标列是函数或算术表达式
(2)目标列为*
(3)多表连接时选出了几个同名列作为视图的属性字段
(4)需要为某个列取别名
基于视图的视图
1、建立一个信息系学生的视图,包含学号、姓名、院系、年龄
CREATE VIEW StudentView1
AS
SELECT Sno, Sname, Sdept, Sage
FROM student
WHERE Sdept = 'IS'
2、建立一个信息系且选修了1号课程的学生视图( 此时可以基于StudentView1视图再建立一个视图)
CREATE VIEW StudentView2
AS
SELECT StudentView1.Sno, Sname, cno, grade
FORM StudentView1, SC
WHERE StudentView1.Sno = SC.Sno AND Cno = '1';
使用视图
SHOW CRATE VIEW <视图名>;
修改视图
ALTER VIEW <视图名> [<列名>, <列名>] AS <子查询> [WITH CHECK OPTION];
删除视图
DROP VIEW <视图名> ;
若出现情况:V2表基于V1表建立。当V1表被删除,则V2表会导致无效
数据操纵语言
数据插入
关键字INSERT INTO
语句结构
INSERT INTO <表名> VALUES(字段名)
数据删除
DELETE FROM <表名> [WHERE 条件表达式]
数据修改
UPDATE <表名> SET 列名 = 值表达式
例如将老师的工资涨200 UPDATE teachers SET salary = salary + 200;
数据控制语言
数据控制是控制用户对数据的存储权力,有DBA决定
授权语句
GRANT <权限> ON <对象> <对象名> TO <用户> [WITH GRANT OPTION]
其中对象有:属性列、视图、基本表、数据库
1、对于属性列和视图,权限有:SSELECT(使用SELECT权限)、INSERT(使用INSERT权限)、 UPDATE(使用UPDATE权限) 、DELETE(使用DELETE权限) 、 ALL PRIVILEGES(上述四种权限的总和)
2、对于基本表,权限有:SELECT(使用SELECT权限)、INSERT(使用INSERT权限)、 UPDATE(使用UPDATE权限) 、DELETE(使用DELETE权限) 、ALTER(使用ALTER权限)、INDEX(使用CREATE INDEX权限和DROP INDEX权限) ALL PRIVILEGES(上述六种权限的总和)
3、对于数据库,CREATETAB建表权限
[WITH GRANT OPTION]表示获得了权限的用户可以将权限赋给其他用户
PUBLIC:表示全体用户
例如:给用户查看学生表的权限
GRANT SELECT ON TABLE Student TO User1;
给用户在数据库SPJ建表权限
GRANT CREATETAB ON DATABASE SPJ TO User2;
回收权限
REVOKE <权限> ON <对象> <对象名> FROM <用户名>;