一、实训目的
①掌握索引的功能和作用。
②掌握索引的创建和管理方法。
③掌握数据完整性约束的功能和作用。
④掌握创建和管理数据完整性约束方法。
二、实训内容
1.按要求对 YGGL 库建立相关索引
(1)使用 CREATE INDEX 创建索引
①对 Employees 表中的员工部门号列创建普通索引 depart_ind。
代码:
create index depart_ind1 on Employees(员工部门号);
结果:
②对 Employees 表中的姓名和地址列创建复合索引 Ad_ind。
代码:
create index Ad_indon employees(姓名,地址);
③对 Departments 表中的 DepartmentName 列创建唯一索引。
代码:
create unique index u_ind on Departments(部门名称);
(2)使用 Alter Table 添加索引
①对 Employees 表中的出生日期列添加一个唯一索引 date _ind,姓名和性别列添加一个复合索引 na_ind。
代码:
alter table employees add unique data_ind(出生日期), add index na_ind(姓名,性别);
②对 Departments 表中的部门编号列创建主键索引。
代码:
mysql> alter table Departments-> add primary key(部门编号);
(3)创建表的同时创建索引
创建表 cpk(产品编号,产品名称,单价,库存量),并对产品编号创建主键,在库存量和单价列上创建复合索cpk_fh。
代码:
mysql> create table cpk(-> 产品编号 char(10) not null,-> 产品名称 char(10) not null,-> 单价 float(5),-> 库存量 int(8),-> primary key(产品编号),-> index cpk_fh(库存量,单价)); Query OK, 0 rows affected (0.01 sec)
2.显示 Employees 表的索引情况
代码:
show index from Employees;
结果:
3.数据完整性约束
①创建一个员工奖金发放表 jj(employeeID, je),其中 jji 表中 employeeID 为主键,其值必须是 Employees 表员工编号列中已有的员工号,并且当删除和修改 Employees 表中员工编号列时,在jj 表员工编号列中的数据也要随之变化。创建ji 表,建立相关的完整性约束。
代码:
mysql> create table jj(-> 员工编号 char(6) primary key,-> 金额 decimal,-> constraint fk_jj_Employees foreign key (员工编号)-> references Employees(员工编号)-> on delete cascade->on update cascade); Query OK, 0 rows affected (0.01 sec)
②创建表雇员表 EMP,只考虑工号和性别两列,性别只能包含男或女。
代码:
mysql> create table EMP(-> 工号 char(8) not null,-> 性别 char(2) not null,->check(工号 in (select 员工编号 from Employees)),-> check(性别 in (select 性别 from Employees))); Query OK, 0 rows affected (0.01 sec)
③创建表雇员表 EMP_1,只考虑工号和出生日期两列,出生日期必须大于 1980年1月1日。
代码:
mysql> create table EMP_1(-> 工号 char(8) not null,-> 出生日期 date not null-> check(出生日期>'1980-01-01')); Query OK, 0 rows affected (0.01 sec)
④创建表雇员表 EMP_2,只考虑工号和性别两列,并且确认性别列中所有的值来源于EMP 表的性别列中。
代码:
mysql> create table EMP_2(-> 工号 char(9) not null,-> 性别 char(2) not null,-> check(性别 in (select 性别 from EMP)));Query OK, 0 rows affected (0.01 sec)
⑤创建表 EMP 3,有工号、工资和扣款3 列,要求工资必须大于扣款。
代码:
mysql> create table EMP_3(-> 工号 char(8) not null,-> 工资 float(5) not null,-> 扣款 float(5) not null,-> check (工资>扣款)); Query OK, 0 rows affected (0.01 sec)