❖建立索引(INDEX)的目的:加快查询速度
❖关系数据库管理系统中常见索引:
◼ 顺序文件上的索引
◼ B+树索引
◼ 散列(hash)索引
◼ 位图索引
❖语句格式
CREATE [UNIQUE] [CLUSTER] INDEX<索引名>
ON <表名>(<列名>[<次序>[,<列名>[<次序>]]...);
<表名>:要建索引的基本表的名字
索引:可以建立在该表的一列或多列上,各列名之间用逗号分隔
<次序> :指定索引值的排列次序,升序:ASC,降序:DESC。 缺省值:ASC
UNIQUE:此索引的每一个索引值只对应唯一的数据记录
CLUSTER:表示要建立的索引是聚簇索引An Introduction to Database System
CREATE UNIQUE INDEX Stusno ON Student(Sno);
--学号默认升序
CREATE UNIQUE INDEX Coucno ON Course(Cno);
--课程号默认升序
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
--学号升序 ,学号若相同则按照课程号降序排列
❖ALTER INDEX<旧索引名> RENAME TO <新索引名>
ALTER INDEX SCno RENAME TO SCSno
但,alter不能改变索引名,如若改变索引名就需要调用存储过程。
正确方法是
SQL Server rename
EXEC sp_rename 'SC.SCno','SCSno','INDEX';
❖DROP INDEX <索引名> ;
删除索引时,系统会从数据字典中删去有关该索引的 描述。
[例3.15] 删除Student表的Stusname索引
DROP INDEX Stusname
报错
改为
DROP INDEX Stusno on Student;
❖数据字典是RDBMS内部的一组系统表,它记录 了数据库中所有定义信息:
◼ 关系模式定义 ◼ 视图定义 ◼ 索引定义 ◼ 完整性约束定义 ◼ 各类用户对数据库的操作权限 ◼ 统计信息等
❖RDBMS在执行SQL的数据定义语句时,实际上 就是在更新数据字典表中的相应信息
❖两种插入数据方式
◼ 插入元组
◼ 插入子查询结果
可以一次插入多个元组
1、插入元组
语句格式
INSERT
INTO <表名> [(<属性列1>[,<属性列2>)]
VALUES (<常量1>[,<常量2>]...);
❖ 功能
将新元组插入指定表中
语句介绍
❖ INTO子句
◼ 指定要插入数据的表名及属性列
◼ 属性列的顺序可与表定义中的顺序不一致
◼ 没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定 义中的顺序一致
◼ 指定部分属性列:插入的元组在其余属性列上取空值
❖VALUES子句
◼ 提供的值必须与INTO子句匹配
值的个数
值的类型An Introduction to Database System
INSERT
INTO Student (Sno,Sname,Ssex,Sdept,Sage)
VALUES ('201215128','陈冬','男','IS',18);
同样的方法,在对Course 表进行插入时
所以Cpno要么为null要么等于Course中某个元组主码值
由于这是第一次插入
所以 我们可以
INSERT
INTO Course(Cno,Cname,Cpno,Ccredit)
VALUES ('1','数据库',NULL,4);
INSERT
INTO Student
VALUES ('201215126','张成民','男',18,'CS');
INSERT
INTO SC(Sno,Cno)
VALUES ('201215128 ',' 1 ');
SELECT Sno,Sname FROM Student;
SELECT Sname,Sno,Sdept FROM Student;
◼ 选出所有属性列:
在SELECT关键字后面列出所有列名
将<<目标列表达式>指定为 *
SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student;
SELECT *
FROM Student;
◼ SELECT子句<<目标列表达式>的不仅可以为表中的属性列,也可以是表达式
SELECT Sname,2016-Sage /*假设当时为2016年*/
FROM Student;
SELECT Sname,
'Year of Birth: '
,2014-Sage,LOWER(Sdept)
FROM Student;
❖使用列别名改变查询结果的列标题
SELECT Sname NAME,'Year of Birth:' BIRTH, 2014-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT FROM Student;
SELECT Sno FROM SC;
--等价于:
SELECT ALL Sno FROM SC
SELECT DISTINCT Sno FROM SC;
未完待续。。。。