目录索引:
核心SQL语句:CREATE INDEX
一般格式:
CREATE [UNIQUE][CLUSTER] INDEX <索引名>
ON <表名>(<列名> [<次序>] [, <列名> [<次序>]]...)
表名为要建立基本表的名字,索引可以建立在该表的一列或多列上,各列名之间用逗号隔开。每个列名后面还可以用次序指定索引值的排列顺序,可选ASC(升序)或DESC(降序),默认为升序。
UNIQUE表明此索引的每一个索引值只对应唯一的数据记录
CLUSTER表示要建立的索引是聚簇索引。
例:为学生-课程数据库中的Student、Course和SC三个表建立索引,其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。
create unique index Stusno on Student(Sno);
create unique index Coucno on Course(Cno);
create unique index SCno on SC(Sno asc,Cno desc);
图形界面下查看我们刚刚建立的索引:
容易发现,除了我们自己建立的,还有一些是本来就有的,应该是DBMS自带的,不要轻易改动。
使用SQL语句查看某张表和整个库下的索引:
参考链接
-- 查询某张表的索引,如Student表
select * from sys.sysindexes
where id=object_id('Student');
-- 查询整个库的索引,如此时的stutest库
select * from sys.sysindexes
一般修改是对已经建立的索引进行重命名。一般格式如下:
ALTER INDEX <旧索引名> RENAME TO <新索引名>;
例:将SC表中的SCno索引名改为SCSno
错误代码:
alter index SCno rename to SCSno;
正确代码:
exec sp_rename 'SC.Scno','SCSno','index'
drop index Student.Stusno -- 必须要指定表名和索引名,否则报错!!!
create database insertDB;
use insertDB;
create table Student(
Sno char(9) primary key, /* 列级完整性约束条件,Sno是主码*/
Sname char(20) unique, /* Sname取唯一值*/
Ssex char(2),
Sage smallint,
Sdept char(20)
);
create table Course(
Cno char(4) primary key,
Cname char(40),
Cpno char(4),
Ccredit smallint,
foreign key(Cpno) references Course(Cno)
);
create table SC(
Sno char(9),
Cno char(4),
Grade smallint,
primary key(Sno,Cno),
foreign key(Sno) references Student(Sno),
foreign key(Cno) references Course(Cno)
);
要赋值的属性的顺序可以与表中的顺序不一致,但相同属性对应的数据类型要一致,且所赋值的内容要与要赋值的属性顺序一致,即自己写的要做到一一对应。
insert into Student(Sno,Sname,Ssex,Sdept,Sage)
values('201215128','陈东','男','IS',18);
insert into Course(Cno,Cname,Cpno,Ccredit)
values('1','数据库',NULL,4);
未指定的列自动赋为NULL值
insert into SC(Sno,Cno)
values('201215128','1');
此时相当于指定了所有属性,且插入顺序要与建表时的顺序一致
insert into Student
values('02056','樊萌萌','女',20,'CS');
指定表中的若干列和全查询
select Sno,Sname
from Student;
select Sname,Sno,Sdept
from Student;
select * from Student;
-- 等价于下列语句
select Sno,Sname,Ssex,Sage,Sdept
from Student;
例:查找Student表中的专业类别
直接查找会发现有相同的,因为不同的人可能会选择相同的专业
select Sdept from Student
select distinct Sdept from Student
下一篇将会总结查询中更为复杂和常用的子查询、分组查询、条件查询等~~