Mysql第二章:完整性约束条件

本文介绍了数据库完整性约束的概念及其重要性,并详细列举了多种约束类型,包括主键、自增、非空、默认值、唯一索引等,通过具体示例展示了如何在MySQL中应用这些约束。

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

目录

1:什么是完整性约束?为什么使用完整性约束?

2:约束分类(按照功能划分)

3:使用案例

3.1:PRIMARY KEY主键测试

3.2:AUTO_INCREMENT测试

3.3:NOT NULL(非空约束,插入不能给空值)

3.4:DEFAULT(列的默认约束)

3.5:UNIQUE KEY(唯一索引,一个表中可以有多个,同样的值不能重复,但是null除外)

3.6:mysql的索引类型

Normal 普通索引

Unique 唯一索引

Full Text 全文索引

SPATIAL 空间索引


1:什么是完整性约束?为什么使用完整性约束?

    数据完整性约束是为了防止不合规范的数据进入数据库,在用户进行增加、修改、删除等操作的时候自动按照一定约束条件进行检查,是不合规范的数据不能进入数据库,保证数据的完整和一致性。侧面也能提高程序运行效率,降低程序复杂性。

2:约束分类(按照功能划分)

1.UNSIGNED(表示没有负数从零开始,应用于mysql的数值类型)

2.ZEROFILL(当数值类型的数据长度不够时,会自动把0填充到数字前至数据的约定长度,自动添加UNSIGNED)

3.NOT NULL(非空约束,插入不能给空值)

4.DEFAULT(列的默认约束)

5.PRIMARY KEY(主键,标识数据唯一性,不能重复自动禁止为空)

6.UNIQUE KEY(唯一索引,一个表中可以有多个,同样的值不能重复,但是null除外)

7.AUTO_INCREMENT(用于数值类型自动增长,默认从1开始)

8.FOREIGN KEY(外键约束)

3:使用案例

3.1:PRIMARY KEY主键测试


CREATE TABLE test_primary_key(
    id INT PRIMARY KEY,   不加UNSIGNED
    username VARCHAR(20)
);
INSERT test_primary_key(id,name) VALUES(1,'张三');     运行结果成功
INSERT test_primary_key(id,name) VALUES(0,'张三');     运行结果成功

INSERT test_primary_key(id,name) VALUES(-1,'张三');    运行结果成功

CREATE TABLE test_primary_key1(
    id INT UNSIGNED PRIMARY KEY,
    name VARCHAR(20)

);

INSERT test_primary_key1(id,name) VALUES(1,'张三');  运行结果成功
INSERT test_primary_key1(id,name) VALUES(0,'张三');  运行结果成功

INSERT test_primary_key1(id,name) VALUES(-1,'张三');  运行结果失败

3.2:AUTO_INCREMENT测试

CREATE TABLE test_auto_increment(
id INT UNSIGNED KEY AUTO_INCREMENT,
username VARCHAR(20)
);
INSERT test_auto_increment(username) VALUES('A');运行结果成功
INSERT test_auto_increment(username) VALUES('B');运行结果成功
INSERT test_auto_increment(username) VALUES('C');运行结果成功
INSERT test_auto_increment(id,username) VALUES(15,'G');运行结果成功
INSERT test_auto_increment(username) VALUES('C');运行结果成功
INSERT test_auto_increment(id,username) VALUES(NULL,'E');运行结果成功

INSERT test_auto_increment(id,username) VALUES(DEFAULT,'F');运行结果成功

3.3:NOT NULL(非空约束,插入不能给空值)

CREATE TABLE test_not_null(
a varchar(20),
b varchar(20) not null

);

INSERT test_not_null(a,b) VALUES('','');  真确
INSERT test_not_null(a,b) VALUES(NULL,NULL); 错误
INSERT test_not_null(a,b) VALUES(NULL,'abc'); 正确

INSERT test_not_null(a) VALUES('TEST'); 错误

3.4:DEFAULT(列的默认约束)

CREATE TABLE test_default(
id INT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL,
age TINYINT UNSIGNED DEFAULT 18,
email VARCHAR(50) NOT NULL DEFAULT '382771946@qq.com'
);
INSERT test_default(username) VALUES('A');  成功显示默认值
INSERT test_default(username,age,email) VALUES('B',30,'imooc@qq.com'); 成功覆盖
INSERT test_default(username,age,email) VALUES('C',NULL,'imooc@qq.com'); 成功覆盖
INSERT test_default(username,age,email) VALUES('D',NULL,NULL); 错误邮箱无法插入空值
INSERT test_default(username,age,email) VALUES('D',null,''); 成功覆盖

INSERT test_default(username,age,email) VALUES('D',NULL,DEFAULT);  成功覆盖

3.5:UNIQUE KEY(唯一索引,一个表中可以有多个,同样的值不能重复,但是null除外)

 UNIQUE KEY的用途:主要是用来防止数据插入的时候重复的例如用户表的身份证号码等。主键(只能有一个)=UNIQUE KEY(可以多个)+不等于空

CREATE TABLE test_unique(
id INT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL UNIQUE KEY,
email VARCHAR(50) unique key,
card CHAR(18) unique key
);
INSERT test_unique(username,email,card) VALUES('A','A@QQ.COM','1'); 成功
INSERT test_unique(username,email,card) VALUES('A','1A@QQ.COM','12'); 失败username重复
INSERT test_unique(username,email,card) VALUES('B',NULL,NULL); 成功
INSERT test_unique(username,email,card) VALUES('C',NULL,NULL); 成功

3.6:mysql的索引类型

Normal 普通索引

表示普通索引,大多数情况下都可以使用

Unique 唯一索引


表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique

约束唯一标识数据库表中的每一条记录,即在单表中不能用每条记录是唯一的(例如身份证就是唯一的),Unique(要求列唯一)和Primary Key(primary key = unique + not null 列唯一)约束均为列或列集合中提供了唯一性的保证,Primary Key是拥有自动定义的Unique约束,但是每个表中可以有多个Unique约束,但是只能有一个Primary Key约束

Full Text 全文索引

表示全文收索,在检索长文本的时候,效果最好,短文本建议使用Index,但是在检索的时候数据量比较大的时候,现将数据放入一个没有全局索引的表中,然后在用Create Index创建的Full Text索引,要比先为一张表建立Full Text然后在写入数据要快的很多

FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。FULLTEXT适合在TEXT类型的字段上创建索引,FULLTEXT索引是MySQL数据库中用于全文搜索的一种特殊类型的索引。这种索引适用于包含大量文本的列,如文章、评论或描述性字段。FULLTEXT索引提供了一种在这些文本数据中快速搜索关键词的方式。以下是FULLTEXT索引的一些详细介绍:

特点
全文搜索:与传统的基于字符匹配的搜索不同,FULLTEXT索引允许进行全文搜索,这意味着它可以搜索词汇而非整个字符串的匹配。
自然语言搜索和布尔搜索:FULLTEXT索引支持自然语言搜索和布尔搜索。自然语言搜索是基于自然语言处理的,更符合一般查询习惯;布尔搜索则允许使用布尔逻辑(如AND、OR、NOT)来精细控制搜索。
分词处理:在创建FULLTEXT索引时,MySQL会对文本内容进行分词处理,以建立索引。这个过程依赖于MySQL的分词器。

性能考虑
对于大型文本数据集,FULLTEXT索引可以显著提高搜索效率。
然而,FULLTEXT索引会占用额外的磁盘空间,并可能增加数据插入时的开销。
注意事项
FULLTEXT索引不适用于较小或非文本的数据字段。
搜索结果的相关性评分可以通过MATCH() ... AGAINST()语句中的返回值获得,以帮助确定匹配项的相关程度。

SPATIAL 空间索引


空间索引是对空间数据类型的字段建立的索引,MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING、POLYGON。MYSQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类型的语法创建空间索引。创建空间索引的列,必须将其声明为NOT NULL,空间索引只能在存储引擎为MYISAM的表中创建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值