MySQL:字段约束与索引


字段约束

MySQL的字段约束共四种:

约束名 关键字 描述
主键约束 PRIMARY KEY 字段值唯一,且不能为NULL
非空约束 NOT NULL 字段值不能为NULL
唯一约束 UNIQUE 字段值唯一,但可以为NULL
外键约束 FOREIGN KEY 保持关联数据的逻辑性

关于主键约束

  • 主键约束字段要求字段值的唯一性,且不能为NULL
  • 建议使用数字类型的主键,提高检索速度,一般设置自增主键或GUID
CREATE TABLE t_emp(
    id INT PRIMARY KEY AUTO_INCREMENT,
    ...
);

关于非空约束

  • 插入数据时,该字段值不能为NULL
  • NULL不是空字符串
  • 可以使用NOT NULL,但设置默认值
CREATE TABLE t_emp(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    married BOOLEAN NOT NULL DEFAULT FALSE
);

关于外键约束

外键约束主要用于保证数据的逻辑关系

t_dept:

dep_id dep_name tel
11 研发部 111
12 测试部 112
13 销售部 113

t_emp:

emp_num name sex dep_id
1 张三 11
2 李四 12

外键约束写在子表中:

-- 父表:
CREATE TABLE t_dept(
	dep_id INT USIGNED PRIMARY KEY,
	dep_name VARCHAR(20) NOT NULL UNIQUE,
	tel CHAR(3) UNIQUE
);

-- 子表:
CREATE TABLE t_emp(
	emp_num INT USIGNED PRIMARY KEY,
	name VARCHAR(20) NOT NULL,
	sex CHAR(3) ENUM('男','女') NOT NULL,
	dep_id INT USIGNED,
	
	FOREIGN KEY (dep_id) REFERENCES t_dept(dep_id)
);

设置外键约束后,若要删除父表内容,必须先删除子表相关的内容,这种约束能保证逻辑关系。


但另一方面,多表的相互外键关联,可能形成外键闭环,导致无法删除任何一张表的记录。故可以不设置外键约束,仅依靠应用程序的逻辑来保证。


索引机制

什么是数据库索引?

简单来说,索引是关系数据库中对某一列或多个列的值进行预排序的数据结构,一般数据库需要维护索引对应的二叉树。


为什么需要索引?

数据库如果有上万甚至上亿条记录,想要提高查询速度,就需要使用索引。


如何创建索引?

①、创建表的时候添加索引

CREATE TABLE table_name(
	...,
    INDEX [索引名] (字段名),
    ...
);

索引名是可选项,如果不定义索引名,则使用字段名作为索引名。

②、在已创建的表中添加索引

# 语法一:
CREATE INDEX 索引名 ON 表名(字段);

# 语法二:
ALTER TABLE 表名 ADD INDEX [索引名](字段名)
# 查询索引
SHOW INDEX FROM 表名;

# 删除索引
DROP INDEX 索引名 ON 表名;

创建索引要遵循什么原则?

  • 哪些表需要加索引?:数据量大,且经常被查询的数据表

  • 哪些字段要加索引?:经常作为检索条件的字段

  • 哪些字段不要加索引?:大字段类型(如长度超过50的字符串)

posted @ 2021-02-15 17:25  yangblood  阅读(208)  评论(0编辑  收藏  举报