②零基础MySQL数据库-MySQL约束

作用

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

分类

  • 主键约束(primary key) PK

  • 自增长约束(auto_increment)

  • 非空约束(not null)

  • 唯一性约束(unique)

  • 默认约束(default)

  • 零填充约束(zerofill)

  • 外键约束(foreign key) FK

主键约束

概念

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

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

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

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

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

添加单列主键

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

-- 在 create table 语句中,通过 PRIMARY KEY 关键字来指定主键。
-- 方法一:
--在定义字段的同时指定主键,语法格式如下:
create table 表名(...<字段名> <数据类型> primary key, ...
);
​
CREATE TABLE emp1(id int PRIMARY KEY,name VARCHAR(20),deptID int,salary DOUBLE
);
​
​
-- 方法二
--在定义字段之后再指定主键,语法格式如下:
create table 表名(...[constraint <约束名>] primary key [字段名]
);
​
CREATE TABLE emp2(id int,name VARCHAR(20),deptID int,salary DOUBLE,constraint pk1 PRIMARY key(id)  -- constraint   pk1可以省略
);

添加多列联合主键

CREATE TABLE emp3(
name VARCHAR(20),
dept int,
salary DOUBLE,
CONSTRAINT pk2 PRIMARY key(name,dept)
);

通过修改表结构的方式添加主键

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

create table 表名(...
);
alter table <表名> add primary key(字段列表);
​
CREATE TABLE emp4(
id int,
name VARCHAR(20),
gender VARCHAR(5)
);
ALTER TABLE emp4 add PRIMARY KEY(id);

删除主键

alter table <数据表名> drop primary 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) 
);
id 从1开始
INSERT INTO t_user1 VALUES (NULL,'张三'),
(NULL,'李四'),(NULL,'王五'),(NULL,'老刘');
​
​
默认情况下,auto_increment的初始值是 1,每新增一条记录,字段值自动加 1。一个表中只能有一个字段使用 auto_increment约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)。
auto_increment约束的字段必须具备 NOT NULL 属性。
auto_increment约束的字段只能是整数类型(TINYINT、SMALLINT、INT、BIGINT 等。
auto_increment约束字段的最大值受该字段的数据类型约束,如果达到上限,auto_increment就会失效。

指定自增长的值

-- 方式1,创建表时指定
create table t_user2 ( id int primary key auto_increment, name varchar(20)
)auto_increment=100;
​
-- 方式二:建立表之后
alter table user3 auto_increment=200;
INSERT into user3 VALUES(NULL,'合计数');
​
​
delete和truncate在删除数据后自增长的变化
delete数据之后自动增长从断电开始          从上一次断开的位置开始
truncate数据之后自动增长从默认起始位置开始 从1开始自增长

非空约束

添加非空约束

方式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 
);
​
​
​
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;
​

删除非空约束

-- alter table 表名 modify 字段 类型 
alter table t_user7 modify name varchar(20) ; 
alter table t_user7 modify address varchar(20) ;

唯一约束

方式1:<字段名> <数据类型> unique
方式2: alter table 表名 add constraint 约束名 unique(列);-- 创建表时指定
create table t_user8 ( id int , name varchar(20) , phone_number varchar(20) unique -- 指定唯一约束 
);
-- 方式2
create table t_user9 ( id int , name varchar(20) , phone_number varchar(20) -- 指定唯一约束 
); 
alter table t_user9 add constraint unique_ph unique(phone_number);-- 删除约束
-- alter table <表名> drop index <唯一约束名>;
alter table t_user9 drop index unique_ph;如果都是NULL没问题
INSERT into t_user8 VALUES(1001,'hwh',NULL),
(1001,'lisi',NULL);     -- 在mysql中 NULL和任何值都不相同,甚至和自己也不相同(NULL!=NULL)

默认约束

方式1: <字段名> <数据类型> default <默认值>;
方式2: alter table 表名 modify 列名 类型 default 默认值; -- 方式1 
create table t_user10 ( id int , name varchar(20) , address varchar(20) default ‘北京’ -- 指定默认约束 
);-- 方式2 
-- alter table 表名 modify 列名 类型 default 默认值; create table t_user11 ( id int , name varchar(20) , address varchar(20)  
);
alter table t_user11 modify address varchar(20) default  ‘北京’;-- 删除默认值
-- alter table <表名> modify column <字段名> <类型> default null; 
alter table t_user11 modify column address varchar(20) default null;

零填充约束

1、插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0

2、zerofill默认为int(10)

3、当使用zerofill 时,默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍,例如,有符号为-128~+127,无符号为0~256。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/284588.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

是德科技keysight DSOX3024T示波器

181/2461/8938产品概述&#xff1a; DSOX3024T 示波器 要特性与技术指标 使用电容触摸屏进行简洁的触控操作&#xff1a; •提高调试效率 •触控设计可以简化文档记录 •使用起来就像您喜欢的智能手机或平板电脑一样简单 使用 MegaZoom IV 技术揭示偶发异常&#xff1a; •超快…

rpc详解rpc框架

文章目录 概述rpc的优点组件工作流程&RPC的底层原理RPC的底层原理 RPC框架rpc框架优点RPC 的实现基础RPC的应用场景RPC使用了哪些关键技术rpc 调用异常一般怎么处理rpc和http的区别为什么RPC要比HTTP更快一些Dubbo和openfeign 区别远程调用RPC框架传输协议传输速度 概述 在…

135. 分发糖果(力扣LeetCode)

文章目录 135. 分发糖果题目描述贪心算法代码如下 总结 135. 分发糖果 题目描述 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求&#xff0c;给这些孩子分发糖果&#xff1a; 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩…

my2sql —— go语言版binlog解析及闪回工具

之前学习过python语言版binlog解析及闪回工具 MySQL闪回工具简介 及 binlog2sql工具用法 最近听同事介绍有了新的go语言版的my2sql。优点是不需要安装一大堆依赖包&#xff0c;直接可以安装使用&#xff0c;并且解析更高效&#xff0c;试用一下。 一、 下载安装 1. 软件下载 …

【原理图PCB专题】Cadence 17.4 配置Capture.ini让CIS数据库界面查看PCB封装

在CIS数据库中,如果进行了正确配置是可以查看原理图符号库与PCB封装库的。如下所示: 看到封装库的意义在于一个原理图封装是可以对应多个PCB封装的,如同一个原理图座子,对应了侧插或是竖插,那在没有PCB封装的时候,我们只能通过去看详细资料来判断。如果有PCB封装显示,只…

设计模式-访问者(Visitor)模式详解和应用

文章目录 前言访问者模式介绍结构包含的角色应用场景代码示例访问者模式的扩展访问者模式优缺点总结 前言 最近在做一个根据数学表达式生成java执行代码的功能&#xff0c;其中用到了访问者模式。使我对访问者模式有了更深入的理解。故写下此篇文章分享出来&#xff0c;不足之…

IPV6协议之RIPNG

目录 前言&#xff1a; 一、RIPNG与RIP的区别 二、如何配置RIPNG 如何解决RIPNG环路问题呢&#xff1f; 控制RIPNG的选路 1、修改RIPNG默认优先级 2.配置接口附加开销值从而干涉RIPNG的选路 RIPNG拓展配置 1.RIPNG的认证 配置RIPNG进程下的IPsec认证&#xff1a; 配…

Spring Cloud Gateway教程

1 微服务网关概述 Spring Cloud Gateway是在 Spring 生态系统之上构建的API网关服务&#xff0c;旨在为微服务架构应用提供一种简单有效的统一的API路由管理方式。 Spring Cloud Gateway主要功能&#xff1a; 反向代理认证鉴权流量控制熔断日志监控 2 Spring Cloud Gateway三…

基于python+vue超市在线销售系统的设计与实现flask-django-php-nodejs

根据此问题&#xff0c;研发一套超市在线销售系统&#xff0c;既能够大大提高信息的检索、变更与维护的工作效率&#xff0c;也能够方便信息系统的管理运用&#xff0c;从而减少信息管理成本&#xff0c;提高效率。 该超市在线销售系统采用B/S架构、并采用python语言以及django…

拌合楼管理系统(八) c#海康威视摄像头车牌识别

前言: c#调用海康威视SDK实现车牌识别 原本以为海康威视sdk的Demo里面没有车牌识别的实例,后来发现自己肤浅了,官方是有提供的,只是车牌识别是通过安防布警的方式实现的.程序主动监听,触发告警后获取到车牌信息. 一、接口调用的流程&#xff1a; 首先初始化sdk -> 开…

CI/CI实战-jenkis结合gitlab 4

实时触发 安装gitlab插件 配置项目触发器 生成令牌并保存 配置gitlab 测试推送 gitlab的实时触发 添加jenkins节点 在jenkins节点上安装docker-ce 新建节点server3 安装git和jdx 在jenkins配置管理中添加节点并配置从节点 关闭master节点的构建任务数

二分查找法总结

目录 1、思路讲解&#xff08;LC704&#xff09;2、代码思路讲解&#xff08;循环不变量&#xff09;&#xff08;1&#xff09; 左闭右闭&#xff08;2&#xff09;左闭右开&#xff08;3&#xff09;总结&#xff1a;左开右闭和左闭右开&#xff08;4&#xff09;复杂度分析 …

老阳分享|temu跨境电商选品师项目能赚钱吗?

近年来&#xff0c;跨境电商行业蓬勃发展&#xff0c;成为众多创业者追逐的热点。其中&#xff0c;老阳分享的temu跨境电商选品师项目备受关注。那么&#xff0c;这个项目真的能赚钱吗?下面&#xff0c;我们就跟随本文去了解一下。 首先&#xff0c;temu作为拼多多旗下的跨境电…

数据结构与算法4-冒泡排序

文章目录 1. 认识冒泡排序2. 图示2.1 图示12.2 图示2 3. 代码 1. 认识冒泡排序 双层for循环&#xff0c;每次选出最大的数“浮”到数组的最后面&#xff1b;时间复杂度O( n 2 n^2 n2)&#xff0c;空间复杂度O(1);重复地遍历待排序的数列&#xff0c;一次比较两个元素&#xff…

ClickHouse部署安装

准备工作 确定防火墙处于关闭状态 CentOS取消打开文件数限制 在hadoop102的 /etc/security/limits.conf文件的末尾加入以下内容 注意&#xff1a;以下操作会修改 Linux 系统配置&#xff0c;如果操作不当可能导致虚拟机无法启动&#xff0c;建议在执行以下操作之前给…

Vue中的状态管理Vuex,基本使用

1.什么是Vuex? Vuex是专门为Vue.js设计的状态管理模式;特点:集中式存储和管理应用程序中所有组件状态,保证状态以一种可预测的方式发生变化。 1.1.什么是状态管理模式? 先看一个单向数据流的简单示意图 state:驱动应用的数据源 view:以声明方式将state映射到视图 actions:…

2024智能EDM邮件营销系统使用攻略

在数字化营销领域&#xff0c;智能EDM&#xff08;Electronic Direct Mail&#xff09;邮件营销作为一种高效、精准的推广方式&#xff0c;正日益受到企业的高度重视。而要实现这一策略的成功落地&#xff0c;一个高可靠性和高稳定性的专业邮件发送平台则是不可或缺的关键环节。…

arduino ide 开发esp8266注意事项

1.引脚序列号必须是常量来定义&#xff0c;否则会无限重启。 #define p2 2 const int Pin2p2; pinMode(Pin2, OUTPUT); 2.关于wifi的模式&#xff0c;ap,sta&#xff0c;apsta三种模式的初始化必须放在void set_up(){}这个函数里&#xff0c;不能额外搞个自定义函数&#xf…

SpringCloud-Gateway服务网关

一、网关介绍 1. 为什么需要网关 Gateway网关是我们服务的守门神&#xff0c;所有微服务的统一入口。 网关的核心功能特性&#xff1a; 请求路由 权限控制 限流 架构图&#xff1a; 权限控制&#xff1a;网关作为微服务入口&#xff0c;需要校验用户是是否有请求资格&am…