Mysql约束与索引

本文围绕MySQL展开,介绍了多种约束,如主键、非空、唯一、外键和check约束,阐述了自增长字段的使用。同时,讲解了MySQL索引的原理、代价、添加和删除方式,还给出了适合创建索引的列的建议,保证了数据库数据的正确性和操作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

约束是作用于表中列上的规则,用于限制加入表的数据,约束的存在保证了数据库中数据的正确性、有效性和完整性。

primary key (主键)约束

用于唯一的标识表行的数据,当定义主键约束后,该列不能重复

字段名 字段类型 primary key

注意:

1.primary key 不能重复而且不能为null

2.一张表最多只能有一个主键,但可以是复合主键

primary key (列1,列2)

3.主键的指定方式有两种

        直接在字段名后指定:字段名 primary key

        在表定义最后写primary key(列名)

4.使用desc 表名, 可以看到primary key 的情况

5.在实际开发中,每个表往往都会设计一个主键

not null (非空)约束

如果在列上定义了not null,那么当插入数据时,必须为列提供数据

字段名 字段类型 not null

unique(唯一)约束

当定义了唯一约束后,该列值是不能重复的。

字段名 字段类型 unique

注意:

1.如果没有指定 not null ,则unique字段可以有多个null

2.一张表可以有多个unique 字段

foreign key(外键)约束

外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。

用于定义主表和从表之间的关系:外键约束要定义在从表上,主表则必须具有主键约束或是unique约束,当定义外键约束后,要求外键列数据必须在主表的之间列存在或是为null。

创建表时添加外键约束:

create table 表名 (列名 数据类型 ....)

[constraint] [外键名称] foreign key (本表列名) references 主表名(主键名或unique字段名)

建完表后删除外键约束:

alter table 表名 drop foreign key 外键名称

一对多实现方式:

在多的一方建立外键,关联一方主键

多对多实现方式:

建立第三张中间表,中间至少包含2个外键,分别关联双方主键

一对一实现方式:

在任意一方建立外键,关联对方主键,并设置外键唯一

注意:

1.外键指向的表的字段,要求是primary key 或者是unique

2.表的类型是引擎 innodb,这样的表才支持外键

3.外键字段的类型要和主键字段的类型一致(长度可以不同)

4.外键字段的值,必须在主键字段中出现过,或者为null[前提是外键字段允许为null]

5.一旦建立外主键的关系,数据不能随意删除了

check约束

用于强制行数据必须满足的条件

列名 类型 check (check条件)

mysql8.0开始支持check,之前只做语法校验,但不会生效

自增长

格式:

字段名 类型 primary key auto_increment

增加 自增长的字段方式

insert into 表名 (列1,列2...)values(null,'值2',...);

insert into 表名 (列2...)values('值2',...);

insert into 表名 values(null,'值2',...);

注意:

1.一般来说自增长是和primary key 配合使用的

2.自增长也可以单独使用[但是需要配合一个unique]

3.自增长修饰的字段为整数型的(虽然小数也可以但是非常非常少用)

4.自增长默认从1开始,也可以通过命令修改

alter table 表名 auto_increment = 新的开始值

5.如果你添加数据时,给自增长列指定的有值,则以指定的值为准,后面按照指定的值自增

mysql索引

索引的原理:

没有索引会全表扫描,所以会慢,使用索引会形成一个索引的数据结构,速度变快

索引的代价:

1.磁盘占用

2.对增删改语句的效率有影响

添加索引方式:

添加普通索引:

        create index 索引名 on 表名(列名)

        alter table 表名 add index 索引名 (列名)

添加唯一索引:

        create unique index 索引名 on 表名(列名)

添加主键索引:

        没有主键:

                alter table 表名 add primary key (列名)

        已有主键:

                alter table 表名 add index 索引名 (列名)

删除索引

drop index 索引名 on 表名

删除主键索引

alter table 表名 drop primary key

查询索引:

show index from 表名

show indexes from 表名

show keys from 表名

desc 表名

哪些列上适合使用索引:

1.较频繁的作为查询条件字段应该创建索引

2.唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件

3.更新非常频繁的字段不适合创建索引

4.不会出现在where子句中字段不该创建索引

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值