字段约束

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. 【noi 2.6_9265】取数游戏(DP)

    题意:从自然数1到N中不取相邻2数地取走任意个数,问方案数. 解法:f[i][1]表示在前i个数中选了第i个的方案数,f[i][0]表示没有选第i个.f[i][1]=f[i-1][0];  f[i][ ...

  2. zzuli-2266 number

    题目描述 某人刚学习了数位DP,他在某天忽然思考如下问题: 给定n,问有多少数对<x, y>满足: x, y∈[1, n], x < y x, y中出现的[0, 9]的数码种类相同 ...

  3. Leetcode(869)-重新排序得到 2 的幂

    从正整数 N 开始,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零. 如果我们可以通过上述方式得到 2 的幂,返回 true:否则,返回 false. 示例 1: 输入:1 输出 ...

  4. u-boot 移植 --->6、引导Linux启动测试

    在引导Linux开机之前需要先清楚Linux启动的必要或者说是先决条件,这里就是提到了u-boot的作用了引用百度云---主要用于嵌入式系统的引导加载,其实在我调试下来总结一下就是初始化硬件这里的硬件 ...

  5. Loss_Function_of_Linear_Classifier_and_Optimization

    Loss_Function_of_Linear_Classifier_and_Optimization Multiclass SVM Loss:    Given an example(xi, yi& ...

  6. cnblogs blogs backup & node.js crawler

    cnblogs blogs backup & node.js crawler refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访 ...

  7. 23 种设计模式 APP & 23 Design Patterns App

    23 种设计模式 APP & 23 Design Patterns App https://github.com/xgqfrms/23-design-patterns-app https:// ...

  8. How to change Linux Terminal display username

    How to change Linux Terminal display username 如何更改 Linux Terminal 显示的用户名 (base) ➜ ~ whoami xgqfrms-m ...

  9. 来必力 & Disqus

    来必力 & Disqus 正在载入来必力 https://livere.com 个人博客-双评论系统(来必力与Disqus) https://tianbozhang.coding.me/com ...

  10. Wi-Fi 6

    Wi-Fi 6 802.11ax https://en.wikipedia.org/wiki/IEEE_802.11ax https://www.wi-fi.org/discover-wi-fi/wi ...