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 单列 常与主键配合
相关推荐
n***s9091 小时前
【MySQL基础篇】概述及SQL指令:DDL及DML
sql·mysql·oracle
爬山算法1 小时前
Redis(158)Redis的主从同步问题如何解决?
数据库·redis·缓存
2501_941148154 小时前
多语言微服务架构与边缘计算技术实践:Python、Java、C++、Go深度解析
数据库
计算机毕设小月哥5 小时前
【Hadoop+Spark+python毕设】智能制造生产效能分析与可视化系统、计算机毕业设计、包括数据爬取、Spark、数据分析、数据可视化、Hadoop
后端·python·mysql
w***z505 小时前
MYSQL 创建索引
数据库·mysql
j***51895 小时前
Java进阶,时间与日期,包装类,正则表达式
java·mysql·正则表达式
章鱼哥7305 小时前
[特殊字符] SpringBoot 自定义系统健康检测:数据库、Redis、表统计、更新时长、系统性能全链路监控
java·数据库·redis
5***E6856 小时前
MySQL:drop、delete与truncate区别
数据库·mysql
记得记得就1516 小时前
【MySQL数据库管理】
数据库·mysql·oracle
Austindatabases6 小时前
给PG鸡蛋里面挑骨头--杭州PostgreSQL生态大会
数据库·postgresql