mysql索引和数据完整性答案_第5章MySQL索引与完整性约束.ppt

第5章MySQL索引与完整性约束

5.3.4 CHECK完整性约束 CHECK完整性约束在创建表的时候定义。可以定义为列完整性约束,也可定义为表完整性约束。 语法格式: CHECK(expr) 【例5.13】创建表student,只包括学号和性别两列,性别只能是男或女。 create table student ( 学号 char(6) not null, 性别 char(1) not null check(性别 in ('男', '女')) ); 5.3.4 CHECK完整性约束 【例5.14】创建表student1,只包括学号和出生日期两列,出生日期必须大于1990年1月1日。 create table student1 ( 学号 char(6) not null, 出生日期 date not null check(出生日期>'1990-01-01') ); 5.3.4 CHECK完整性约束 前面的CHECK完整性约束中使用的表达式都很简单,MySQL还允许使用更为复杂的表达式。例如,可以在条件中加入子查询,下面举个例子。 【例5.15】创建表student2,只包括学号和性别两列,并且确认性别列中的所有值都来源于student表的性别列中。 create table student2 ( 学号 char(6) not null, 性别 char(1) not null check( 性别 in ( select 性别 from student) ) ); 5.3.4 CHECK完整性约束 如果指定的完整性约束中,要相互比较一个表的两个或多个列,那么该列完整性约束必须定义表完整性约束。 【例5.16】创建表student3,有学号、最好成绩和平均成绩3列,要求最好成绩必须大于平均成绩。 create table student3 ( 学号 char(6) not null, 最好成绩 int(1) not null, 平均成绩 int(1) not null, check(最好成绩>平均成绩) ); 5.3.5 命名完整性约束 CONSTRAINT关键字用来指定完整性约束的名字,语法格式为: CONSTRAINT [symbol] symbol为指定的名字,这个名字在完整性约束的前面被定义,在数据库里这个名字必须是唯一的。如果它没有被给出,则MySQL自动创建这个名字。只能给表完整性约束指定名字,而无法给列完整性约束指定名字。 【例5.17】创建与【例5.8】中相同的xs1表,并为主键命名。 create table xs1 ( 学号 varchar(6) null, 姓名 varchar(8) not null, 出生日期 datetime null, constraint primary_key_xs1 primary key(姓名) ); 5.3.6 删除完整性约束 如果使用一条DROP TABLE语句删除一个表,所有的完整性约束就都自动被删除了。被参照表的所有外键也都被删除了,使用ALTER TABLE语句,完整性可以独立地被删除,而不必删除表本身。删除完整性约束的语法和删除索引的语法一样。 【例5.18】删除创建的表xs1的主键。 alter table xs1 drop primary key; 删除前后的效果如下: 第5章 MySQL索引与完整性约束 MySQL索引 5 . 1 5 . 2 MySQL索引创建 MySQL数据完整性约束 5 . 3 5.1 MySQL索引 5.1.1 索引及作用 1. 索引 索引是根据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表。在列上创建了索引之后,查找数据时可以直接根据该列上的索引找到对应行的位置,从而快速地找到数据。 例如,如果用户创建了xs表中学号列的索引,MySQL将在索引中排序学号列,对于索引中的每一项,MySQL在内部为它保存一个数据文件中实际记录所在位置的“指针”。因此,如果要查找学号为“081241”的学生信息,MySQL能在学号列的索引中找到“081241”的值,然后直接转到数据文件中相应的行,准确地返回该行的数据。 5.1.1 索引及作用 2.索引作用 在数据库系统中建立索引主要有以下作用: 快速读取数据; 保证数据记录的唯一性; 实现表与表之间的参照完整性; 在使用GROUP BY、ORDER BY子句进行数据检索时,利用索引可减少排序和分组的时间。 5.1.1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值