第1关:索引与完整性

任务描述
经理觉得查找数据的速度偏慢、精度较低,这个时候,你需要创建索引来使查询的速度更快,使用完整性来提高查询精度。

上述查询功能需要你掌握索引的使用方法、理解数据完整性的概念及分类、掌握各种数据完整性的实现方法。下面就是对这些内容的详细教程,请先仔细阅读。

背景知识
索引
索引是根据表中一列或若干列按照一定的顺序建立的列值与记录行之间的对应关系表。在列上创建了索引之后,查找数据是可以直接根据该列上的索引找到对应行的位置,从而快速找到数据。

索引类型分成下列几个:

普通索引(INDEX):基本索引类型
唯一性索引(UNIQUE):该列的所有值没有重复
主键(PRIMARY KEY):一种唯一性索引,一个表只能有一个主键
全文索引(FLLTEXT):只能在varchar或text类型上创建
语法格式:

//创建
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名称 ON 表名{字段名称[(长度)] [ASC|DESC]}
//修改
ALTER TABLE tbl_name ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX索引名称(字段名称[(长度)][ASC|DESC]);
下面我们用命令行操作试一试。

在创建好整个数据库的基础上,对YGGL数据库的emp表的ename列建立索引:

create index emp_name_idx
    on emp(ename);
查看是否创建成功:

show index from emp;
重命名索引:

alter index emp_name_idx
    rename to emp_idx;
删除索引:

drop index emp_idex;
数据完整性
为了防止不合规定的数据进入基表中,我们定义完整性规则。分为:域完整性、实体完整性和参照完整性。

域完整性
域完整性又叫列完整性,主要是对一列的数据进行约束。比如emp中限定sex的值只能为1和2中的一个,可以在创建表时将sex做以下定义:

   sex int(1) check(sex='1' or sex='2') NOT NULL,
或者在所有字段定义完成后加一句:

constraint ch_sex check(sex='1' or sex='2')
下面,我们在命令行中通过修改表的方式创建约束:

alter table emp
    add(constraint ch_sex check(sex='1' or sex='2'));
删除约束:

alter table emp
    drop constraint ch_sex;
实体完整性
又叫行完整性,要求每一行都有一个唯一的标识符。比如emp中的员工eid是唯一的,才能唯一确定某一个人。通过unique约束和primary key约束可以实现实体完整性。

同样的,在创建表时对tel创建约束应该将tel定义为:

tel    char(12)     NULL constraint un_tel unique,
下面我们在命令行中通过修改表的方式创建约束:

alter table emp
    add constraint un_tel unique(tel);
参照完整性
又叫引用完整性,它保证主表和从表中的数据一致性,实现方式是定义外键与主键。例如emp和sal表,eid在emp中是外键,而在sal中eid定义为主键。

从表不能引用主表不存在的键值
主表中的值更改了,则从表中所有引用都也要修改
若要删除主表中的记录,应先删除从表中匹配的记录
如果在创建sal表时想创建参照完整性使emp表中所有eid都要出现在sal中,可以在定义emp的eid时这样定义:

eid    char(6)      NOT NULL references sal(eid),
下面我们在命令行中通过修改表的方式定义:

alter table emp
    add constraint sal_id foreign key(eid)
        references sal(eid);
编程要求
同样的,你需要在我们已经创建好整个YGGL数据库的基础上进行以下操作:

建立索引pk_xs_bak:对emp的eid建立索引;
实现域完整性ch_tel:为emp的tel建立check约束,其值只能为0-9的数字;
实现实体完整性un_dept:为dept的dname创建唯一性索引;
实现参照完整性fk_emp:将emp中的did列为外键。

评测说明
请在右侧代码窗口输入MySQL语句实现以上操作,平台将自动编译你输入的MySQL语句。
请注意语句的格式并且不要有空行哦:)

特别提醒:SQL文件的代码不能有空行,否则会报语法错误!
特别提醒:SQL文件的代码不能有空行,否则会报语法错误!
特别提醒:SQL文件的代码不能有空行,否则会报语法错误!

//请在下面输入创建索引的MySQL语句
/*********begin*********/
create index pk_xs_bak
on emp(eid);

/*********end*********/

//请在下面输入实现域完整性的MySQL语句
/*********begin*********/

alter table emp
    add(constraint ch_tel check(tel between 0 and 9));

/*********end*********/

//请在下面输入实现实体完整性的MySQL语句
/*********begin*********/
alter table dept
add constraint un_dept unique(dname);


/*********end*********/

//请在下面输入实现参照完整性的MySQL语句
/*********begin*********/

alter table emp
    add constraint sal_id foreign key(eid)
        references sal(eid);

/*********end*********/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值