数据库实训7【索引与数据完整性约束的创建】

一、实训目的

①掌握索引的功能和作用。
②掌握索引的创建和管理方法。
③掌握数据完整性约束的功能和作用。
④掌握创建和管理数据完整性约束方法。

二、实训内容

1.按要求对 YGGL 库建立相关索引

(1)使用 CREATE INDEX 创建索引
①对 Employees 表中的员工部门号列创建普通索引 depart_ind。

代码:

 create index depart_ind1 on Employees(员工部门号);

结果:

在这里插入图片描述

②对 Employees 表中的姓名和地址列创建复合索引 Ad_ind。

代码:

create index Ad_ind  on 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)

各位靓仔靓女点个关注支持支持呗 , 拜托啦

在这里插入图片描述

  • 47
    点赞
  • 119
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

葡萄成熟时_

谢谢您,祝您生活愉快,所想及得

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值