21天好习惯 第一期-14

索引表

索引:对数据库表中一个或多列的值进行排序的结构

像书的索引一样,数据库索引就是为了使查询数据效率快

索引分为聚集索引和非聚集索引。非聚集索引是按照数据存放的物理位置为顺序的,能够提高检索的速度;而非聚集索引则不一样,非聚集索引对于单行的检索很快

索引使用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 <用户名>;

上一篇:select......for update会锁表还是锁行


下一篇:apt update报错“Unsupported proxy configured“解决办法