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

news/2025/4/2 6:27:30/

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)
);

  

  

 

 

 

非空约束

  

唯一约束

 

默认约束

零填充约束

 


http://www.ppmy.cn/news/1064868.html

相关文章

黑客炼成手册

一、什么是网络安全&#xff1f;什么是黑客&#xff1f; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等…

videojs 实现自定义组件(视频画质/清晰度切换) React

前言 最近使用videojs作为视频处理第三方库&#xff0c;用来对接m3u8视频类型。这里总结一下自定义组件遇到的问题及实现&#xff0c;目前看了许多文章也不全&#xff0c;官方文档写的也不是很详细&#xff0c;自己摸索了一段时间陆陆续续完成了&#xff0c;这是实现后的效果.…

Enable Secure boot on software

User Guide&#xff1a; Secure Boot V1Secure Boot V2espsecure.py Please follow these steps: 1、Query the chip version esptool.py chip_idThe V1.0 version chip only supports Secure boot V1 The V3.0 or later version chip support Secure boot V2 2、You need…

Linux(基础篇二)

Linux基础篇 Linux基础篇二5. 系统管理5.1 Linux中的进程和服务5.3 systemctl5.4 运行级别CentOS 6CentOS 7 5.5 关机重启命令 Linux基础篇二 5. 系统管理 5.1 Linux中的进程和服务 计算机中&#xff0c;一个正在执行的程序或命令&#xff0c;被叫做“进程”(process) 启动之…

python:用python构建一个物联网平台

要使用Python构建物联网平台&#xff0c;您需要考虑以下步骤&#xff1a; 确定平台的基本要求和功能 首先&#xff0c;您需要明确您将要构建的平台的功能和特点。例如&#xff0c;您可能需要支持多种设备&#xff0c;并使用各种传感器来收集数据。您可能需要实现实时数据可视化…

Java-Lambda表达式

引入 Lambda表达式是在JAVA 8 中引入的&#xff0c;初衷是进一步简化匿名类的语法&#xff08;匿名类还需要在类中实现函数&#xff09;&#xff0c;并使JAVA走向函数式编程。 语法 (parameters) -> expression 或 (parameters) -> { statements; } 可选类型声明。…

Java八股文网站集合,持续更新

【腾讯文档】Java 学习资料 https://docs.qq.com/sheet/DU0hRbm9YSFF2VUpP?tabBB08J2 网站 网址名称备注八股文https://topjavaer.cn/八股文http://www.cyc2018.xyz/八股文https://javaguide.cn/JavaGuide八股文https://doocs.gitee.io/advanced-java/#/八股文https://cross…

selenium实现输入数字字母验证码

思路 1. 登录url 2. 获取验证码坐标 3. 根据桌标截图验证码 4. 对验证码进行识别 5. 自动输入验证码 测试代码 import os import time from io import BytesIO from PIL import Image from selenium import webdriver from selenium.webdriver.common.by import By impo…