当前位置: 首页 > news >正文

MySQL 2:MySQL约束

一、定义

约束(constraint),即表中数据的限制条件。在表设计中加入约束的目的是保证表中记录的完整性和有效性。 比如user表,有些列(手机号)的值不能为空,有些列(身份证号)的值不能重复。

主要分为主键约束(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 ...
)

例如:

create table emp1(eid int primay key,name VARCHAR(20),deptId int,salary double
);

定义字段后指定主键:

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

例如:

create table emp2(eid INT,name VARCHAR(20),deptId INT,salary double,constraint pk1 primary key(id));

2. 添加多列主键(联合主键)

联合主键就是主键由表中的多个字段组成。当主键由多个字段组成时,不能直接在字段名后声明主键约束。一张表只能有一个主键,联合主键也是一个主键。

create table 表名(...primary key (字段1,字段2,…,字段n)
);

例如:

create table emp3( name varchar(20), deptId int, salary double, primary key(name,deptId) 
);

3. 通过修改表结构添加主键

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

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

例如:

-- 添加单列主键
create table emp4(eid int, name varchar(20), deptId int, salary double
);
alter table emp4 add primary key(eid);

4. 删除主键约束

当表中不再需要主键约束时,需要将其从表中删除。有一种比创建主键约束更简单的方法来删除主键约束。

alter table <数据表名> drop primary key;

例如:

-- 删除单列主键 
alter table emp1 drop primary key;-- 删除联合主键 
alter table emp5 drop primary key;

三、自增长约束

自增长(auto increment)约束指在MySQL中,当主键定义为自增长时,主键的值不再需要用户输入数据,而是由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长增长。可以通过给字段增加属性实现主键自增长。

字段名 数据类型 auto_increment

例如:

create table t_user1( id int primary key auto_increment, name varchar(20) 
);

默认情况下,auto_increment 的初始值为 1,每增加一条新记录,字段值自动增加 1。一张表中只有一个字段可以使用auto_increment约束,并且该字段必须有唯一索引以避免序号重复(即主键或部分主键)。受 auto_increment 约束的字段必须具有 NOT NULL 属性。auto_increment约束的字段只能是整型(TINYINT、SMALLINT、INT、BIGINT等)。auto_increment 约束字段的最大值受字段数据类型的约束。 如果达到上限,auto_increment 将失败。

1. 指定自增字段初始值

如果在第一条记录中设置了该字段的初始值,则新添加的记录将从该初始值开始递增。 例如,如果表中插入的第一条记录的id值设置为5,那么在插入记录时,id值将从5开始增加。

-- 方式1,创建表时指定
create table t_user2 ( id int primary key auto_increment, name varchar(20)
)auto_increment=100;-- 方式2,创建表之后指定
create table t_user3 ( id int primary key auto_increment, name varchar(20)
);alter table t_user2 auto_increment=100;

2. delete和truncate在删除后自增列的变化

delete数据后,从断点开始自动增长。truncate数据后自动增长,从默认起始值开始。

四、非空约束

非空约束(not null)是指一个字段的值不能为空。对于使用非空约束的字段,如果用户在添加数据时没有指定值,数据库系统会报错。

--方式1:
<字段名><数据类型> not null;
--方式2:
alter table 表名 modify 字段 类型 not null;

例如:

-- 方式1,创建表时指定
create table t_user6 ( id int , name varchar(20) not null, address varchar(20) not null 
);
-- 方式1,创建表后指定
create table t_user7 ( id int , name varchar(20) , -- 指定非空约束 address varchar(20) -- 指定非空约束 
); 
alter table t_user7 modify name varchar(20) not null; 
alter table t_user7 modify address varchar(20) not null;

1. 删除非空约束

alter table 表名 modify 字段 类型

例如:

alter table t_user7 modify name varchar(20); 
alter table t_user7 modify address varchar(20);

五、唯一约束

唯一约束(Unique Key)是指该字段的值在所有记录中都不能重复。比如,给id字段加上唯一约束后,每条记录的id值都是唯一的,不能重复。

--方式1:
<字段名> <数据类型> unique
--方式2: 
alter table 表名 add constraint 约束名 unique(列);

例如:

-- 创建表时指定
create table t_user8 ( id int , name varchar(20) , phone_number varchar(20) unique -- 指定唯一约束 
);
-- 创建表后指定
create table t_user9 ( id int , name varchar(20) , phone_number varchar(20) -- 指定唯一约束 
); 
alter table t_user9 add constraint unique_ph unique(phone_number);

1. 删除唯一约束

alter table <表名> drop index <唯一约束名>;

例如:

alter table t_user9 drop index unique_ph;

六、默认约束

默认约束用于指定列的默认值。

--方式1:
<字段名> <数据类型> default <默认值>;
--方式2:
alter table 表名 modify 列名 类型 default 默认值;

例如:

create table t_user10 ( id int, name varchar(20), address varchar(20) default '北京' -- 指定默认约束 
);create table t_user11 ( id int, name varchar(20), address varchar(20)  
);
alter table t_user11 modify address varchar(20) default '北京';

1. 删除默认约束

alter table <表名> modify column <字段名> <类型> default null;

例如: 

alter table t_user11 modify column address varchar(20) default null;

七、零填充约束

零填充约束(zerofill)指插入数据时,当字段的值长度小于定义的长度时,会在该值前面加上相应的0。zerofill 默认为 int(10)。使用zerofill时,默认会自动加上Unsigned(无符号)属性。使用无符号属性后,取值范围是原来的两倍。例如有符号为-128~+127,无符号为0~256。

例如:设置id字段的长度为8,则真实数据为8,显示在数据库中为00008。

create table t_user12 ( id int zerofill, -- 零填充约束name varchar(20)   
);

1. 删除零填充约束

alter table t_user12 modify id int;

相关文章:

MySQL 2:MySQL约束

一、定义 约束&#xff08;constraint&#xff09;&#xff0c;即表中数据的限制条件。在表设计中加入约束的目的是保证表中记录的完整性和有效性。 比如user表&#xff0c;有些列&#xff08;手机号&#xff09;的值不能为空&#xff0c;有些列&#xff08;身份证号&#xff…...

C4--Vivado添加列表中不存在的FLash器件2023-02-10

以华邦SPI FLASH W25Q128JVEIQ为例进行说明。&#xff08;其他Flash添加步骤一致&#xff09; 1.本地vivado安装目录D:\Softwares\xlinx_tools\Vivado\2020.2\data\xicom下&#xff0c;找到xicom_cfgmem_part_table.csv文件&#xff0c;这个表与vivado hardware manager中的器…...

php代码审计

准备工作 了解CMS的基本信息 该CMS使用的是什么设计模式&#xff1f;该CMS每个目录大概负责的功能(视图、缓存、控制器等)。该CMS处理请求的基本流程是如何走的&#xff1f;以及在系统中使用的全局过滤函数是如何对数据进行处理的&#xff1f; 代码审计方法 敏感函数回溯 …...

接口测试入门,如何划分接口文档

1.首先最主要的就是要分析接口测试文档&#xff0c;每一个公司的测试文档都是不一样的。具体的就要根据自己公司的接口而定&#xff0c;里面缺少的内容自己需要与开发进行确认。 我认为一针对于测试而言的主要的接口测试文档应该包含的内容分为以下几个方面。 a.具体的一个业…...

数据库学习第二天

第7章 系统预定义函数 函数&#xff1a;代表一个独立的可复用的功能。 和Java中的方法有所不同&#xff0c;不同点在于&#xff1a;MySQL中的函数必须有返回值&#xff0c;参数可以有可以没有。 MySQL中函数分为&#xff1a; &#xff08;1&#xff09;系统预定义函数&…...

NODE => CORS跨域资源共享学习

1.CORS跨域资源共享 cors是Express的一个第三方中间件。通过安装和配置cors中间件&#xff0c;可以很方便地解决跨域问题 运行npm install cors 安装中间件使用const cors require(‘cors’) 导入中间件在路由之前调用 app.use&#xff08;cors&#xff08;&#xff09;&#…...

golang rabbitMQ 生产者复用channel以及生产者组分发策略

引用的是rabbitMQ官方示例的库&#xff1a;github.com/rabbitmq/amqp091-go在网络编程中我们知道tcp连接的创建、交互、销毁等相关操作的"代价"都是很高的&#xff0c;所以就要去实现如何复用这些连接&#xff0c;并要做到高效并可靠。预期效果&#xff1a;项目初始化…...

掌握了这项技能的性能测试师,90%都升职加薪了

初入职场的新人该怎么做才能让自己快速成长&#xff1f;在公司一直做着手工测试&#xff0c;如何才能提升自己&#xff0c;避免陷入“只涨年龄不涨经验”的尴尬&#xff1f;做为一名软件测试工程师&#xff0c;我们不得不去面对这些问题&#xff0c;有的人找到了答案&#xff0…...

linux中crontab定时任务导致磁盘满和云监控未报警的的坑

一个后台开发者&#xff0c;兼职运维工作中&#xff0c;配置linux中crontab定时任务&#xff0c;导致磁盘满和云监控未报警的问题的坑。 1.磁盘满 使用命令 df -h2.问题排查 2.1排查日志 命令 cat /var/log/messages日志文件的默认路径是&#xff1a;/var/log 下面是几个…...

vscode中安装python运行调试环境

在运行代码之前&#xff0c;需要到微软商店下载安装python环境&#xff0c;35m&#xff0c;都是自动的。 1、安装python 的extensions插件。 ctrlshiftx 输入 python 后点击 install 按钮。 2、新建文件夹spider文件夹。 3、在新建文件夹spider下新建文件spider.py源代码。…...

【微服务】微服务架构超强讲解,通俗易懂

微服务架构目录一、微服务架构介绍二、出现和发展三、传统开发模式和微服务的区别四、微服务的具体特征五、面向服务的架构SOA&#xff08;service oriented architecture&#xff09;和微服务的区别1、SOA喜欢重用&#xff0c;微服务喜欢重写2、SOA喜欢水平服务&#xff0c;微…...

内核中的竞态产生的原因和解决方法

产生原因&#xff1a; 由于多进程对临界资源的抢占 根本原因&#xff1a; 1、对于单核处理器而言&#xff0c;内核支持抢占就会出现竞态 2、对于多核处理器而言&#xff0c;是核与核的竞态 3、进程与中断间存在竞态 4、arm开发板不会出现中断与中断间的竞态&#xff08;目前&am…...

【微服务】Elasticsearch文档索引库操作(二)

&#x1f697;Es学习第二站~ &#x1f6a9;Es学习起始站&#xff1a;【微服务】Elasticsearch概述&环境搭建(一) &#x1f6a9;本文已收录至专栏&#xff1a;微服务探索之旅 &#x1f44d;希望您能有所收获 一.索引库操作 索引库就类似数据库表&#xff0c;mapping映射就类…...

【论文速递】NAACL2022-DEGREE: 一种基于生成的数据高效事件抽取模型

【论文速递】NAACL2022-DEGREE: 一种基于生成的数据高效事件抽取模型 【论文原文】&#xff1a;DEGREE A Data-Efficient Generation-Based Event Extraction Mode 【作者信息】&#xff1a;I-Hung Hsu &#xff0c; Kuan-Hao Huang&#xff0c; Elizabeth Boschee &#xff…...

C++类和对象(下)

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f38a;每篇一句&#xff1a; 图片来源 I do not believe in taking the right decision. I take a decision and make it right. 我不相信什么正确的决定。我都是先做决定&#xff0c;然后把…...

Java常见的六种线程池、线程池-四种拒绝策略总结

点个关注&#xff0c;必回关 一、线程池的四种拒绝策略&#xff1a; CallerRunsPolicy - 当触发拒绝策略&#xff0c;只要线程池没有关闭的话&#xff0c;则使用调用线程直接运行任务。 一般并发比较小&#xff0c;性能要求不高&#xff0c;不允许失败。 但是&#xff0c;由于…...

Node=>Express中间件分类 学习4

1.中间件分类 应用级别的中间件路由级别的中间件错误级别的中间件Express 内置的中间件第三方的中间件 通过app.use&#xff08;&#xff09;或app.get&#xff08;&#xff09;或app.post&#xff08;&#xff09;绑定到app实力上的中间件&#xff0c;叫做应用级别的中间件 …...

在阿里当外包,是一种什么工作体验?

上周和在阿里做外包的朋友一起吃饭&#xff0c;朋友吃着吃着&#xff0c;就开启了吐槽模式。 他一边喝酒一边说&#xff0c;自己现在做着这份工作&#xff0c;实在看不到前途。 看他状态不佳&#xff0c;问了才知道&#xff0c;是手上的项目太磨人。 他们现在做的项目&#…...

Vue3快速入门【二】

Vue3快速入门一、传值父传子&#xff0c;子传父v-model二、插槽2.1、匿名插槽2.2、具名插槽2.3、插槽作用域2.4、插槽作用域案例2.4.1、初始布局2.4.2、插槽使用2.4.3、点击编辑按钮获取本行数据&#xff08;插槽作用域的使用&#xff09;2.4.4、类型书写优化2.4.5、全局接口抽…...

C++-类和对象(上)

类和对象&#xff08;上&#xff09;一&#xff0c;构造函数1&#xff0c;概念2&#xff0c;特性二&#xff0c;析构函数1&#xff0c;概念2&#xff0c;特性三&#xff0c;拷贝构造1&#xff0c;概念2&#xff0c;特性四&#xff0c;运算符重载1&#xff0c;概念2&#xff0c;…...

CAPL(vTESTStudio) - DoIP - TCP接收_04

TCP接收 函数介绍 TcpOpen函数...

联合培养博士经历对于国内就业有优势吗?

2023年国家留学基金委&#xff08;CSC&#xff09;申请在即&#xff0c;很多在读博士在关心申报的同时&#xff0c;也对联培经历能否有助于国内就业心中存疑&#xff0c;故此知识人网小编重点解答此问题。之前&#xff0c;我们在“CSC联合培养-国内在读博士出国的绝佳选择”一文…...

测试左移之需求质量

测试左移的由来 缺陷的修复成本逐步升高 下面是质量领域司空见惯的一张图&#xff0c;看图说话&#xff0c;容易得出&#xff1a;大部分缺陷都是早期引入的&#xff0c;同时大部分缺陷都是中晚期发现的&#xff0c;而缺陷发现的越晚&#xff0c;其修复成本就越高。因此&#…...

【数据结构初阶】第三节.顺序表详讲

文章目录 前言 一、顺序表的概念 二、顺序表功能接口概览 三、顺序表基本功能的实现 四、四大功能 1、增加数据 1.1 头插法&#xff1a; 1.2 尾插法 1.3 指定下标插入 2、删除数据 2.1 头删 2.2 尾删 2.3 指定下标删除 2.4 删除首次出现的指定元素 3、查找数据…...

新手小白适合做跨境电商吗?

今天的跨境电商已经逐渐成熟&#xff0c;靠运气赚钱的时代早已过去&#xff0c;馅饼不可能从天上掉下来&#xff0c;尤其是你想做一个没有货源的小白劝你醒醒。做跨境电商真的不容易&#xff0c;要想做&#xff0c;首先要分析自己是否适合做。米贸搜整理了以下资料&#xff0c;…...

Python搭建自己[IP代理池]

IP代理是什么&#xff1a;ip就是访问网页数据服务器位置信息&#xff0c;每一个主机或者网络都有一个自己IP信息为什么要使用代理ip&#xff1a;因为在向互联网发送请求中&#xff0c;网页端会识别客户端是真实用户还是爬虫程序&#xff0c;在今天以互联网为主导的世界中&#…...

pandas——plot()方法可视化

pandas——plot()方法可视化 作者&#xff1a;AOAIYI 创作不易&#xff0c;如果觉得文章不错或能帮助到你学习&#xff0c;记得点赞收藏评论哦 在此&#xff0c;感谢你的阅读 文章目录pandas——plot()方法可视化一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤…...

【Three.js基础】坐标轴辅助器、requestAnimationFrame处理动画、Clock时钟、resize页面尺寸(二)

&#x1f431; 个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域新星创作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff1a;vue3从入门…...

C++之完美转发、移动语义(forward、move函数)

完美转发1. 在函数模板中&#xff0c;可以将自己的参数“完美”地转发给其它函数。所谓完美&#xff0c;即不仅能准确地转发参数的值&#xff0c;还能保证被转发参数的左、右值属性不变。2. C11标准引入了右值引用和移动语义&#xff0c;所以&#xff0c;能否实现完美转发&…...

LeetCode刷题系列 -- 48. 旋转图像

给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例 1&#xff1a;输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]]输出&#…...

wordpress关闭在线修改主题/永久免费域名申请

一、定向钻进的基本原理定向钻进是一种在管道敷设遇到自然障碍、人为障碍、成本剧增的情况下的一种地下穿越形式的非开挖施工方法&#xff0c;穿越对象多以河流、山体、自然设施等。首先按预先设定的地下铺管轨迹钻一个小口径先导孔&#xff0c;随后在先导孔出口端的钻杆头部安…...

wordpress登录手机版/爱站工具包的主要功能

以上截图是我使用git重复提交5次的结果&#xff0c;第五次提交成功&#xff1b;这个故事告诉我们&#xff1a;当你连续犯好几次错的时候&#xff0c;你离成功就不远了~~~&#xff08;其实也就是个小问题&#xff0c;yml里面格式的问题~&#xff09; 1、当我们需要在同一个yml文…...

如何对新开网站做收录/seo平台有哪些

步骤1:现成项目步骤2:下载步骤3:导入步骤4:等待步骤5:启动步骤 1 : 现成项目有时候会拿到别人现成的 springboot 项目&#xff0c;而不是从头自己做一个。 这个时候&#xff0c;就需要用导入的方式来 import 这么一个项目了。本教程讲解如何用 eclipse 来导入。步骤 2 : 下载首…...

网站建设中 敬请期待 源码/江小白网络营销案例

基于jspservletpojomysql实现一个javaee/javaweb的火车售票, 该项目可用各类java课程设计大作业中, 火车售票的系统架构分为前后台两部分, 最终实现在线上进行火车售票各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类火车售票相关的实体进行管理。该火车…...

南充网站建设狐灵网络/站长工具pr值查询

云服务器端口响应延迟 内容精选换一换删除指定ID的后端云服务器。删除后端云服务器后&#xff0c;不会再建立新的连接&#xff0c;但是原本建立在这个后端云服务器上的长连接还会保持。DELETE /v2.0/lbaas/pools/{pool_id}/members/{member_id}无无请求样例 删除后端云服务器DE…...

网站建设找什么工作室/长春网站开发

基本数据类型和引用数据类型的区别 基本数据类型 声明时直接在栈内存中开辟空间&#xff0c;并直接在当前内存中存放数据&#xff0c;赋值时传递的是变量中的值&#xff0c;总的来说&#xff0c;基本数据类型是传值的。 引用数据类型 会将实际的数据存放在堆内存中&#xff0c;…...