MySQL 约束
MySQL的约束
※ 主键约束 :primary key
※ 唯一性约束:unique
※ 外键约束:foreign key
※ 非空约束:not null
※ 默认值约束:default
1. 添加主键约束 PRIMARY KEY
1. 直接在字段后添加:PRIMARY KEY
<字段名> <数据类型> PRIMARY KEY [默认值]
i.e.
mysql> create table test (id int(5) primary key, name varchar(10));
mysql> desc test ;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(5) | NO | PRI | NULL | |
| name | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2. 建完所有字段后单独指定:
mysql> create table test2
-> (
-> id int(5),
-> name char(10),
-> primary key(id)
-> );
Query OK, 0 rows affected, 1 warning (0.02 sec)
3. 添加复合主键
将两个字段联合在一起,当成主键
mysql> create table test3
-> (
-> id int(5),
-> name char(10),
-> primary key(id,name)
-> );
Query OK, 0 rows affected, 1 warning (0.02 sec)
4. 修改表的主键
1. 表中原来没有主键约束
mysql> alter table student
-> add primary key(id);
Query OK, 0 rows affected (0.05 sec)
2. 原本表里有主键,需要先删除:
mysql> alter table student drop primary key , add primary key(name);
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(5) | NO | | NULL | |
| name | varchar(10) | NO | PRI | NULL | |
| class | varchar(5) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2. 添加唯一约束 UNIQUE
建表时在字段后面添加
<字段名> <数据类型> UNIQUE
e.g.
mysql> create table test (id int(5) unique);
修改表的唯一约束
ALTER TABLE <数据表名> ADD CONSTRAINT <唯一约束名> UNIQUE(<列名>);
删除表的唯一约束
ALTER TABLE <表名> DROP INDEX <唯一约束名>;
3. 检查约束:CHECK
检查约束(CHECK)可以通过 CREATE TABLE 或 ALTER TABLE 语句实现
CHECK <表达式>
建表时创建
# 创建工资表,添加约束 工资>0,并且<30000
mysql> create table salarys
-> (
-> id int(6) primary key,
-> salary float,
-> name varchar(10),
-> check(salary>0 and salary<30000)
-> );
Query OK, 0 rows affected, 1 warning (0.03 sec)
修改表的约束
mysql> alter table salarys
-> add constraint ck_name
-> check(name<>'laowang')
-> ;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
删除约束
ALTER TABLE <数据表名> DROP CONSTRAINT <检查约束名>;
4. 默认约束 DEFAULT
<字段名> <数据类型> DEFAULT <默认值>;
e.g.
创建一个默认字段为‘beijing’的表
mysql> create table test4
-> (
-> location varchar(10) default 'beijing'
-> );
Query OK, 0 rows affected (0.03 sec)
修改表的默认约束
ALTER TABLE <数据表名> CHANGE COLUMN <字段名> <数据类型> DEFAULT <默认值>;
删除表的默认约束
ALTER TABLE <数据表名> CHANGE COLUMN <字段名> <字段名> <数据类型> DEFAULT NULL;
5. 非空约束 NOT NULL
建表时创建:
<字段名> <数据类型> NOT NULL;
修改表中约束:
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名>
<字段名> <数据类型> NOT NULL;
删除约束
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> NULL;
6. 外键约束:FOREIGN KEY
[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…]
建表时创建约束:
mysql> create table grade
-> (
-> gid int(10),
-> record int(10),
-> constraint fk_id
-> foreign key(gid) references user(id)
-> );
Query OK, 0 rows affected, 2 warnings (0.04 sec)
给表添加外键约束:
ALTER TABLE <数据表名> ADD CONSTRAINT <索引名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
删除外键约束:
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
分类:
MYSQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构