字段约束

MySQL的字段约束共四种:

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

关于主键约束

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

关于非空约束

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

关于外键约束

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

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

外键约束写在子表中:

  1. -- 父表:
  2. CREATE TABLE t_dept(
  3. dep_id INT USIGNED PRIMARY KEY,
  4. dep_name VARCHAR(20) NOT NULL UNIQUE,
  5. tel CHAR(3) UNIQUE
  6. );
  7. -- 子表:
  8. CREATE TABLE t_emp(
  9. emp_num INT USIGNED PRIMARY KEY,
  10. name VARCHAR(20) NOT NULL,
  11. sex CHAR(3) ENUM('男','女') NOT NULL,
  12. dep_id INT USIGNED,
  13. FOREIGN KEY (dep_id) REFERENCES t_dept(dep_id)
  14. );

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

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

索引机制

什么是数据库索引?

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

为什么需要索引?

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

如何创建索引?

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

  1. CREATE TABLE table_name(
  2. ...,
  3. INDEX [索引名] (字段名),
  4. ...
  5. );

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

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

  1. # 语法一:
  2. CREATE INDEX 索引名 ON 表名(字段);
  3. # 语法二:
  4. ALTER TABLE 表名 ADD INDEX [索引名](字段名)
  1. # 查询索引
  2. SHOW INDEX FROM 表名;
  3. # 删除索引
  4. 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. L2-007 家庭房产 (25分) 并查集

    题目链接 题解:并查集把一个家的并在一起,特殊的一点是编号大的并到小的去.这个题有个坑编号可能为0000,会错数据3和5. 1 #include<bits/stdc++.h> 2 usin ...

  2. 【2020杭电多校】Distinct Sub-palindromes 找规律

    题目链接:Distinct Sub-palindromes 题意: 给你一个长度n,你需要找出来一些串,这些串由A...Z和a...z构成.我们设长度为n的所有串中所包含回文子串最少的数量为ans.问 ...

  3. Educational Codeforces Round 94 (Rated for Div. 2) D. Zigzags (枚举,前缀和)

    题意:有一长度为\(n(4\le n\le 3000)\)的数组,选择四个位置\((i,j,k,l)\ (1\le i<j<k\le n)\),使得\(a_i=a_k\)并且\(a_j=a ...

  4. 在4.0框架下使用Sqlite数据库

    在4.0框架下使用Sqlite数据库出现"混合模式程序集是针对"v2.0.50727"版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集. ...

  5. Leetcode(26)-删除排序数组中的重复项

    给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 我们利用 ...

  6. npm/yarn查看当前使用源与设置其它源

    npm, yarn查看源和换源: npm config get registry // 查看npm当前镜像源 npm config set registry https://registry.npmj ...

  7. JavaScript 词法 All In One

    JavaScript 词法 All In One JavaScript 词法 这部分描述了JavaScript 的词法(lexical grammar). ECMAScript 源码文本会被从左到右扫 ...

  8. bash for mac

    bash for mac https://sourabhbajaj.com/mac-setup/iTerm/ https://sourabhbajaj.com/mac-setup/iTerm/zsh. ...

  9. how to using Linux pipe command output another command's help content to a file

    how to using Linux pipe command output another command's help content to a file Linux tee > >& ...

  10. js & sort array object

    js & sort array object sort array object in js https://flaviocopes.com/how-to-sort-array-of-obje ...