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

MySQL约束知识点

1. PRIMARY KEY(主键约束)

作用

唯一标识表中的每条记录,确保记录的唯一性且不为空

特点

一个表只能有一个主键,主键字段的值不能重复且不能为NULL

示例

-- 创建表时定义主键
CREATE TABLE students (id INT PRIMARY KEY,name VARCHAR(50)
);-- 复合主键(多个字段组合作为主键)
CREATE TABLE student_courses (student_id INT,course_id INT,PRIMARY KEY (student_id, course_id)
);

2. FOREIGN KEY(外键约束)

作用

用于关联两个表,确保一个表中的数据匹配另一个表中的数据

特点

建立表之间的父子关系,子表的外键值必须匹配父表的主键值或为NULL

示例

-- 父表
CREATE TABLE departments (dept_id INT PRIMARY KEY,dept_name VARCHAR(50)
);-- 子表(含外键)
CREATE TABLE employees (emp_id INT PRIMARY KEY,emp_name VARCHAR(50),dept_id INT,FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);

3. NOT NULL(非空约束)

作用

确保字段不能存储NULL值

示例

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

4. UNIQUE(唯一约束)

作用

确保字段的值是唯一的,但允许NULL值(一个字段可以有多个NULL)

特点

与主键的区别是,一个表可以有多个UNIQUE约束,且UNIQUE字段允许NULL

示例

CREATE TABLE customers (id INT PRIMARY KEY,phone VARCHAR(20) UNIQUE,email VARCHAR(100) UNIQUE
);

5. CHECK(检查约束)

作用

确保字段的值满足指定的条件

注意

MySQL 8.0.16及以上版本才完全支持CHECK约束

示例

CREATE TABLE products (id INT PRIMARY KEY,name VARCHAR(50),price DECIMAL(10,2) CHECK (price > 0),stock INT CHECK (stock >= 0)
);

6. DEFAULT(默认值约束)

作用

当插入数据时,如果未指定该字段的值,则使用默认值

示例

CREATE TABLE orders (id INT PRIMARY KEY,order_date DATE DEFAULT CURRENT_DATE(),status VARCHAR(20) DEFAULT 'pending'
);

约束的作用总结

1. 保证数据的完整性:防止无效或不合理的数据进入表中

2. 保证数据的一致性:尤其是通过外键约束维护表之间的关系

3. 提高查询性能:主键和唯一约束会自动创建索引

4. 简化应用程序逻辑:数据库层直接处理数据验证,减少应用程序代码

http://www.lryc.cn/news/621627.html

相关文章:

  • JavaScript 逻辑运算符与实战案例:从原理到落地
  • 流处理、实时分析与RAG驱动的Python ETL框架:构建智能数据管道(上)
  • JavaScript 基础实战:DOM 操作、数据类型与常见需求实现
  • IT资讯 | VMware ESXi高危漏洞影响国内服务器
  • 从应用场景看国产化FPGA潜力,紫光同创研讨会武汉·北京站回顾
  • Linux搭建ftp服务器
  • Unity:PlayerPrefs笔记
  • Python入门第3课:Python中的条件判断与循环语句
  • 戴永红×数图:重构零售空间价值,让陈列创造效益!
  • Vue 侦听器(watch 与 watchEffect)全解析1
  • 从CAD数据访问到3D协作,HOOPS SDK如何提升PLM解决方案竞争力?
  • 机械学习---- PCA 降维深度解析
  • p5.js 3D盒子的基础用法
  • 用 Enigma Virtual Box 将 Qt 程序打包成单 exe
  • Helm 常用命令 + Bitnami 中间件部署速查表
  • 北京JAVA基础面试30天打卡10
  • JVM核心原理与实战优化指南
  • Java 调用 Python 脚本:实现 HelloWorld
  • Android 欧盟网络安全EN18031 要求对应的基本表格填写
  • 电脑上练打字用什么软件最好:10款打字软件评测
  • 【Linux】编辑器vim的使用
  • IDE:vscode的vue3模板
  • STM32 - Embedded IDE - GCC - 解决LWRB库在GCC编译器会编译失败,在ARMCC编译器时却正常编译
  • collections:容器数据类型
  • 《R for Data Science (2e)》免费中文翻译 (第4章) --- Workflow: code style
  • uniapp 开发微信小程序,获取经纬度并且转化详细地址(单独封装版本)
  • 启动electron桌面项目控制台输出中文时乱码解决
  • 解锁AI大模型:Prompt工程全面解析
  • 玻璃pcb是什么材质?哪家工厂可以生产?
  • C++:stl-> list的模拟实现