实验十四 MySQL索引
班级: 18 班 姓 名:
学号: 指导教师:
一、实验目的
二、实验内容
create database xscj;
use xscj;
create table xs
(
学号 char(6) not null primary key,
姓名 char(8) not null,
专业名 char(10) null,
性别 tinyint(1) not null default 1,
出生日期 date not null,
总学分 tinyint(1) null,
照片 blob null ,
备注 text null
) engine = innodb;
insert into xs values
(‘081101’,‘王林’,‘计算机’,1,‘1994-02-10’,50,null,null),
(‘081102’,‘程明’,‘计算机’,1,‘1995-02-01’,50,null,null),
(‘081103’,‘王燕’,‘计算机’,0,‘1993-10-06’,50,null,null),
(‘081104’,‘韦平平’,‘计算机’,1,‘1994-08-26’,50,null,null),
(‘081106’,‘李方方’,‘计算机’,1,‘1994-11-20’,50,null,null),
(‘081107’,‘李明’,‘计算机’,1,‘1994-05-01’,54,null,‘提前修完“数据结构,并获得学分”’),
(‘081108’,‘林一帆’,‘计算机’,1,‘1993-08-05’,52,null,‘已提前修完一门课’),
(‘081109’,‘张强明’,‘计算机’,1,‘1993-08-11’,50,null,null),
(‘081110’,‘张蔚’,‘计算机’,0,‘1995-07-22’,50,null,‘三好生’),
(‘081111’,‘赵琳’,‘计算机’,0,‘1994-03-18’,50,null,null),
(‘081113’,‘严红’,‘计算机’,0,‘1993-08-11’,48,null,‘有一门课不及格,待补考’),
(‘081201’,‘王敏’,‘通信工程’,1,‘1993-06-10’,42,null,null),
(‘081202’,‘王林’,‘通信工程’,1,‘1993-01-29’,40,null,‘有一门课不及格,待补考’),
(‘081204’,‘马琳琳’,‘通信工程’,0,‘1993-01-29’,42,null,null),
(‘081206’,‘李计’,‘通信工程’,1,‘1993-09-20’,42,null,null),
(‘081210’,‘李红庆’,‘通信工程’,1,‘1993-05-01’,44,null,‘已提前修完一门课,并获得学分’),
(‘081216’,‘孙祥欣’,‘通信工程’,1,‘1993-03-09’,42,null,null),
(‘081218’,‘孙研’,‘通信工程’,1,‘1994-10-09’,42,null,null),
(‘081220’,‘吴薇华’,‘通信工程’,0,‘1994-03-18’,42,null,null),
(‘081221’,‘刘燕敏’,‘通信工程’,0,‘1993-11-12’,42,null,null),
(‘081241’,‘罗林琳’,‘通信工程’,0,‘1994-01-30’,50,null,‘转专业学习’);
create table kc
(
课程号 char(3) not null primary key,
课程名 char(16) not null,
开课学期 tinyint(1) not null default 1,
学时 tinyint(1) not null,
学分 tinyint(1) null
);
create table xs_kc
(
学号 char(6) not null,
课程号 char(3) not null,
成绩 tinyint(1) null,
学分 tinyint(1) null,
primary key(学号,课程号)
);
insert into kc values
(‘101’,‘计算机基础’,1,80,5),
(‘102’,‘程序设计与语言’,2,68,4),
(‘206’,‘离散数学’,4,68,4),
(‘208’,‘数据结构’,5,68,4),
(‘209’,‘操作系统’,6,68,4),
(‘210’,‘计算机原理’,5,85,5),
(‘212’,‘数据库原理’,7,68,4),
(‘301’,‘计算机网络’,7,51,3),
(‘302’,‘软件工程’,7,51,3);
insert into xs_kc values (‘081101’,‘101’,80,5);
insert into xs_kc values (‘081101’,‘102’,78,4);
insert into xs_kc values (‘081101’,‘206’,76,4);
insert into xs_kc values (‘081102’,‘102’,78,4);
insert into xs_kc values (‘081102’,‘206’,78,4);
insert into xs_kc values (‘081103’,‘101’,62,5);
insert into xs_kc values (‘081103’,‘102’,70,4);
insert into xs_kc values (‘081103’,‘206’,81,4);
insert into xs_kc values (‘081104’,‘101’,90,5);
insert into xs_kc values (‘081104’,‘102’,84,4);
insert into xs_kc values (‘081104’,‘206’,65,4);
insert into xs_kc values (‘081106’,‘101’,65,5);
insert into xs_kc values (‘081106’,‘102’,71,4);
insert into xs_kc values (‘081106’,‘206’,80,4);
insert into xs_kc values (‘081107’,‘101’,78,5);
insert into xs_kc values (‘081107’,‘102’,80,4);
insert into xs_kc values (‘081107’,‘206’,68,4);
insert into xs_kc values (‘081108’,‘101’,85,5);
insert into xs_kc values (‘081108’,‘102’,64,4);
insert into xs_kc values (‘081108’,‘206’,87,4);
insert into xs_kc values (‘081109’,‘101’,66,5);
insert into xs_kc values (‘081109’,‘102’,83,4);
insert into xs_kc values (‘081109’,‘206’,70,4);
insert into xs_kc values (‘081110’,‘101’,95,5);
insert into xs_kc values (‘081110’,‘102’,90,4);
insert into xs_kc values (‘081110’,‘206’,89,4);
insert into xs_kc values (‘081111’,‘101’,91,5);
insert into xs_kc values (‘081111’,‘102’,70,4);
insert into xs_kc values (‘081111’,‘206’,76,4);
insert into xs_kc values (‘081113’,‘101’,63,5);
insert into xs_kc values (‘081113’,‘102’,79,4);
insert into xs_kc values (‘081113’,‘206’,60,4);
insert into xs_kc values (‘081201’,‘101’,80,5);
insert into xs_kc values (‘081202’,‘101’,65,5);
insert into xs_kc values (‘081203’,‘101’,87,5);
insert into xs_kc values (‘081204’,‘101’,91,5);
insert into xs_kc values (‘081210’,‘101’,76,5);
insert into xs_kc values (‘081216’,‘101’,81,5);
insert into xs_kc values (‘081218’,‘101’,70,5);
insert into xs_kc values (‘081220’,‘101’,82,5);
insert into xs_kc values (‘081221’,‘101’,76,5);
insert into xs_kc values (‘081241’,‘101’,90,5);
create database YGGL;
use YGGL;
create table Employees
(
编号 char(6) not null primary key,
姓名 char(10) not null,
学历 char(4) not null,
出生日期 date not null,
性别 tinyint(1) not null default’1’,
工作时间 tinyint(1) null,
住址 varchar(20) null,
电话 char(12) null,
部门号 char(3) not null
);
create table Departments
(
部门号 tinyint(1) not null primary key,
部门名称 char(5) not null,
备注 varchar(20) null
);
create table Salary
(
编号 char(6) not null primary key,
收入 float(6) not null,
支出 float(6) not null
);
insert into Employees values
(‘000001’,‘王林’,‘大专’,‘1966-01-23’,1,8,‘中山路32*-1-508’,‘83355668’,‘2’),
(‘010008’,‘伍容华’,‘本科’,‘1976-03-28’,1,3,‘北京东路100-2’,‘83321231’,‘1’),
(‘020010’,‘王向容’,‘硕士’,‘1982-12-09’,1,2,‘四牌楼 10-0-108’,‘83792361’,‘1’),
(‘020018’,‘李丽’,‘大专’,‘1960-07-30’,0,6,‘中山东路102-2’,‘83413301’,‘1’),
(‘102201’,‘刘明’,‘本科’,‘1972-10-18’,1,3,‘虎踞路100-2’,‘83606608’,‘5’),
(‘102208’,‘朱俊’,‘硕士’,‘1965-09-28’,1,2,‘牌楼巷5-3-106’,‘84895568’,‘5’),
(‘108991’,‘钟敏’,‘硕士’,‘1979-08-10’,0,4,‘中山路10-3-105’,‘83346454’,‘3’),
(‘111006’,‘张石兵’,‘本科’,‘1974-10-01’,1,1,‘解放军34-1-203’,‘83358777’,‘5’),
(‘210678’,‘林涛’,‘大专’,‘1977-04-02’,1,2,‘中山北路24-35’,‘83345656’,‘3’),
(‘302566’,‘李玉珉’,‘本科’,‘1968-09-20’,1,3,‘热和路209-3’,‘58765991’,‘4’),
(‘308759’,‘叶凡’,‘本科’,‘1978-11-18’,1,2,‘北京西路3-7-52’,‘83364644’,‘4’),
(‘504209’,‘陈林琳’,‘大专’,‘1969-09-03’,0,5,‘汉中路120-4-12’,‘84445656’,‘4’);
insert into Departments values
(1,‘财务部’,null),
(2,‘人力资源部’,null),
(3,‘经理办公室’,null),
(4,‘研发部’,null),
(5,‘市场部’,null);
insert into Salary values
(‘000001’,2100.8,123.09),
(‘010008’,1582.62,88.03),
(‘102201’,2569.88,185.65),
(‘111006’,1987.01,79.58),
(‘504209’,2066.15,108.0),
(‘302566’,2980.7,210.2),
(‘108991’,3259.98,281.52),
(‘020010’,2860.0,198.0),
(‘020018’,2347.68,180.0),
(‘308759’,2531.98,199.08),
(‘210678’,2240.0,121.0),
(‘102208’,1980.0,100.0);
3. 使用create index语句,根据xs表的姓名列建立一个降序BTREE索引xs_xh。
Create index xs_xh
On xs(姓名 desc);
4.使用alter table语句,根据xs表的姓名列建立一个降序BTREE索引xs_xha。
Alter table xs
Add index xs_xha using btree(姓名 desc);
5. 使用create table语句,根据xs表的姓名列建立一个降序BTREE索引xs_xhb。
Use xscj;
create table xs
(
学号 char(6) not null primary key,
姓名 char(8) not null,
专业名 char(10) null,
性别 tinyint(1) not null default 1,
出生日期 date not null,
总学分 tinyint(1) null,
照片 blob null ,
备注 text null,
Index xs_xhb using btree(姓名 desc)
) engine = innodb;
5. 使用三种方式,在xs_kc表的课程号和成绩列上建立一个复合索引xskc_kch_cj。
Use xscj;
Create index xskckch_cj
On xs_kc(课程号,成绩);
Alter table xs_kc
Add index xskckch_cj on(课程号,成绩);
On xs_kc(课程,成绩);
create table xs_kc
(
学号 char(6) not null,
课程号 char(3) not null,
成绩 tinyint(1) null,
学分 tinyint(1) null,
primary key(学号,课程号) ,
Index x_cj (课程号,成绩)
);
在xs_kc表的课程号列上创建一个非唯一的索引xskc_kch。
Alter table xs_kc
Add index xskc_kch(课程号);
在xs表(假设表中主键未定)的姓名和性别列建立复合索引xs_xm_xb,并查看表中创建的索引的情况。
Create index xs_xm_xb
On xs (姓名,性别);
Show index from xs;
在test数据库创建xs表,带有姓名和出生日期的联合主键,并在学号列上创建索引。
Use text;
create table xs
(
学号 char(6) not null ,
姓名 char(8) not null,
专业名 char(10) null,
性别 tinyint(1) not null default 1,
出生日期 date not null,
总学分 tinyint(1) null,
照片 blob null ,
Primary key(姓名,出生日期),
Index search(学号)
) engine = innodb;
使用Drop index语句删除xs表上的xs_xm_xb索引。
Drop index xs_xm_xb on xs;
使用alter table语句删除xs表上的xs_xh索引。
Alter table xs
Drop index xs_xh;
对YGGL数据库的Employees表中的WorkYear列建立索引。
Create index WY
On employees(工作时间);
在Employees表的Name和Sex列建立复合索引。
Create index ENS
On employees(姓名 ,性别);
对Departments表的DepartmentName列建立唯一性索引,并查看表中索引。
对Employees表的PhoneNumber列前6位进行前缀索引。
Create unique index PH
On employees (电话(6)asc);
向Employees表中的出生日期列添加一个唯一性索引,在姓名列和电话列上添加一个复合索引。
Create unique index sy
on employees(出生日期);
Create index NP
On employees(姓名,电话);
17. 假设Departments表中没有主键,使用alter table 语句将DepartmentID列设为主键。
Alter table departments add Primary key(部门号);
创建与Departments表相同结构设为表Departments1,将DepartmentName设为主键,在DepartmentID上建立一个索引。
Create table departments1
(
部门号 tinyint(1) not null ,
部门名称 char(5) not null,
备注 varchar(20) null,
Primary key(部门名称),
Index id(部门号)
);
使用drop index语句删除Employees表上的索引。
Drop index PH from employees;
使用alter table语句删除Departments表上的主键和索引。
Alter table departments
drop primary key,
Drop index;