开始MySQL之路——MySQL约束概述详解

MySQL约束

复制代码
create table [if not exists] 表名(
 字段名1 类型[(宽度)] [约束条件] [comment '字段说明'],
 字段名2 类型[(宽度)] [约束条件] [comment '字段说明'],
 字段名3 类型[(宽度)] [约束条件] [comment '字段说明']
)[表的一些设置];
  • 概念

    约束英文:constraint

    约束实际上就是表中数据的限制条件

  • 作用

    表再设计的时候加入约束的目的就是为了保证表中的记录完整性和有效性,比如用户表有些列的值(手机号)不能为空,有些列的值(身份证号)不能重复。

  • 分类

    • 主键约束(primary key) PK

    • 自增长约束(auto_ increment)

    • 非空约束(not_null)

    • 唯一性约束(unique)

    • 默认约束(default)

    • 零填充约束(zerofill)

    • 外键约束(foreign key) FK

主键约束

  • 概念

    MySQL主键约束是一个列或者多个列的组合,其值能唯一地标识表中的每一行,方便再RDBMS中尽快的找到某一行。

    主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值。

    每个表最多只允许一个主键

    主键约束的关键字是:primary key

    当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。

    操作

    • 添加单列主键

    • 添加多列联合主键

    • 删除主键

①:添加单列主键

创建单列主键有两种方式,一种是在定义字段的同时指定主键,一种是定义完字段之后指定主键

方式1-语法:

复制代码
在 create table 语句中,通过 primary key 关键字来指定主键。
在定义字段的同时指定主键,语法格式如下:
create table 表名(
...
<字段名><数据类型> primary key
...
)

方式1-实现:

复制代码
在定义字段之后再指定主键,语法格式如下:
create table 表名(
...
[constraint<约束名>] primary key[字段名]
)

数据修改
格式
create  table if not exists emp(
    sid int primary key,
    sname varchar(20),
    deptid int,
    salary double
);

方式2-实现:

复制代码
create table emp2(
eid INT,
name VARCHAR(20),
deptId INT,
salary double,
constraint pk1 primary key(id)
)
复制代码
主键不能重复
insert into emp(sid, sname, deptid, salary) VALUES (1001,'tom',1,122.34);
insert into emp(sid, sname, deptid, salary) VALUES (1002,'jerry',1,122.34);
主键不能为空
insert into emp(sid, sname, deptid, salary) VALUES (null,'tom',1,122.34);

②:联合主键

所谓的联合主键,就是这个主键是由一张表中多个字段中有多个字段组成的。

注意:

1:当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。

2:一张表只能有一个主键,联合主键也是一个主键

语法:

复制代码
create table 表名(
...
primary key(字段1,字段2,...,字段n)
)

实现:

复制代码
create table emp3(
  name varchar(20),
  deptId int,
  salary double,
  primary key(name,deptId)
)

insert into emp3(name, deptId, salary) VALUES ('tom',1,1200.12);
insert into emp3(name, deptId, salary) VALUES ('tom',1,1200.12);
insert into emp3(name, deptId, salary) VALUES ('jerry',1,1200.12);
insert into emp3(name, deptId, salary) VALUES (null,1,1200.12);

③:添加主键

主键约束不仅可以在创建表的同时创建,也可以在修改表时添加。

语法:

复制代码
create table 表名(
...
);
alter  table <表名> add primary key(字段列表);

实现:

复制代码
添加主列主键
​
create table emp5(
  eid int,
  name varchar(20),
  deptId int,
  salary double
);
​
alter table emp5 add primary key(name,deptId);

④:删除主键

一个表中不需要主键约束时,就需要从表中将其删除。删除主键约束的方法要比创建主键约束容易的多。

格式:

复制代码
alter table <数据表名> drop priamry key;

实现:

复制代码
删除单列主键
alter table emp1 drop primary key;
​
删除联合主键
alter table emp5 drop primary key;

自增长约束

  • 概念

在MySQL中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。

通过给字段添加auto_increment属性来实现主键自增长

  • 语法

字段名 数据类型 auto_increment

  • 操作
复制代码
create table t_user1(
  id int primary key auto_increment,
  name varchar(20)
);

非空约束

唯一约束

默认约束

零填充约束

相关推荐
冰块的旅行17 分钟前
MySQL 的时区问题
mysql
舒一笑1 小时前
如何优雅统计知识库文件个数与子集下不同文件夹文件个数
后端·mysql·程序员
鼠鼠我捏,要死了捏2 小时前
生产环境MongoDB分片策略优化与故障排查实战经验分享
数据库·mongodb·分片
KaiwuDB2 小时前
KWDB 分布式架构探究——数据分布与特性
数据库·分布式
笨蛋不要掉眼泪3 小时前
Spring Boot集成腾讯云人脸识别实现智能小区门禁系统
java·数据库·spring boot
Leiwenti4 小时前
MySQL高阶篇-数据库优化
数据结构·数据库·mysql
你的电影很有趣4 小时前
lesson44:Redis 数据库全解析:从数据类型到高级应用
数据库·redis·缓存
NineData4 小时前
2025 DTCC大会来了,NineData联合创始人周振兴将分享《AI重塑数据库管理模式》的主题演讲
数据库
NineData4 小时前
NineData亮相2025中国数据库技术大会,并荣获《年度优秀技术团队奖》
数据库
NightDW4 小时前
连续周更任务模块的设计与实现
java·后端·mysql