【MySQL】数据库约束

news2024/9/21 12:31:32

系列文章目录

第一章 数据库基础
第二章 数据库基本操作


文章目录

  • 系列文章目录
  • 前言
  • 约束关键字一览
  • NOT NULL
  • UNIQUE
  • DEFAULT
  • PRIMARY KEY
    • 自增主键
  • FOREIGN KEY
  • 总结


前言

在学习了数据库的增删改查操作之后,接下来就需要进阶的学习关键字来完善SQL语句的条件。学习数据库约束是为了能够更稳妥的保证数据的安全,以更加严格的标准来管理数据。


约束关键字一览

  1. NOT NULL -表示某列不能存储NULL值
  2. UNIQUE -保证某列的每行必须有唯一的值
  3. DEFAULT -规定没有给列赋值时的默认值
  4. PRIMARY KEY -NOT NULL 和 UNIQUE的结合,确保某列的数据不为空且唯一
  5. FOREIGN KEY -保证一个表中的数据匹配另一个表中的值的参照完整性

NOT NULL

在一个列中的数据不允许为空值。
以student表为例,在这个表中,Sno的NULL列表示YES,即允许Sno值为null
在这里插入图片描述
而以我们的日常生活经验来看,Sno是不允许为空的,因此我们需要为Sno加上约束Not Null 。

 create table student(Sno int not null,name varchar(20));

在这里插入图片描述
接下来对数据进行插入操作,我们可以看到只有当Sno 不为空时,才能插入成功;当将Sno = null 或不插入Sno 的数据,则数据库就会校验报错。
在这里插入图片描述

UNIQUE

使用unique,在该列的数据不允许出现重复的情况,通常用于学号、身份证号等信息。

create table student(Sno int not null unique,name varchar(20) unique);

我们可以查看表结构,观察可知Sno 设置为not null + unique => Primary key
name设置为unique
在这里插入图片描述
对表进行插入操作,只有满足所有的约束条件才能够插入数据,可以通过下面的SQL案例进行分析。
当选择了unique约束之后,每次插入/修改操作都会先对数据进行查询,如果发现不符合条件才会返回失败的结果。这从侧面可以看出效率会降低,但出错的概率就大大减小了。
在这里插入图片描述

DEFAULT

设置默认值。 当进行指定列插入操作时,未被指定的列就会保持默认值。
以下面的SQL语句为例,插入的数据如果没有指定名称,那么就默认name = ’无名氏‘

 create table student(id int not null unique,
 name varchar(20) default '无名氏');

在这里插入图片描述

PRIMARY KEY

主键 是一条数据的身份标识。主键是unique 和not null的结合体。
**一个表只能由一个主键,大多数情况主键使用的是整数形式,**但也可能会出现多个列的内容联合到一起构成的组件。

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

在这里插入图片描述

自增主键

为了解决主键不重复的问题,基于常用的以id作为主键的情况,MySQL提供了自增主键。顾名思义,在每次插入的数据中会在上一条数据的值+1.自增主键的关键字为auto_increment

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

当对主键采用自增形式之后,我们可以通过下图的SQL操作得到id在不指定时是自动增加的。即便在数据中没有数据,那么id就会自动从1开始

在这里插入图片描述
在这里插入图片描述
通过自增主键,我们就不需要每次都添加id的数据了,如果用户误操作将id值设置为null,MySQL也可以自动使用自增主键将它补上。当然,SQL也支持我们主动插入数据。
在这里插入图片描述

insert into student values(100,'lisi');

当我们插入id = 100的数据后,我们可以成功查询到数据,那么2-99的数据应该如何处理?在MySQL中是直接废弃掉的,从100之后开始继续自增。
在这里插入图片描述

FOREIGN KEY

外键的约束用于两张表之间的关联关系。为了能够连接两个表,外键要么是主键,要么是unique 在建立外键约束之后,后续对子表进行操作就会频繁涉及到两个表之间的操作。
以学生和班级之间的关系为例,在学生表中不仅有学号id,姓名name,同时还有关联着班级表的classId,而classId就是它的外键。同时还有班级表,里面有班级编号classId、班级名称className

//创建class表
create table class(classId int primary key auto_increment,
			 className varchar(20));
//创建student表
create table student(id int primary key auto_increment,
			 name varchar(20),classId int,
             foreign key(classId) references class(classId));

通过foreign key将student表中的classId与class表中的classId相关联。
原则上来说,在student表中插入的classId必须要在class表中存在。class表制约student表,而student表属于被制约的一方。因此他们之间也被成为父子表。
以下面的SQL语句我们可以看到,当class表中不存在id = 1 的数据时,MySQL将会报错。而当class表中存在对应的数据,则可以插入成功。
在这里插入图片描述
那么我们可以直接删除class表中的数据吗?
在下面的class表中,我们删除的classId = 100的数据是不被student表关联的,因此可以成功删除。
在这里插入图片描述
而在存在关联的classId = 1的数据中,我们是无法删除的。
在这里插入图片描述


总结

对表属性进行约束能够更好的对数据进行管理和区分,也提高了代码的准确性,提升了工作效率。

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

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

相关文章

宝塔部署Django项目(华为云)

1、登录华为云: 2、点击远程登录: 3、打开宝塔网址(华为云选的是centos) 4、在华为终端复制指令点击运行: 会显示安装完成,出现一个页面记录一下,方便以后登录: 5、复制外网面板地址到浏览器地址栏,输入账号,密码登录,在这里进行配置: 一、Django项目的设置以及压…

Gafgyt僵尸网络针对云原生环境,SSH弱密码成GPU挖矿新目标

近日,网络安全研究人员发现了 Gafgyt 僵尸网络的一个新变种,它以 SSH 密码较弱的机器为目标,最终利用其 GPU 计算能力在被攻击的实例上挖掘加密货币。 Aqua Security 研究员 Assaf Morag 在周三的一份分析报告中说:"这表明&…

虎牙的商业化畅想

2024年8月13日,虎牙公司公布了2024年第二季度财报。财报显示,2024年第二季度,虎牙公司总收入达15.4亿元。其中,来自游戏相关服务、广告和其他业务的收入同比增长152.7%至3.1亿元。在非美国通用会计准则下,该季度归属于…

KDP数据平台:以实战案例验证技术领先力

本文由智领云 LeetTools 工具自动生成 申请试用: https://www.leettools.com/feedback/ 在当今快速发展的技术环境中,数据平台的选择对企业的数字化转型和业务发展至关重要。智领云开源KDP(Kubernetes Data Platform)在数据处理和…

状态dp或滑动窗口

前言&#xff1a;这个题目可以用状态dp来做&#xff0c;其实还有一个思路&#xff0c;类似滑动窗口&#xff0c;如果有遇到第二个0&#xff0c;左指针加一 class Solution { public:int longestSubarray(vector<int>& nums) {int n nums.size();vector<vector<…

Mac 自定义键盘快捷键打开系统应用

在 macOS 中&#xff0c;可以通过自定义键盘快捷键来打开系统应用程序。这可以更快捷地访问常用的应用程序&#xff0c;提高工作效率。下面以创建活动监视器快捷键为例介绍“Mac 自定义键盘快捷键打开系统应用”的一般步骤&#xff1a; 创建活动监视器快捷键 键入command空格打…

DVWA | Brute Force通关指南

目录 Low Medium High Impossible Brute force主要是通过爆破达到渗透目的&#xff1a; Low 查看源代码&#xff1a; <?phpif( isset( $_GET[ Login ] ) ) {// Get username$user $_GET[ username ];// Get password$pass $_GET[ password ];$pass md5( $pass );//…

软件工程概述(上)

1、软件的概念、特点和分类 要了解软件工程&#xff0c;首先让我们重新认识一下软件。如今可以说是一个软件定义一切的时代&#xff0c;虽然人工智能发展的如火如荼&#xff0c;但究其本质&#xff0c;核心还是软件。那么&#xff0c;如何给软件下一个定义呢&#xff1f;软件又…

再造行业旗舰爆款,书客L2 Pro重塑医护级”护眼更养眼”,被誉为最强旗舰级标杆!

近日&#xff0c;作为照明领域黑马的SUKER书客正式发布护眼台灯L2 Pro&#xff0c;在各项标准都远超国AA的基础上&#xff0c;推出了RRT2.0红光养眼技术、第三代SDIT自适应调光技术以及全新一代紫光激发全光谱技术等一系列首创护眼黑科技&#xff0c;从强悍的护眼效果到惊艳的光…

《python语言程序设计》2018版第7章第04题Fan类,设计一个名为Fan的类表示一个风扇

8点下课到家也9点多。眼睛抬不起来 明天到周二要为好几十个兄弟姐妹们&#xff0c;完成日志和反馈表&#xff0c;还要保证低错误。明天还要完成单位的一些工作。 哦对了&#xff0c;还有这些兄弟姐妹们的视频。 好先看一下Fan类的代码&#xff0c;它继续存在exCode07 class Fa…

【uni-app】使用天气API做一个天气APP(全过程)- 实况、逐小时、40日

头一次使用uni-app写代码, 现学现卖, 写的不好的地方见谅, 申请个appid就可以运行 切换城市界面比较简单, 城市名称需要符合天气api参数规则, 录入的城市不要带市区县; 格式如: 青岛、铁西、海淀、沛县 APP效果 功能说明 实况天气逐小时预报未来7日天气未来40日天气空气质量详…

【Qt】QWidget的toolTip属性

QWidget的toolTip属性 如果一个GUI程序&#xff0c;界面比较复杂&#xff0c;按钮比较多&#xff0c;使用toolTip可以设置当鼠标悬停在控件上的时候&#xff0c;可以弹出一个提示。 API说明 setToolTip 设置 toolTip. ⿏标悬停在该 widget 上时会有提⽰说明. setToolTipDur…

10 ARM 体系

10 ARM 体系 ARM体系1、基本概念1.1 常见的处理器1.2 ARM7三级指令流水线1.3 初识PC寄存器 2、 ARM核的七种工作模式3、ARM核七种异常 ARM体系 1、基本概念 1.1 常见的处理器 PowerPC处理器&#xff1a;飞思卡尔MPC系列 DSP:TI达芬奇系列 FPGA&#xff1a;Xilinx赛灵思的ZYN…

python小游戏之摇骰子猜大小

最近学习Python的随机数&#xff0c;逻辑判断&#xff0c;循环的用法&#xff0c;就想找一些练习题&#xff0c;比如小游戏猜大小&#xff0c;程序思路如下&#xff1a; 附上源代码如下&#xff1a; 摇骰子的函数&#xff0c;这个函数其实并不需要传任何参数&#xff0c;调用后…

理性看待、正确理解 AI 中的 Scaling “laws”

编者按&#xff1a;LLMs 规模和性能的不断提升&#xff0c;让人们不禁产生疑问&#xff1a;这种趋势是否能一直持续下去&#xff1f;我们是否能通过不断扩大模型规模最终实现通用人工智能&#xff08;AGI&#xff09;&#xff1f;回答这些问题对于理解 AI 的未来发展轨迹至关重…

独立开发者,技术只是其一

刚开始做独立开发者时&#xff0c;总是想着追究技术的深度。我的软件用了特别牛的技术&#xff0c;我的软件这个功能技术花了很多个日日夜夜才实现&#xff01;真的好有成就感啊&#xff01; “额&#xff0c;请问一下&#xff0c;你技术这么牛&#xff0c;卖出去多少钱啦&…

linux如何配置主机间免密ssh连接

1. 生成key 其实就是配置从本地节点到远程主机之间基于key&#xff08;无密码的方式&#xff09;的SSH连接&#xff1a; # 生成ssh keyssh-keygen2. 拷贝key到远端主机 # 拷贝ssh key到远程主机&#xff0c;ssh的时候就不需要输入密码了# ssh-copy-id remoteuserremoteserve…

通过电影之镜,提升生活之美

在快节奏的现代生活中&#xff0c;电影不仅是娱乐的载体&#xff0c;更是提升审美情趣、拓宽视野的窗口。三部各具特色的经典之作——《布达佩斯大饭店》、《花样年华》与《天使爱美丽》&#xff0c;以其独特的视觉风格、深刻的情感表达与细腻的艺术构思&#xff0c;为我们展示…

三十九、【人工智能】【机器学习】【监督学习】- 多项式朴素贝叶斯分类器(Multinomial Naive Bayes)

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

追踪团贷网第1968天:重磅!派生科技的股权准备拍卖!合计8.51亿

周五晚&#xff0c;聊聊团贷网最新消息。 继续关注团贷网涉案资产的拍卖。 这周又有重大进展&#xff0c;派生科技的股权与股票&#xff0c;终于要开始拍卖了。 (来自京东拍卖网) (来自京东拍卖网) 目前正在预热阶段&#xff0c;将会在9月18日集中拍卖&#xff0c;而且拆分成…