MySQL 约束详解

MySQL 中的约束是用来保证数据的完整性的机制。数据完整性一般有以下三种形式:

实体完整性:保证表中有一个主键。

域完整性:保证数据每列的值满足特定条件。

引用完整性:保证两张表之间的引用关系。

以上三种形式的完整性在 MySQL 中都有相应约束进行保证。

使用主键和唯一键约束可以保证实体完整性;使用外键、合适和数据类型、触发器或者 DEFAULT 关键字也可以保证域完整性;使用外键和触发器可以保证引用完整性。可见 MySQL 提供了以下几种约束:

Primary Key

Unique Key

Foreign Key

Default

NOT NULL

触发器

Primary key、Unique Key 和 Foreign Key 约束

Primary Key 用于约束唯一主键,唯一标识表中的每一条记录,主键对应的列不允许有 NULL 值和重复值,每个表都应该只有一个主键(包含 Unique 约束)。

Unique Key 用于约束唯一索引,唯一标识表中的每一条记录,与 Primary Key 的区别在于可以有多个列同时被定义为 Unique Key。

Foreign Key 用于保证域和参照的完整性。外键当中出现的值必须在其他表中为主键。同时当父表发生变化时,对子表的操作可以有 4 种方案:CASCADE(删除子表对应的行)、SET NULL(将子表对应行置空)、NO ACTION、RESTRICT。

对错误数据的约束

MySQL 允许非法的或不正确的数据的插入或更新,例如向 NOT NULL 的列中插入一个 NULL 值,那么此时 MySQL 会将 NULL 值更改为 0 值插入。如果想要 MySQL 在用户插入错误数据时进行报错而不是警告,需要设置参数 sql_mode。

ENUM 和 SET 约束

用来约束离散值在一个集合以内。如果是连续值和范围的约束需要通过触发器去实现。

触发器与约束

触发器的作用是在执行 INSERT、DELETE 和 UPDATE 命令之前或之后自动调用 SQL 命令或存储过程。一个表可以建立 6 个触发器,即 3 个操作 AFTER 和 BEFORE 各建一个。

mysql怎么约束_MySQL 约束详解相关推荐

  1. mysql 流复制_MySQL系列详解六:MySQL主从复制/半同步演示-技术流ken

    前言 随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求.此时数据库集群就很好的解决了这个问题了.采用MySQL分布式集群,能够搭建一个高并发.负载均衡的集群服务器.在 ...

  2. mysql status改变_mysql 配置详解mysql SHOW STATUS 详解

    1. back_log 指定MySQL可能的连接数量.当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花些时间(尽管很短)检查连接并且启动一个新线程. back_log ...

  3. mysql配置文件说明_mysql配置文件详解说明

    mysql配置文件http://www.doczj.com/doc/ef8ad6026c175f0e7cd1371f.htmlf详解说明 MySQL配置文件http://www.doczj.com/d ...

  4. mysql 实例复制_MySQL 复制详解及简单实例

    MySQL 复制详解及简单实例 主从复制技术在MySQL中被广泛使用,主要用于同步一台服务器上的数据至多台从服务器,可以用于实现负载均衡,高可用和故障切换,以及提供备份等等.MySQL支持多种不同的复 ...

  5. mysql 负数类型_MySQL数据类型详解

    MySQL数据类型,可以被分为3类:数值类型.日期和时间类型以及字符串(字符)类型 方括号("["和"]")指出可选的类型修饰符的部分 M 指出最大的显示尺寸. ...

  6. mysql 主从复制讲解_MySQL主从复制详解

    前言: 在MySQL中,主从架构应该是最基础.最常用的一种架构了.后续的读写分离.多活高可用架构等大多都依赖于主从复制.主从复制也是我们学习MySQL过程中必不可少的一部分,关于主从复制的文章有很多, ...

  7. mysql字符集解释_MySQL字符集详解

    一.MySQL字符集编码简单介绍 在使用MySQL时要注意6个需要编码的地方:系统的编码.客户端.服务端.库.表.列.字符集编码不仅影响数据存储,还影响client程序和数据库之间的交互.在mysql ...

  8. mysql 连接字符集_MySQL字符集详解

    一.MySQL字符集编码简单介绍 在使用MySQL时要注意6个需要编码的地方:系统的编码.客户端.服务端.库.表.列.字符集编码不仅影响数据存储,还影响client程序和数据库之间的交互.在mysql ...

  9. mysql import 命令_MySQL命令详解:mysqlimport

    MySQLimport位于MySQL/bin目录中,是MySQL的一个载入(或者说导入)数据的一个非常有效的命令行工具. 使用mysqlimport -?命令,可以查看mysqlimport的具体参数 ...

  10. mysql 执行时间 配置文件_mysql配置文件详解

    [client] user = root host = localhost password = password [mysqld] federated #开启Federated存储引擎 ###### ...

最新文章

  1. 为什么要学Access?
  2. 微软 Excel 365 里如何设置下拉菜单和自动高亮成指定颜色
  3. selenium windows 下面环境搭建(安装JDK)
  4. c语言程序设计笔记手写图片,C语言程序设计笔记.pdf
  5. 宝塔面板FTP连接方法
  6. 最后2天!快去登录你的百度网盘,不然。。。
  7. 进程创建函数fork
  8. webpack 图片压缩
  9. 常见Linux命令pwd实现
  10. EF数据迁移命令总结
  11. android+仿ios画廊,安卓仿ios14主题app
  12. Opencv人数统计 yolo kcf人头跟踪 人数统计 KCF目标跟踪 YOLO目标跟踪
  13. css单行文本两端对齐
  14. 计算机教育中缺失的一课,劝学弟学妹们一句,一定要趁早补上,工作后会如有神助!
  15. PHS定位技术及业务应用研究(图)
  16. Excel中VLOOKUP函数的详细用法(灰常有用,求加精!求加精!)
  17. 干货丨吉时利源表测试方法详
  18. SteamVR 2.x UGUI交互系统(7)
  19. 基本sctp套接字编程及实例讲解
  20. c#中的interface abstract与virtual

热门文章

  1. Android TabLayout定制CustomView与ViewPager交互双向联动
  2. js获取某节点的特定父节点
  3. 关于C#解决无法解析skinEngine和使用皮肤的问题
  4. Coolite Toolkit学习笔记四:容器控件之FiledSet、Panel和Window
  5. 2018-10-11
  6. 团队作业2 需求分析与原型设计
  7. python:os模块与sys模块
  8. django高级应用(分页功能)
  9. Remote Desktop 访问设置
  10. Windows server常见操作、问题