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的主键
这里有两个表,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=起始值; 备注:DELETE 和 TRUNCATE 对自增长的影响 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字段也会更新。
这个时候,如果主表执行删除,则会自动删除从表中的相应记录。
本文来自博客园,作者:LeeHua,转载请注明原文链接:https://www.cnblogs.com/liyihua/p/12310525.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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)