目录
3.5:UNIQUE KEY(唯一索引,一个表中可以有多个,同样的值不能重复,但是null除外)
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的表中创建