字段约束

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的字符串)

MySQL:字段约束与索引的更多相关文章

  1. 2-16 MySQL字段约束-索引-外键

    一:字段修饰符 1:null和not null修饰符 我们通过这个例子来看看 mysql> create table worker(id int not null,name varchar(8) ...

  2. mysql字段约束-索引-外键---3

    本节所讲内容: 字段修饰符 清空表记录 索引 外键 视图 一:字段修饰符 (约束) 1:null和not null修饰符   我们通过这个例子来看看 mysql> create table wo ...

  3. mysql字段约束

    为了确保数据的完整性和唯⼀性,关系型数 据库通过约束机制来实现目. 一. unique 唯一性约束    : 值不可重复: 二. not null    非空约束    : 值不可为空: 三. def ...

  4. 总结: MySQL(基础,字段约束,索引,外键,存储过程,事务)操作语法

    1. 显示数据库列表 show databases; # 查看当前所有数据库 show databases \G   #以行的方式显示 2. 在命令行中,执行sql语句 mysql -e 'show ...

  5. MySQL (三)-- 字段属性、索引、关系、范式、逆规范化

    1 字段属性 主键.唯一键和自增长. 1.1 主键 主键:primary key,一张表中只能有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据,不能重复. 一张表只能有最多一个主键. 1.1 ...

  6. mysql约束与索引的区别

    一:约束 作用:是为了保证数据的完整性而实现的一套机制,它具体的根据各个不同的数据库的实现而有不同的工具(约束): 这里主要讲解mysql的约束: 1.非空约束:not null; 指示某列不能存储 ...

  7. MSSQL 如何删除字段的所有约束和索引

    原文MSSQL 如何删除字段的所有约束和索引 代码如下: ---------------------------------------------------------- --  mp_DropC ...

  8. .Net程序员学用Oracle系列(6):表、字段、注释、约束、索引

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.表 1.1.创建表 1.2.修改表 & 删除表 2.字段 2.1.添加字段 2.2.修改字段 & 删除字段 ...

  9. (转)Mysql哪些字段适合建立索引

    工作中处理数据时,发现某个表的数据达近亿条,所以要为表建索引提高查询性能,以下两篇文章总结的很好,记录一下,以备后用. 数据库建立索引常用的规则如下: 1.表的主键.外键必须有索引: 2.数据量超过3 ...

随机推荐

  1. C - Oulipo

    The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e ...

  2. CodeForces 1119D(差分+前缀和+二分)

    题意:给你一个数组,数组每次每个数都+1,有q次查询每一查询+L到+R中出现的所有不重复的数字个数. +L到+R其实就相当于是0到+(R-L+1) 感觉自己写的好啰嗦,直接上代码加注释: 1 #inc ...

  3. CodeForces - 1100E 二分+拓扑排序

    题意: 一个n个节点的有向图,节点标号从1到n,存在m条单向边.每条单向边有一个权值,代表翻转其方向所需的代价.求使图变成无环图,其中翻转的最大边权值最小的方案,以及该方案翻转的最大的边权. Inpu ...

  4. 手动编译Selenium源码

    起因 Selenium ChromeDriver和Chrome升级到最新v81版本,同时需要将Selenium3.3.1升级到3.141.59. Selenium本身不支持https,所以修改源码用于 ...

  5. 轻松理解 Java开发中的依赖注入(DI)和控制反转(IOC)

    前言 关于这个话题, 网上有很多文章,这里, 我希望通过最简单的话语与大家分享. 依赖注入和控制反转两个概念让很多初学这迷惑, 觉得玄之又玄,高深莫测. 这里想先说明两点: 依赖注入和控制反转不是高级 ...

  6. Java 并发机制底层实现 —— volatile 原理、synchronize 锁优化机制

    本书部分摘自<Java 并发编程的艺术> 概述 相信大家都很熟悉如何使用 Java 编写处理并发的代码,也知道 Java 代码在编译后变成 Class 字节码,字节码被类加载器加载到 JV ...

  7. Vmware 15.5 ubuntu 12.04.5-desktop-i386.iso insmod后死机

    就是makefile没有问题,在其他同学的相同环境下也没有问题,但是在我的虚拟机里就会死机,复制了其他同学的虚拟机过来也会死机,所以猜想是VMware的问题. 于是下载了Virtual box,然后安 ...

  8. 关于虚继承的sizeof问题

    首先关于虚继承和普通继承的知识,我总结一下: 1.普通继承时,无论派生类是否定义新的虚函数,基类和派生类总是共享一个虚函数表,不需要另加指向虚函数的指针,派生类只是将虚函数表中的元素改成了派生类的地址 ...

  9. spring-cloud-sleuth/zipkin

    Spring Cloud Sleuth 一般的,一个分布式服务跟踪系统,主要有三部分:数据收集.数据存储和数据展示.根据系统大小不同,每一部分的结构又有一定变化.譬如,对于大规模分布式系统,数据存储可 ...

  10. Unknown command '\b'. 关于Mysql导入外部数据库脚本报错的解决

    来自网络转载 还是字符集的问题 使用source导入外部sql文件: mysql> source F:\php\bookorama.sql;--------------source F:---- ...