mysql 命令语法操作篇 数据库约束有哪些 怎么使用

创建一个mysql数据表

sql 复制代码
create table users (  -- 创建一个 users 表,包含 id name age gender四个字段
  id int comment '字段唯一值',
  name varchar(50) comment '用户名, varchar(50) -> 代表字段最大长度为50个字符',
  age int comment '年龄',
  gender char (1) comment '性别, char(1) -> 代表字段最大长度为1个字符, 1个字符代表一个字节'
) comment '测试用户表';

insert into users values (1, '张三', 18, '男'); -- 向users表中插入一条数据

insert into users values (2, '张三', 18, '男'); -- 向users表中插入一条数据

insert into users values (3, '李四', 19, '女'); -- 向users表中插入一条数据

给users数据库表添加约束 方式字段为空或id重复

sql 复制代码
create table users (  -- 创建一个附带约束的表 
  id int primary key comment '字段 primary key -> 主键',
  name varchar(50) not null unique comment '用户名, not null -> 不可为空, unique -> 唯一值',
  age int comment '年龄',
  gender char (1) default '男' comment '性别, default '男' -> 默认设置为 男'
) comment '测试用户表';

数据库约束有哪些 怎么使用

1. 主键约束(PRIMARY KEY)

作用

  • 唯一标识表中的每一行数据

  • 不允许 NULL

  • 一个表只能有一个主键(可以是单列或组合列)

语法

sql 复制代码
CREATE TABLE users (
    id INT PRIMARY KEY,  -- 主键
    name VARCHAR(50)
);

组合主键

sql 复制代码
CREATE TABLE orders (
    order_id INT,
    product_id INT,
    PRIMARY KEY (order_id, product_id)  -- 联合主键
);

2. 唯一约束(UNIQUE)

作用

  • 保证某一列或多列的值唯一(可有多个唯一约束)

  • 与主键不同,唯一约束允许 NULL(但多个 NULL 被视为不同值)

语法

sql 复制代码
CREATE TABLE users (
    email VARCHAR(100) UNIQUE
);

组合唯一

sql 复制代码
CREATE TABLE product (
    category_id INT,
    product_name VARCHAR(50),
    UNIQUE (category_id, product_name)
);

3. 非空约束(NOT NULL)

作用

  • 规定列必须有值,不能为 NULL

语法

sql 复制代码
CREATE TABLE users (
    name VARCHAR(50) NOT NULL
);

4. 默认值约束(DEFAULT)

作用

  • 在插入数据时,如果没有指定该列的值,则使用默认值

语法

sql 复制代码
CREATE TABLE users (
    status VARCHAR(20) DEFAULT 'active'
);

5. 检查约束(CHECK)

作用

  • 限制列的值必须满足条件(MySQL 8.0.16+ 正式支持)

语法

sql 复制代码
CREATE TABLE users (
    age INT CHECK (age >= 18)
);

注意 :MySQL 5.x 虽然可以写 CHECK,但实际上会被忽略。


6. 外键约束(FOREIGN KEY)

作用

  • 保证两张表之间的引用完整性

  • 当子表外键引用的父表记录被删除/更新时,可以设置级联操作

语法

sql 复制代码
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    FOREIGN KEY (user_id) REFERENCES users(id)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);

常见 ON DELETE / ON UPDATE 行为

选项 说明
CASCADE 跟随父表一起删除/更新
SET NULL 置为 NULL
RESTRICT 阻止删除/更新(默认)
NO ACTION 类似 RESTRICT

7. 自增约束(AUTO_INCREMENT)

作用

  • 用于生成唯一的数字(通常配合主键)

语法

sql 复制代码
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50)
);

总结对比表

约束类型 是否允许 NULL 是否唯一 作用范围 是否可组合
PRIMARY KEY 一张表一个 可组合列
UNIQUE 多个可用 可组合列
NOT NULL 单列 可与其他配合
DEFAULT 单列 可与其他配合
CHECK 取决于条件 单列/多列 可与其他配合
FOREIGN KEY 取决于父表 跨表 可组合列
AUTO_INCREMENT 单列 常与主键配合
相关推荐
程序猿小蒜2 小时前
基于springboot的车辆管理系统设计与实现
java·数据库·spring boot·后端·spring·oracle
数据库知识分享者小北2 小时前
如何构建企业级数据分析助手:Data Agent 开发实践
数据库·阿里云·1024程序员节·dataagent
hskxkj3 小时前
MySQL第三次作业
数据库·mysql
小安运维日记3 小时前
RHCA - DO374 | Day03:通过自动化控制器运行剧本
linux·运维·数据库·自动化·ansible·1024程序员节
aristo_boyunv3 小时前
Redis底层原理-持久化【详细易懂】
数据库·redis·缓存
羊锦磊4 小时前
[ Redis ] SpringBoot集成使用Redis(补充)
java·数据库·spring boot·redis·spring·缓存·json
倔强的石头_5 小时前
【金仓数据库】ksql 指南(三) —— 创建与管理表空间和模式
数据库
冷崖5 小时前
MySQL-TrinityCore异步连接池的学习(七)
学习·mysql
程序新视界6 小时前
详解MySQL两种存储引擎MyISAM和InnoDB的优缺点
数据库·后端·mysql
半路_出家ren6 小时前
设计一个学生管理系统的数据库
linux·数据库·sql·mysql·网络安全·数据库管理员