首页 > 数据库 >MySQL 数据库约束详解:确保数据完整性与一致性

MySQL 数据库约束详解:确保数据完整性与一致性

时间:2024-11-14 13:08:26浏览次数:1  
标签:数据完整性 约束 字段 详解 KEY MySQL id NULL 主键

MySQL 数据库约束详解:确保数据完整性与一致性

在数据库设计中,约束(Constraints)是确保数据完整性和一致性的重要工具。MySQL 提供了多种约束类型,包括非空约束、唯一约束、主键约束、检查约束、默认约束和外键约束。本文将详细介绍这些约束的作用、常用格式以及如何在创建数据表时熟练运用它们。

1. 非空约束(NOT NULL)

作用:确保字段的值不能为 NULL

常用格式

字段名 数据类型 NOT NULL

示例

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ename VARCHAR(255) NOT NULL,
    salary DECIMAL(10, 2)
);

在这个例子中,ename 字段不能为 NULL。非空约束确保了该字段在插入数据时必须提供一个非 NULL 的值,从而避免了数据缺失的情况。

2. 唯一约束(UNIQUE)

作用:确保字段的值在整个表中是唯一的。多个 NULL 不算重复。

常用格式

字段名 字段类型 UNIQUE

示例

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(255) UNIQUE,
    ename VARCHAR(255) NOT NULL
);

在这个例子中,email 字段的值在整个表中必须是唯一的。唯一约束确保了该字段的值不会重复,从而避免了数据冗余的问题。

3. 主键约束(PRIMARY KEY)

特点:非空且唯一,一张表只能有一个主键。

常用格式

字段名 数据类型 PRIMARY KEY

示例

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(255) UNIQUE,
    ename VARCHAR(255) NOT NULL
);

在这个例子中,id 字段是主键,自动递增且唯一标识每一行数据。主键约束确保了该字段的值非空且唯一,从而提供了数据的唯一标识。

4. 检查约束(CHECK)

作用:确保字段的值满足指定的条件。

注意:MySQL 8.0.16 及以上版本支持 CHECK 约束,但之前的版本不支持。

常用格式

字段名 数据类型 CHECK (条件)

示例

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    age INT CHECK (age >= 18),
    ename VARCHAR(255) NOT NULL
);

在这个例子中,age 字段的值必须大于等于 18。检查约束确保了该字段的值满足指定的条件,从而避免了不符合要求的数据插入。

5. 默认约束(DEFAULT)

特点:保存数据时,未指定值则采用默认值。

常用格式

列名 数据类型 DEFAULT 默认值

示例

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ename VARCHAR(255) NOT NULL,
    salary DECIMAL(10, 2) DEFAULT 0.00
);

在这个例子中,如果插入数据时未提供 salary 字段的值,则默认为 0.00。默认约束确保了在未指定值的情况下,字段能够自动填充默认值,从而简化了数据插入操作。

6. 外键约束(FOREIGN KEY)

作用:确保字段的值必须存在于另一个表的某个字段中,用于维护表之间的引用完整性。

常用格式

CREATE TABLE table_name (
    column_name datatype,
    ...
    FOREIGN KEY (column_name) REFERENCES other_table(other_column)
);

示例

CREATE TABLE departments (
    dept_id INT AUTO_INCREMENT PRIMARY KEY,
    dept_name VARCHAR(255) NOT NULL
);

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ename VARCHAR(255) NOT NULL,
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);

在这个例子中,employees 表中的 dept_id 字段引用了 departments 表中的 dept_id 字段。外键约束确保了 dept_id 字段的值必须存在于 departments 表中,从而维护了表之间的引用完整性。

主键与唯一约束的区别

尽管主键(PRIMARY KEY)和唯一约束(UNIQUE)都具有非空且唯一的特性,但它们在实际使用中有一些关键的区别:

  1. NULL

    • 主键:不能为 NULL
    • 唯一约束:可以为 NULL,并且允许多个 NULL 值。
  2. 唯一标识

    • 主键:用于唯一标识表中的每一行数据。
    • 唯一约束:用于确保字段的值在整个表中是唯一的,但不一定用于唯一标识每一行数据。
  3. 数量限制

    • 主键:一张表只能有一个主键。
    • 唯一约束:一张表可以有多个唯一约束。
  4. 自动索引

    • 主键:自动创建唯一索引。
    • 唯一约束:自动创建唯一索引。

总结

通过合理使用这些约束,你可以确保数据的完整性和一致性。以下是每个约束的简要总结:

  • 非空约束(NOT NULL):确保字段的值不能为 NULL

    • 格式:字段名 数据类型 NOT NULL
  • 唯一约束(UNIQUE):确保字段的值在整个表中是唯一的,多个 NULL 不算重复。

    • 格式:字段名 字段类型 UNIQUE
  • 主键约束(PRIMARY KEY):非空且唯一,一张表只能有一个主键。

    • 格式:字段名 数据类型 PRIMARY KEY
  • 检查约束(CHECK):确保字段的值满足指定的条件。

    • 格式:字段名 数据类型 CHECK (条件)
  • 默认约束(DEFAULT):保存数据时,未指定值则采用默认值。

    • 格式:列名 数据类型 DEFAULT 默认值
  • 外键约束(FOREIGN KEY):确保字段的值必须存在于另一个表的某个字段中,用于维护表之间的引用完整性。

    • 格式:FOREIGN KEY (column_name) REFERENCES other_table(other_column)

通过熟练掌握这些约束,你可以在创建数据表时更好地管理和维护数据库中的数据,确保数据的完整性和一致性。

标签:数据完整性,约束,字段,详解,KEY,MySQL,id,NULL,主键
From: https://www.cnblogs.com/itcq1024/p/18545766

相关文章

  • 鸿蒙Navigation知识点详解
    Navigation是路由导航的根视图容器,一般作为页面(@Entry)的根容器,包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式。Navigation组件适用于模块内和跨模块的路由切换,通过组件级路由能力实现更加自然流畅的转场体验,并提供多种标题栏样式来呈现更好的标题和内容联动效果。一次开发,多......
  • MYSQL事务
    一、什么是事务事务(Transaction)是一组数据库操作的集合,这些操作要么全部执行成功,要么全部不执行。在MySQL中,事务确保了一组数据库操作的原子性,一致性,隔离性和持久性,简称ACID属性。原子性(Atomicity):原子性指事务中的所有操作要么全部执行成功,要么全部不执行。即事务不可......
  • MYSQL中JDBC的使用
    一、JDBC基础概念JDBC是Java中的一组API,用于执行SQL操作(例如CRUD操作:增、删、改、关系),同时可以和各种类型的数据库类型进行连接(MySQL、Oracle、SQLServer等)。JDBC是Java标准库的一部分,提供了与数据库进行交互的抽象接口。JDBC主要包含以下几个核心组件:Driver(驱动程......
  • 哈工大出品《自然语言处理新范式:基于预训练模型的方法》一本书读懂ChatGPT背后核心技
    大家好,今天给大家推荐一本来自哈工大创作的一本大模型书籍《自然语言处理新范式:基于预训练模型的方法》!这本大模型书籍已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】为什么推荐这本书?近些年来,以GPT、BERT为代表的预训练模型......
  • navicat连接远程服务器docker的mysql容器时连不上报错
    报错:1130-HostxxxisnotallowedtoconnecttothisMySQLserver1.原因是root账户没有远程访问权限,先进mysql容器dockerexec-it你的容器id/bin/bash2.连接数据库,输入你的密码mysql-uroot-p3.切换到mysql数据库usemysql;4.更新用户表:(其中%的意思是允许所有的......
  • MySQL主从复制
    如果某个主库执行了很多sql操作,导致mysql-bin的位置很大,如下图从库设置同步的主库时,千万不能设置在这个binlog位置,否则后续的很多主库操作,在从库都会失败,报这种坐标位置等等的错误Coordinatorstoppedbecausetherewereerror(s)intheworker(s).Themostrecentfailure......
  • 大模型神书《HuggingFace自然语言处理详解——基于BERT中文模型的任务实战》读完少走
    这几年,自然语言处理(NLP)绝对是机器学习领域最火的方向。那么今天给大家带来一本《HuggingFace自然语言处理详解——基于BERT中文模型的任务实战》这本大模型书籍资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】★内容全面本......
  • 毕业论文设计 Python 实现基于WGAN的生成对抗网络数据生成的详细项目实例(含完整的程序
    目录Python实现基于WGAN的生成对抗网络数据生成的详细项目实例...5项目背景介绍...5一、引言...5二、WGAN背景及优势...51.生成对抗网络(GAN)简述...52.WGAN的核心创新:Wasserstein距离...6......
  • MySQL 中常见的几种高可用架构部署方案
    MySQL中的集群部署方案前言MySQLReplicationInnoDBClusterInnoDBClusterSetInnoDBReplicaSetMMMMHAGaleraClusterMySQLClusterMySQLFabric参考MySQL中的集群部署方案前言这里来聊聊,MySQL中常用的部署方案。MySQLReplicationMySQLReplication 是......
  • MySQL5.7新特性--官方高可用方案MGR介绍
    MGR简介MySQLGroupReplication(下简称:MGR)是MySQL官方推出的一种基于Paxos协议的状态机复制。在MGR出现之前,用户常见的MySQL高可用方式,无论怎么变化架构,本质就是Master-Slave架构。MySQL5.7版本开始支持无损半同步复制(losslesssemi-syncreplication),从而进一步提示数据复制......