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 单列 常与主键配合
相关推荐
倔强的石头_18 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
于眠牧北2 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
李广坤3 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
Turnip12024 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
爱可生开源社区4 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
加号35 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏5 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐5 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端