一文带你了解MySQL之约束

news2024/11/15 15:25:47

在这里插入图片描述

在SQL标准中,一共规定了6种不同的约束,包括非空约束,唯一约束和检查约束等,而在MySQL中是不支持检查约束的,所以这篇文章先对其余5种约束做一个详解和练习。


文章目录

  • 1. 约束的概念
  • 2. 约束的分类
  • 3. 非空约束
  • 4. 唯一约束
  • 5. 主键约束
  • 6. 默认约束
  • 7. 外键约束
  • 7. 约束的案例练习

1. 约束的概念

约束是作用于表中列上的规则,用于限制加入表的数据。例如,作为主键的列一定是非空的唯一的,否则将无法对数据进行区分。约束的存在保证了数据库中数据的正确性、有效性和完整性。所以约束在数据库设计中是非常重要的。

2. 约束的分类

前面说到SQL标准把约束分为了6大类,分别是非空约束,唯一约束,主键约束,检查约束,默认约束和外键约束,添加约束时我们只需要在SQL中添加关键词,便可以限制表中的数据。

约束类型功能
非空约束 NOT NULL保证列中所有的数据不能有null值
唯一约束 UNIQUE保证列中所有数据各不相同
主键约束 PRIMARY KEY主键是一行数据的唯一标识,要求非空且唯一
检查约束 CHECK保证列中的值满足某一条件
默认约束 DEFAULT保存数据时,未指定值则采用默认值
外键约束 FOREIGN KEY外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性

3. 非空约束

目的:保证列中所有的数据不能有null值

添加约束:

CREATE TABLE 表名(
	列名 数据类型 NOT NULL,);

建完表后添加非空约束:

ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;

删除约束:

ALTER TABLE 表名 MODIFY 字段名 数据类型;

4. 唯一约束

目的:保证列中所有数据各不相同

添加约束:

CREATE TABLE 表名(
	列名 数据类型 UNIQUE [AUTO_INCREMENT],
	-- AUTO_INCREMENT: 当不指定值时自动增长);

CREATE TABLE 表名(
	列名 数据类型,[CONSTRAINT] [约束名称] UNIQUE(列名)
);

建完表后添加唯有约束:

ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE;

删除约束:

ALTER TABLE 表名 DROP INDEX 字段名;

5. 主键约束

目的:主键是一行数据的唯一标识,要求非空且唯一

添加约束:

CREATE TABLE 表名(
	列名 数据类型 PRIMARY KEY [AUTO_INCREMENT],);

CREATE TABLE 表名(
	列名 数据类型,
	[CONSTRAINT] [约束名称] PRIMARY KEY(列名)
);

建完表后添加主键约束:

ALTER TABLE 表名 ADD PRIMARY KEY(字段名);

删除约束:

ALTER TABLE 表名 DROP PRIMARY KEY;

6. 默认约束

目的:保存数据时,未指定值则采用默认值

添加约束:

CREATE TABLE 表名(
	列名 数据类型 DEFAULT 默认值,);

建完表后添加默认约束:

ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值;

删除约束:

ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;

7. 外键约束

当我们添加了外键以后,就在数据库层面建立了两张表的关系。

目的:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性

添加约束:

CREATE TABLE 表名(
	列名 数据类型,[CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
);

建完表后添加外键约束:

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);

删除约束:

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

7. 约束的案例练习

首先,我们使用以下的案例来练习约束:

-- 删除stu表
drop table if exists stu;
-- 创建stu表
CREATE TABLE stu (
id int primary key, -- 编号 主键
name varchar(10)  not null unique, -- 姓名 非空,唯一
age int not null, -- 年龄 非空
gender varchar(5) not null, -- 性别 非空
math double(5,2) not null, -- 数学成绩  非空
english double(5,2) default 0 -- 英语成绩 默认为0
);

在这里插入图片描述

验证主键约束,其特点是非空且唯一,先添加一条数据:

insert into stu(id,name,age,gender,math,english) values(1,'小张',23,'男',66,78);

添加第二条数据时,尝试 id 添加为空值:

insert into stu(id,name,age,gender,math,english) values (null,'小李',20,'女',98,87);

在这里插入图片描述

尝试 id 添加为重复的值:

insert into stu(id,name,age,gender,math,english) values (1,'小陈',55,'男',56,77);

在这里插入图片描述我们已经验证了主键约束,当我们添加不合法的数据时,添加失败。

验证非空约束:

当我们添加以下的数据时:

insert into stu(id,name,age,gender,math,english) values (2,NULL,20,'女',76,65);

在这里插入图片描述
验证唯一约束:

当我们添加以下的数据时:

insert into stu(id,name,age,gender,math,english) values 
(5,'小张',20,'男',86,NULL);

在这里插入图片描述验证默认约束:

当我们添加以下的数据时:

insert into stu(id,name,age,gender,math) values (6,'小赵',23,'男',99);

在这里插入图片描述

验证外键约束:

我们使用一下的案例来验证外键约束:

-- 删除表
DROP TABLE IF EXISTS emp;
DROP TABLE IF EXISTS dept;
-- 部门表
CREATE TABLE dept(
id int primary key auto_increment,
dep_name varchar(20),
addr varchar(20)
);
-- 员工表
CREATE TABLE emp(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int,
-- 添加外键 dep_id,关联 dept 表的id主键
CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id)
);

此时,我们在员工表中添加了外键,相当于在数据库层面上建立了两张表的关系,此时如果员工表中有员工 a ,他属于 1 号部门,那么我们想要删除部门表中的 1 号部门就会删除失败,因为员工 a 是属于 1 号部门的,此时两张表建立了关系。

在这里插入图片描述添加数据:

-- 添加 2 个部门
insert into dept(dep_name,addr) values
('研发部','西安'),('销售部', '成都');
-- 添加员工,dep_id 表示员工所在的部门
INSERT INTO emp (NAME, age, dep_id) VALUES
('张三', 20, 1),
('李四', 20, 2);

此时想要是删除销售部门时,发现删除失败。

在这里插入图片描述

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

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

相关文章

大数据:pyspark模块,spark core的RDD,RDD是弹性分布式数据抽象对象,RDD五大特性,wordcount案例展示RDD

大数据:pyspark模块 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其sql…

English Learning - L3 作业打卡 Lesson4 Day29 2023.6.2 周五

English Learning - L3 作业打卡 Lesson4 Day29 2023.6.2 周五 引言🍉句1: I once made a big mistake at the office and felt foolish.成分划分弱读连读爆破语调 🍉句2: I had egg on my face.成分划分弱读语调 🍉句3: Over the weekend, m…

Java企业级信息系统开发学习笔记13 Spring Boot(使用maven方式构建Spring Boot项目)

文章目录 一、学习目标二、Spring Boot框架概述三、使用maven方式构建Spring Boot项目(一)创建Maven项目(二)添加依赖(三)创建入口类(四)创建控制器(五)运行入…

防火墙之服务器负载均衡

防火墙之服务器负载均衡 原理概述: 防火墙(英语:Firewall)技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安…

C语言---操作符详解

1、操作符分类 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号操作符 下标引用、函数调用和结构成员。 2、算数操作符 - * / %// 7 / 2 ----->3 // 7 % 2 ----->1//那如果想要打印…

Java程序设计入门教程--类的创建过程

构造方法 在Java的每个类中都有一种特殊的成员方法,它的方法名和类名是一致的。在创建对象时,调用这种特殊方法对成员变量进行初始化,这种方法称为构造方法。 注意 创建构造方法与创建成员方法的格式相同,但要注意以下几点&#…

3GPP R16 HST

3GPP R16高铁场景为了能够支持最高3.6GHz载波频率以及最高500km/h的速度,提出了增强RRM要求和终端解调能力要求。 在增强RRM要求的维度,对intra-RAT和inter-RAT测量提出了新的要求。其中,intra-RAT测量包括NR小区重选要求、NR小区识别要求、波…

大数据:hadoop spark,spark特点,功能,架构,模块,角色

大数据:hadoop spark 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其sq…

把玩数据在内存中的存储

前言:时光如梭💦,今天到了C语言进阶啦😎,基础知识我们已经有了初步认识, 是时候该拔高拔高自己了😼。 目标:掌握浮点数在内存的存储,整形在内存的存储。 鸡汤&#xff1a…

arcgis for javascript api4.26 本地tomcat部署,以及解决跨域访问问题

一、配置java_jdk以及tomcat arcgis for javascript api 部署到本地服务器,可以是iis,也可以是tomcat,我这里是部署到tomcat,所以就介绍一下tomcat上部署的步骤。 如果电脑上有本地服务器的,可以跳过这一章,直接从第二章开始看 下…

1绪论_1.1数据结构的基本概念+1.2算法和算法评价

1.1.1基本概念和术语 数据 数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。 数据元素 数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数…

探索iOS自定义ijkplayer画中画播放

iOS提供AVPictureInPictureController用于画中画播放控制,但是只能绑定AVPlayer使用,对于开发者来说挺头痛的。在iOS 15.0后呼之欲出,支持SampleBufferDisplayLayer自定义数据源显示图层,意味着我们可以自定义第三方播放器实现画中…

内网安全:代理技术详解

目录 代理技术实验所用网络拓扑图及说明 代理技术 SOCK协议 使用代理技术的原因 正向代理与反向代理 实战一:MSF代理通讯 实验原理说明 一. Meterpreter建立路由 二. MSF建立节点 三. 建立代理到MSF上 实战二:CS代理通讯 实验原理说明 一. …

OpenGl之摄像机

文章目录 摄像机/观察空间摄像机位置摄像机方向右轴上轴 Look At自由移动移动速度鼠标输入缩放摄像机源码 OpenGL本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感觉&#xff…

并发专栏-队列同步器 AQS 以及 Reentrantlock 应用

队列同步器 AQS 以及 Reentrantlock 应用 Java 中的大部分同步类都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。 ReentrantLock、ReentrantReadWriteLock、Semaphore(信号量)、CountDownLatch、公平锁、非公平锁、 ThreadPoolExecutor 都和 AQS…

《C和指针》读书笔记(第九章 字符串、字符和字节)

目录 0 简介1 字符串基础2 字符串长度3 不受限制的字符串函数3.1 复制字符串3.2 连接字符串3.3 函数的返回值3.4 字符串比较 4 长度受限的字符串函数5 字符串查找基础5.1 查找一个字符串5.2 查找任何几个字符5.3 查找一个子串 6 高级字符串查找6.1 查找一个字符串前缀6.2 查找标…

饿补基础_1 |进位制、R进制之间转换及十进制编码

目录 数值数据的表示一.进位计数制理解1.你需要了解的概念2. 晦涩难懂的官方定义3 一看就会的例子4 值得收藏的进制对照表(二、八、十、十六进制)5 计算机为什么主要使用二进制 二.不同数制之间的转换1. 为什么会出现进制转换2. 各数制转十进制3. 十进制转二进制4. 二进制与八进…

java企业级信息系统开发学习笔记12 基于配置文件整合SSM框架实现用户登录

文章目录 一、学习目标(一)采用MVC架构 二、基于XML配置方式整合SSM框架实现用户登录(一)创建表(二)创建项目(三)添加相关依赖(四)创建日志属性文件&#xff…

leetcode51. N 皇后 (java)

leetcode 51 N 皇后 leetcode 51 N 皇后题目描述解题思路 代码演示leetcode52 N 皇后II leetcode 51 N 皇后 原题链接: https://leetcode.cn/problems/n-queens/ 题目描述 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研…

2023 华为 Datacom-HCIE 真题题库 07/12--含解析

多项选择题 1.[试题编号:190187] (多选题)如图所示的拓扑采用了VXLAN分布式网关,SW1上的VBDIF10配置了:arp-proxy local enable命令,则以下描述中正确的有哪些项? A、SW1收到PC1发往PC2的报文&…