MySQL 数据库表的约束

数据库约束的种类

约束名 约束关键字
主键 primary key
唯一 unique
非空 not null
外键 foreign key
检查约束 check 注:mysql 不支持,sql支持

主键约束

创建主键方式

  • 在创建表的时候给字段添加主键

    复制
    字段名 字段类型 PRIMARY KEY

    例1:

    复制
    CREATE TABLE tb_info (
    id INT PRIMARY KEY,
    name VARCHAR(30),
    age INT
    );

    例2:

    复制
    CREATE TABLE tb_info (
    id INT,
    name VARCHAR(30),
    age INT,
    PRIMARY KEY(id)
    );
  • 在已有表中添加主键

    复制
    ALTER TABLE 表名 ADD PRIMARY KEY(字段名);

    例:

    复制
    ALTER TABLE tb_info ADD PRIMARY KEY(id);

删除主键的方式

删除单表主键约束

复制
ALTER TABLE 表名 DROP PRIMARY KEY;

删除有外键连接的表的主键

第一步:解除外键约束

复制
ALTER TABLE 外键表 DROP FOREIGN KEY 外键名称

第二步:删除主键

复制
ALTER TABLE 主键表 DROP PRIMARY KEY;

如:删除tb1的主键

img

img

这里有两个表,tb2的外键连接tb1的主键

第一步:解除与tb2的外键约束

复制
ALTER TABLE tb2 DROP FOREIGN KEY id2;

第二步:删除tb1的主键约束

复制
ALTER TABLE tb1 DROP PRIMARY KEY;

主键自增

复制
-- 表示自动增长(字段类型必须是整数类型)
AUTO_INCREMENT

如:

复制
CREATE TABLE tb (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30),
age INT
);

默认地 AUTO_INCREMENT 的开始值是 1

创建表时指定起始值

复制
CREATE TABLE 表名 (
列名 INT PRIMARY KEY AUTO_INCREMENT
) AUTO_INCREMENT=起始值;

如:指定起始值为5

复制
CREATE TABLE tb (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30),
age INT
) AUTO_INCREMENT=5;

创建好以后修改起始值

复制
ALTER TABLE 表名 AUTO_INCREMENT=起始值;
备注:DELETETRUNCATE 对自增长的影响
DELETE:删除所有的记录之后,自增长没有影响。
TRUNCATE:删除以后,自增长又重新开始。

唯一约束

唯一约束: 表中某一列不能出现重复的值

基本格式

复制
字段名 字段类型 UNIQUE

如:tb表中的 name 字段中的记录不能出现重复的

复制
CREATE TABLE tb (
id INT,
name VARCHAR(30) UNIQUE,
age INT
);

非空约束

非空约束:某一列不能为null

基本语法格式

复制
字段名 字段类型 NOT NULL

如:tb表中的 id 字段不能出现null

复制
CREATE TABLE tb (
id INT NOT NULL,
name VARCHAR(30),
age INT
);

默认值

基本语法格式

复制
字段名 字段类型 DEFAULT 默认值

如:tb表中的 age 字段的默认值为18

复制
CREATE TABLE tb (
id INT,
name VARCHAR(30),
age INT DEFAULT 18
);

外键约束

创建外键约束

新建表时增加外键

复制
CONSTRAINT 外键约束名称 FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)

如:

主表

复制
CREATE TABLE tb1 (
id INT,
name VARCHAR(30),
age INT,
PRIMARY KEY(id)
);

从表

复制
CREATE TABLE tb2 (
card INT,
name VARCHAR(30),
age INT,
CONSTRAINT tb2_card FOREIGN KEY(card) REFERENCES tb1(id)
);

从表的外键card,与主表的主键id关联,从表中外键约束的名为tb2_card。

已有表增加外键

复制
ALTER TABLE 从表 ADD CONSTRAINT 外键约束名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主键字段名);

如:

表1

复制
CREATE TABLE tb1 (
id INT,
name VARCHAR(30),
age INT,
PRIMARY KEY(id)
);

表2

复制
CREATE TABLE tb2 (
card INT,
name VARCHAR(30),
age INT,
);

在tb2表中添加外键约束,外键字段为card。连接tb1表中的主键,主键字段为id:

复制
ALTER TABLE tb2 ADD CONSTRAINT tb2_card FOREIGN KEY(card) REFERENCES tb1(id);

删除外键约束

复制
ALTER TABLE 从表 DROP FOREIGN KEY 外键名称;

外键的级联

级联操作:在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作。

级联操作语法 描述
ON UPDATE CASCADE 级联更新,只能是创建表的时候创建级联关系。更新主表中的主键,从表中的外键列也自动同步更新
ON DELETE CASCADE 级联删除

举例:

创建tb1表

复制
CREATE TABLE tb1 (
id INT,
name VARCHAR(30),
age INT,
PRIMARY KEY(id)
);

创建tb2表

复制
-- 创建 tb2 表,添加级联更新和级联删除
CREATE TABLE tb2 (
card INT,
name VARCHAR(30),
age INT,
CONSTRAINT tb2_card FOREIGN KEY(card) REFERENCES tb1(id)
ON UPDATE CASCADE
ON DELETE CASCADE
);

这个时候,如果我们向tb1表中插入数据:

复制
INSERT INTO tb1 (id, name, age) VALUES (1001, 'LeeHua', 22)

那么,tb2中的card字段也会更新。

这个时候,如果主表执行删除,则会自动删除从表中的相应记录。

posted @   LeeHua  阅读(710)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示

目录导航