【数据库表的约束(下)】

news2025/1/16 15:48:00

文章目录

  • 一、自增长主键
  • 二、唯一键约束
  • 三、外键约束
  • 总结

一、自增长主键

这个约束的功能是:
你不用管我,也不需要插入我这一列的数据,我会保证自己与其他数据不冲突,并且是连续的。

创建一个表,表格内容如下:

mysql> create table tt21(
-> id int unsigned primary key auto_increment,
-> name varchar(20) not null
-> );

其中id这个数据段有主键修饰,还是个自增长主键。

mysql> insert into tt21(name) values(‘张三’);
mysql> insert into tt21(name) values(‘李四’);
mysql> insert into tt21(name) values(‘王五’);

插入如上数据后,结果如下:

在这里插入图片描述
可知,在id列,没有插入任何数据,但是由于自增长的约束,id列会从1开始增长,且连续。

再插入一组数据:

insert into tt21(id,name) values(1000,‘王五’);

然后再插入一组数据:

insert into tt21(name) values(‘赵六’);

此时插入的数据没有id哦,查看结果:

在这里插入图片描述

为什么这一次id是从1001开始呢?
在这里插入图片描述
在表的详细属性信息中可以看到,这个AUTO_INCREMENT这个约束,默认的缺省值是1002!也就意味着,当新插入一个数据后,自增长约束下,下一个id就是上一个id+1。

那么,就可以在建表时,修改auto_increment的值,想从什么数字开始就从什么数字开始。

又建立一个表如下:

mysql> create table tt22(
-> id int unsigned primary key auto_increment,
-> name varchar(20) not null
-> )auto_increment=500;

这里设置了自增长键从500开始的。

在这里插入图片描述
插入数据后,id就从500开始了!

自增长的特点:

  • 任何一个字段要做自增长,前提是有primary key主键
  • 自增长字段必须是整数
  • 一张表最多只能有一个自增长

二、唯一键约束

唯一键就是保证某一列的唯一性,也就是插入的数据不能相同,一旦用户插入的数据相同,就会报错且不允许插入。

那这里就有问题了:
上一篇文章说:primary key主键的作用就是不允许出现重复的数据,并且一个表只能有一个主键,那这里又有一个唯一键,是怎么回事呢?

唯一键和主键并不冲突,是相互辅助的,唯一键可以有多个,唯一键修饰的数据类型,不允许出现相同的数据。

创建一个表:

mysql> create table student(
id char(20) primary key,
name varchar(30) not null,
telephone char(11) unique key,
qq char(32) unique key );

表中的telephone和 qq都使用了唯一键约束,而id用主键约束。
在这里插入图片描述

随后插入数据:

insert into student values(‘123’,‘校长’,‘1887778’,‘26652’);

在这里插入图片描述
当主键插入相同的数据时,不允许插入,当主键插入NULL时,也不允许。
但当唯一键插入NULL时,是允许的,当插入的唯一键的值出现相同的情况时,也会出现error。

在这里插入图片描述

但是,我们依然可以修改唯一键的默认可以为空的属性,可以修改成跟主键一样,不能为空。

主键和唯一键有区别:
主键不允许为空,唯一键允许为空,对空值不做比较。

总结:主键和唯一键都用于确保数据的唯一性,但主键具有更强的约束性(不能为空,且一个表只能有一个),而唯一键则更加灵活(可以有空值,且一个表可以有多个)。

三、外键约束

使用外键约束的条件:

  • 1.表与表之间存在关系。
  • 2.外键约束要定义在从表。
  • 3.主表要有主键约束/唯一键约束。
  • 4.外键定义之后,要求外键列的数据要在主表列存在。

foreign key (字段名) references 主表(列)

创建的两个表如下:
一个是class表,一个是student表。

在这里插入图片描述
student表中的第三个数据段class_id,就使用了外键约束,该外键就是在从表中。


总结

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tkinter组件:Checkbutton

Tkinter组件:Checkbutton Checkbutton(多选按钮)组件用于实现确定是否选择的按钮。Checkbutton 组件可以包含文本或图像,你可以将一个 Python 的函数或方法与之相关联,当按钮被按下时,对应的函数或方法将被…

保护公司机密:避免员工带着数据说拜拜

公司的核心资产之一就是数据。无论是客户信息、研发代码、内部决议、财务报告、商业合同、设计图纸等都是公司的重要资产。如果这些数据在员工离职时被带走,或在员工在职期间不当行为导致数据泄露,将给公司带来重大损失。 然而,保护这些数据…

大模型微调之 在亚马逊AWS上实战LlaMA案例(四)

大模型微调之 在亚马逊AWS上实战LlaMA案例(四) 在 Amazon SageMaker JumpStart 上微调 Llama 2 以生成文本 Meta 能够使用Amazon SageMaker JumpStart微调 Llama 2 模型。 Llama 2 系列大型语言模型 (LLM) 是预先训练和微调的生成文本模型的集合&#x…

漏洞伴随App无时不在,该怎么办?

漏洞攻击、加密被破坏以及数据泄露是App面临的三大重要安全风险,无论开发者如何防范,攻击者往往会找到新的方法,并依靠最新的工具来破坏App安全性。 统计数据表明,大约82%的漏洞是在App程序代码中发现的。如果尽快发现…

百度百科怎么修改词条

百度百科是一个由网民编辑内容的网络百科全书,支持用户添加或修改词条。以下是关于如何修改百度百科词条的详细步骤和注意事项。 1. 登录百度百科账户 首先,你需要登录到百度百科账户。如果你还没有百度账号,你需要先注册一个。注册完成后&a…

【vue+el-upload】当action=“#“,代表不使用默认上传,使用自定义上传,http-request获取文件流

el-upload有多种上传行为: 1、立即上传: 当 action 属性被赋予一个有效的 URL 时,一旦用户选择了文件,el-upload 组件会立即自动将文件上传到指定的服务器地址。 2、不立即上传(自定义触发): 如…

2024-5-3学习笔记 虚拟继承原理

目录 原理 总结 前面提到过,解决菱形继承产生的数据二义性问题和数据冗余,就需要用到虚拟继承,关于它是如何解决的,我们来一起研究。 class Person { public :string _name ; // 姓名 }; class Student : virtual public Perso…

微软exchange邮箱发送

使用java发送exchange类型的邮件&#xff0c;foxmail中配置如下图&#xff1a; 需要的maven依赖如下&#xff1a; <dependency><groupId>com.microsoft.ews-java-api</groupId><artifactId>ews-java-api</artifactId><version>2.0</ve…

以gitee为例的git入门使用指北

安装git 在linux中我们首先需要使用 sudo apt install git来下载git 在windows中可以下载msysGit 链接&#xff1a;https://git-scm.com/download/win gitee准备 申请账号 建立仓库 ​ 点击新建仓库 这里一般是私有库&#xff0c;点击创建&#xff0c;这时你就拥有一个线上…

LearnOpenGL(九)之材质

一、材质 在现实世界里&#xff0c;每个物体会对光产生不同的反应。比如&#xff0c;钢制物体看起来通常会比陶土花瓶更闪闪发光&#xff0c;一个木头箱子也不会与一个钢制箱子反射同样程度的光。在opengl中&#xff0c;我们可以针对每种表面定义不同的材质(Material)属性来模…

Web自动化测试入门:前端页面的组成分析详解!

在进行Web自动化测试时&#xff0c;了解前端页面的组成是非常重要的&#xff0c;因为页面的不同元素和交互会直接影响测试的实施和结果。本文将从0到1详细规范地介绍前端页面的组成。 1. 页面结构 一个典型的前端页面通常由HTML、CSS和JavaScript三部分组成。HTML负责页面的整…

STL速查

容器 (Containers) 图解容器 支持随机访问 stringarrayvectordeque支持支持支持支持 string 类 构造函数 string(); ------创建一个空的字符串 例如: string str;string(const char* s); ------使用字符串s初始化string(const string& str); ------拷贝构造 赋值操作…

Spring中FactoryBean的作用和实现原理

Spring中FactoryBean的作用和实现原理 BeanFactory与FactoryBean&#xff0c;相信很多刚翻看Spring源码的同学跟我一样很好奇这俩货怎么长得这么像&#xff0c;分别都是干啥用的。 BeanFactory是Spring中Bean工厂的顶层接口&#xff0c;也是我们常说的SpringIOC容器&#xff…

pip install flash_attn 报错

目录 报错截图关键问题nvcc -V 查看 cuda 版本查看 usr/local/cuda-* 安装的cuda版本设置 cuda-12.0 &#xff08;添加入环境变量&#xff09;FlashAttention 安装成功 报错截图 ImportError: This modeling file requires the following packages that were not found in you…

OSPF Stub区域

原理概述 OSPF 协议定义了多种区域&#xff08; Area &#xff09;类型&#xff0c;其中比较常见的有 Stub 区域和 Totally Stub 区域。区域的类型决定了在这个区域当中所存在的 LSA 的类型。 Stub 区域不允许 Type-4和 Type-5 LSA 进入&#xff0c;该区域会通过 Type-3 LSA…

Elasticsearch中的三种分页策略深度解析:原理、使用及对比

码到三十五 &#xff1a; 个人主页 在Elasticsearch中&#xff0c;分页是查询操作中不可或缺的一部分。随着数据量的增长&#xff0c;如何高效地分页查询数据急需需要面对的问题。Elasticsearch提供了三种主要的分页方式&#xff1a;from size、scroll和search_after。下面详细…

【Kubernetes集群一主二从安装教程】

文章目录 环境准备主机间做信任安装ansible工具 升级内核版本使用elrepo源升级内核查看最新版内核安装最新的内核版本设置系统默认内核设置默认内核为我们刚才升级的内核版本 初始化关闭防火墙关闭selinux关闭swap修改主机名修改hosts文件将桥接的IPv4流量传递到iptables的链配…

谈谈IP地址

IP地址 IP地址概念动态分配 IP(DHCP)NAT机制(网络转换机制)IPv6 IP地址组成特殊的IP地址 IP地址 IP协议报文结构: 概念 IP地址: 描述了主机的具体位置.有32位,利用点分十进制的方式来表示.例如: 192.168.190.77 32位ip地址表示的数据非常有限,42亿九千万…, 那么ip地址不够用…

The Sandbox 案例|Web3 项目引领娱乐业的发展

Web3 如何通过 RZR 系列等项目开创娱乐新纪元。 我们已经看到技术和 Web3 如何颠覆金融和银行等行业&#xff0c;然而娱乐业在不断变化的环境中似乎发展滞后。传统的制片厂生态系统、高成本制作以及历史悠久的运作模式一直占据主导地位&#xff0c;而 Web3 项目的出现为创作者提…

数据结构学习/复习11--二叉树分治与递归思想练习题

一、二叉树相关练习题 1.判断单值二叉树 2. 判断两颗树是否相同 3.先序遍历的实现 注意事项&#xff1a;此处中的数组的下标用指针控制&#xff0c;因为受到递归与函数栈帧创建与销毁的影响。最后的返回值是指向前序遍历排好后的数组指针 4.判断一棵树是否是另一棵树的子树 …