当前位置: 首页 > news >正文

MySQL约束详解:从入门到精通

目录

    • 一、主键约束(PRIMARY KEY)
    • 二、外键约束(FOREIGN KEY)
    • 三、唯一约束(UNIQUE)
    • 四、检查约束(CHECK)
    • 五、非空约束(NOT NULL)
    • 六、默认约束(DEFAULT)
    • 七、总结

一、主键约束(PRIMARY KEY)

主键约束用于唯一标识表中的每一行数据,确保数据的唯一性和完整性。一个表只能有一个主键,主键列不能包含 NULL 值。

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL
);

二、外键约束(FOREIGN KEY)

外键约束用于在两个表之间建立关系,确保数据的一致性。外键列的值必须是另一个表中主键列的值,或者为 NULL。

CREATE TABLE orders (
    order_id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    order_date DATE NOT NULL,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

三、唯一约束(UNIQUE)

唯一约束确保某一列或多个列的组合中的数据是唯一的,防止重复数据的插入。

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

四、检查约束(CHECK)

检查约束用于限制列中的数据必须满足特定的条件。从 MySQL 8.0.17 开始,检查约束被支持。

CREATE TABLE products (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    price DECIMAL(10, 2) NOT NULL,
    CHECK (price > 0)
);

五、非空约束(NOT NULL)

非空约束确保某一列不能包含 NULL 值,强制要求插入数据时必须提供该列的值。

CREATE TABLE departments (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    description TEXT
);

六、默认约束(DEFAULT)

默认约束为某一列指定默认值,当插入数据时未提供该列的值,将自动使用默认值。

CREATE TABLE settings (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    value VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

七、总结

MySQL中的约束是确保数据完整性和一致性的强大工具。通过合理使用主键、外键、唯一约束、检查约束、非空约束和默认约束,可以有效地组织和管理数据,提高数据库的可靠性和性能。希望本文的示例和讲解对您有所帮助,如果您在使用MySQL约束时有任何疑问,欢迎随时交流探讨!

相关文章:

  • java.util.Collections中常用api
  • Systemd安全加密备份系统与智能通知
  • 深信服Python开发面经及参考答案(110道题)
  • 第十四届蓝桥杯省赛真题解析(含C++详细源码)
  • 常见框架漏洞(五)----中间件IIS6
  • 罗米:《俄罗斯博物馆之旅》
  • 【C++11】异常
  • C语言学习笔记-9
  • Redis-x64-3.2.100.msi : Windows 安装包(MSI 格式)安装步骤
  • MessageQueue --- RabbitMQ可靠传输
  • [项目总结] 在线OJ刷题系统项目技术应用(下)
  • 同花顺客户端公司财报抓取分析
  • 【AI Infra】【RLHF框架】四、VeRL中PPO、GRPO、REINFORCE++、RLOO实现源码解析
  • Spring 怎么解决循环依赖问题?
  • 室内指路机器人是否支持与第三方软件对接?
  • 2025年渗透测试面试题总结-某四字大厂面试复盘扩展 二面 (题目+回答)
  • JavaScript 中的 Reflect 详解
  • notepad++8.6.4安装及细节
  • 【Python Cookbook】数字日期和时间(一)
  • unity的dots中instantiate克隆对象后,对象会在原位置闪现的原因和解决
  • 平台网站如何做推广方案设计/百度sem竞价
  • 网站代码如何优化/郑州网站建设方案
  • pc做网站/seo学院培训班
  • 坂田网站建设/镇江抖音seo
  • 做网站用什么技术/免费外网加速器
  • 网站托管/全国最新的疫情数据