mysql

索引
大多以B-tree方式存储;
普通索引(index)
唯一性索引(unique):索引列的所有值都只能出现一次;
主键(primary key):每个表只能有一个
全文索引(fulltext):只能在varchar或text类型的列上创建,只能在myisam表中创建;
创建索引
1)create index
默认升序(asc);
create index xh_xs on xs(学号(5) asc);
根据xs表的学号列上的钱5个字符建立一个升序索引xh_xs;
create index xskc_in on xs_kc(学号,课程号);在xs_kc表的学号列和课程号列上建立一个复合索引


xskc_in;
2)
alter table xs add index xs_xm using btree(姓名);
alter table xs add primary key(学号),add index mark(性别);
show index from xs;
3)在创建表时创建索引
create table xs_kc1
(
学号 char(6) not null,
课程号 char(3) not null,
成绩 tinyint(1),
学分 tinyint(1),
primary key(学号,课程号),
index cj(成绩)
);


删除索引
drop index xs_xh on xs;
alter table xs drop primary key,drop index mark;
索引的弊端:
索引以文件形式存储,要占用磁盘空间;
表中索引很多时,会降低添加、删除、修改、和其他写入操作的效率;


数据完整性约束
1)主键约束
create table xs1
(
学号 varchar(6) null,
姓名 varchar(8) not null primary key,
出生日期 datetime
);
create table course
(
学号 varchar(6) not null,
姓名 varchar(8) not null,
毕业日期 date   not null,
课程号 varchar(3),
学分   tinyint,
primary key(学号,课程号,毕业日期)
);
列的组合也可以充当主键
从一个复合主键中删除一列后,剩下的列构成主键仍然满足唯一性原则,那么这个复合主键是不正确的


,这条规则叫最小化规则;也就是说复合主键不应该包含一个不必要的列。
create table course1
(
学号 varchar(6) null,
姓名 varchar(8) not null,
毕业日期 datetime not null,
课程号 varchar(3),
学分  tinyint,
primary key index_course(学号,课程号,毕业日期)
);
2)替代建约束(unique)
替代建是没有被选做主键的候选键
create table xs2
(
学号 varchar(6)  null,
姓名 varchar(8 ) not null unique,
出生日期 datetime null,
primary key(学号)
);
替代键也可以定义为表的完整性约束;
create table xs1
(
学号 varchar(6)  null,
姓名 varchar(8 ) not null,
出生日期 datetime null,
primary key(学号),
unique(姓名)
);
一个表中可以有若干个UNIQUE键,它们甚至可以重合;主键字段的值不允许为null????,unique可以


,但必须声明;
3)参照完整性约束
很多规则是和表之间的关系有关的,这种关系就是参照完整性约束,实现为一个外键。
create table xs1
(
学号 varchar(6) null,
姓名 varchar(8) not null,
出生日期 datetime null,
primary key(姓名),
foreign key(学号) references xs(学号)
)default charset=gb2312;
自参照完整性
create table xs1
(
学号 varchar(6) null,
姓名 varchar(8) not null,
出生日期 datetime null,
primary key(姓名),
foreign key(学号) references xs1(学号)
)default charset=gb2312;


create table xs1
(
学号 varchar(6) null,
姓名 varchar(8) not null,
出生日期 datetime null,
primary key(姓名),
foreign key(学号) references xs(学号) on update cascade
)default charset=gb2312;
这个参照动作的作用是在主表更新时,子表产生连锁更新动作。


create table student
(
学号 char(6) not null,
性别 char(1) not null check(性别 in('男','女'))
);


create table student1
(
学号 char(6) not null,
出生日期 date not null check(出生日期>'1980-01-01')
);


create table student2
(
学号 char(6) not null,
性别 char(1) not null check(性别 in(select 性别 from student))
);


create table student3
(
学号 char(6) not null,
最好成绩 int(1) not null,
平均成绩 int(1) not null,
check(最好成绩>平均成绩)
);
命名完整性约束
create table xs5 
(
学号 varchar(6) null,
姓名 varchar(8) not null,
出生日期 datetime null constraint primary_key_xs1 primary key(姓名)
);
本例中给主键姓名分配了名字primary_key_xs1;


删除完整性约束
alter table xs drop primary key;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值