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

SQL:Constraint(约束)

目录

🎯 什么是 Constraint?

MySQL 中常见的约束类型:

1. PRIMARY KEY

2. FOREIGN KEY

3. UNIQUE

4. NOT NULL

5. DEFAULT

6. CHECK(MySQL 8.0+)

7. AUTO_INCREMENT

🎯 什么是 Constraint?

Constraint(约束) 是你在创建表时指定的一组规则,用于限制字段中允许的值,以防止无效、重复或不一致的数据写入数据库。

MySQL 中常见的约束类型:

约束类型作用描述
PRIMARY KEY标识表中唯一的记录(不能重复,不能为 NULL)
FOREIGN KEY保证两个表之间的引用一致性(建立关联)
UNIQUE限制某列中的值不能重复
NOT NULL限制字段值不能为空
DEFAULT给字段设置默认值
CHECK限制字段值必须满足指定的逻辑表达式(MySQL 8.0+ 才正式支持)
AUTO_INCREMENT自动生成唯一的整数(通常用于主键)

1. PRIMARY KEY

  • 用于唯一标识表中每一行记录;

  • 通常只设置一个主键;

  • 自动包含 NOT NULLUNIQUE 约束。

CREATE TABLE students (
  student_id INT PRIMARY KEY,
  name VARCHAR(100)
);

2. FOREIGN KEY

  • 建立两个表之间的联系;

  • 确保外键列中的值在父表中必须存在。

CREATE TABLE courses (
  course_id INT PRIMARY KEY,
  course_name VARCHAR(100)
);

CREATE TABLE enrollments (
  student_id INT,
  course_id INT,
  FOREIGN KEY (course_id) REFERENCES courses(course_id)
);

3. UNIQUE

  • 限制某列中的值不能重复;

  • 不限制 NULL 值(NULL 不视为“重复”)。

CREATE TABLE users (
  user_id INT PRIMARY KEY,
  email VARCHAR(100) UNIQUE
);

4. NOT NULL

  • 防止列接受 NULL 值;

  • 常用于业务关键字段,如姓名、价格等。

CREATE TABLE products (
  product_id INT PRIMARY KEY,
  name VARCHAR(100) NOT NULL
);

5. DEFAULT

  • 如果插入时未指定该列的值,则自动填入默认值。

CREATE TABLE orders (
  order_id INT PRIMARY KEY,
  status VARCHAR(20) DEFAULT 'pending'
);

6. CHECK(MySQL 8.0+)

  • 验证列值是否满足条件;

  • 在旧版本中会忽略,不生效。

CREATE TABLE employees (
  emp_id INT PRIMARY KEY,
  age INT CHECK (age >= 18)
);

7. AUTO_INCREMENT

  • 自动为每一行生成唯一编号;

  • 常和主键一起使用。

CREATE TABLE customers (
  customer_id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100)
);
http://www.dtcms.com/a/129074.html

相关文章:

  • [VTK] 四元素实现旋转平移
  • 2025年危化品安全员考试题库及答案
  • Java基础:浅析Java中的XML文件处理
  • JavaScript 中的 if (object) 语句解释
  • Java基础:集合List、Map、Set(超详细版)
  • 电子处方+在线问诊系统源码:打造智能诊疗闭环“黄金搭档”方案
  • KingbaseES JSON全解析:记录操作与高级表格处理
  • 机器学习 第一章
  • SSM废品买卖回收管理系统的设计与实现
  • Java中的wait( )和sleep( )方法的区别
  • AI大模型技术之RAG、模型微调、知识蒸馏
  • 从零搭建微服务项目Pro(第0章——微服务项目脚手架搭建)
  • 【langchain4j系列教程-05】一文读懂:人工智能如何实现会话记忆
  • 基于EfficientNet的自闭症诊断辅助系统揭秘
  • Maven工具学习使用(十)——生成项目站点
  • Python及C++中的字典
  • 【玩泰山派】5、点灯,驱动led-(2)ubuntu18.04 升级python3.6到python3.7,安装pip3
  • 20250408在荣品的PRO-RK3566开发板使用Rockchip原厂的buildroot系统时拿掉经常出现的list-iodomain.sh警告信息
  • 58-使用wordpress快速创建个人网站
  • Go小技巧易错点100例(二十六)
  • SpringBoot项目:部门管理系统
  • 防爆平板:石油化工厂智慧转型的“中枢神经”
  • BANK OF CHINA(HONG KONG)网点
  • Spring Bean 的生命周期
  • Tiny Cluster(1)——搭建树莓派小型计算集群
  • 【C++初学】C++核心编程技术详解(三):多态与文件操作
  • 重构艺术 | 如何优雅地“提炼函数“
  • 并查集(Java模板及优化点解析)
  • Java IO精讲:从传统IO到NIO的深度探索
  • Selenium之Actions事件