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

SQL语言:完整性约束

完整性约束
数据完整性是指存储在数据库中的数据要能正确反映实际情况,规定输入的数据不能是无效值、错误值
或者乱码等。

一、非空约束:

非空约束关键字: not null

1、非空约束的创建

create table teacher(
t_id int not null, -- 为教师编号添加非空约束
t_name varchar(20),
t_age int,
t_sex varchar(4)
);
insert into teacher(t_name,t_age,t_sex) values('小李',18,'男');
-- 错误:非空约束规定插入的属性值不能为空,如:t_id
insert into teacher values(1,'小王',18,'男');

2、非空约束的添加

以修改表的方法添加非空约束:
alter table teacher modify column t_name varchar(30) not null;
insert into teacher(t_id,t_age,t_sex) values(3,20,'女');-- 报错

二、唯一约束

唯一约束关键字: unique

1、创建唯一约束

创建表时添加唯一约束:
create table teacher(
t_id int not null unique, -- 为教师编号添加非空且唯一的约束
t_name varchar(20),
t_age int,
t_sex varchar(4)
);

2、修改表添加唯一约束

alter table teacher add constraint uni_tid unique(t_id);
-- constraint关键字给约束unique(t_id)取一个别名为 uni_tid
若表中没有规定主键,那么表中第一个非空且唯一的属性自动添加主键约束

3、给约束取别名

通过 constraint 关键字给约束取别名
alter table teacher add constraint uni_tname unique(t_name);

4、删除唯一约束

根据约束名称删除唯一约束:
alter table teacher drop index uni_tid;
根据属性名称删除唯一约束:
alter table teacher drop index t_name;

5、复合唯一约束(联合唯一约束)

①创建复合唯一约束
create table teacher(
t_id int not null, -- 为教师编号添加非空约束
t_name varchar(20),
t_age int,
t_sex varchar(4),
constraint uni_tidname unique(t_id,t_name) -- 对多个字段创建复合唯一约束,使字段不能同时一致
);
②修改表添加复合唯一约束
alter table teacher add constraint uni_tidname unique(t_id,t_name);

复合唯一约束不允许约束的属性列同时相同,至少要有一个不同。

三、主键约束

主键约束关键字: primary key

1、创建表时添加主键约束

create table teacher(
t_id int primary key, -- 为教师编号创建主键约束
t_name varchar(20),
t_age int,
t_sex varchar(4)
);

2、修改表添加主键约束

alter table teacher add primary key(t_id);
由于表中第一个非空且唯一的属性会默认成为主键,所以创建主键前要先删除这个属性的唯一约束:
alter table teacher drop index uni_tidname;

3、删除主键约束

alter table teacher drop primary key;
-- 由于一个表的的主键只有一个,直接丢掉即可,只要规定表名,可以不写约束名

4、创建联合主键

alter table teacher add primary key(t_id,t_name);

四、自增列

自增列约束关键字: auto_increment

1、创建自增列

创建表时添加自增列约束:
create table teacher(
t_id int primary key auto_increment, -- 为教师编号创建主键和自增列约束默认从100开
始
t_name varchar(20),
t_age int,
t_sex varchar(4)
)auto_increment = 100;-- 设置自增列的默认初始值从100开始

2、添加自增列

修改表添加自增列:
alter table teacher modify column t_id int auto_increment; 

3、删除自增列

alter table teacher modify column t_id int;
-- 在修改表时不添加自增列就是删除自增列,跟删除非空约束一样

五、检查约束

检查约束关键字: check
检查约束演示示例:
①创建表时添加检查约束
create table student(
id int primary key,
s_name varchar(20),
age int check(age>=0 and age=<150),
-- 约束年龄的取值范围为0~150之间
sex varchar(2) check(sex='男' or sex='女')
-- 约束性别的取值范围为'男'或'女'
);

六、默认值约束

1、创建表时添加默认值约束

默认值约束关键字: default
create table teacher(
t_id int primary key auto_increment, -- 为主键创建默认值约束
t_name varchar(20),
t_age int default '男',
t_sex varchar(4)
)auto_increment = 100;  -- 设置自增列的默认初始值从100开始

2、修改表添加默认值约束

alter table teacher modify column t_sex varchar(4) default '男';

3、删除默认值约束

alter table teacher modify column t_sex varchar(4);
-- 在修改表时不添加默认值约束就是删除默认值约束

七、外键约束

外键约束关键字: foreign key

1、创建表添加外键约束

学生、教师和班级的外键联系
创建被参考表 class
create table class(
class_id int primary key,
c_name varchar(20) not null,
c_num int, -- 班级人数
c_tid varchar(20) -- 外键约束参考与教师表
constraint for_ctid foreign key(c_tid) references teacher(t_id)
);
insert into class(class_id,c_name) values(1,'数据库'),
(2,'C++'),(3,'java'),(4,'python');

创建参考表student:

create table student(
s_id int primary key,
s_name varchar(20) not null,
s_cid int not null,
s_age int,
s_sex varchar(4),
constraint for_scid foreign key(s_cid) references class(class_id)
);

insert into student(s_id,s_name,s_cid) values(1,'张三',1),(2,'李四',3),(3,'王五',2);
学生表中的班级编号参考班级表中的班级编号,学生不能给属于不存在的班级
insert into student(s_id,s_name,s_cid) values(4,'赵六',5);

2、级联更新/删除

级联更新 / 删除是指父表中的元组更新或删除等操作对子表的处理方法,其有三种处理方法:
在更新 / 删除中( on update/on delete
-- ① cascade:父表中的元组更新或删除,在子表中跟着更新或者删除
# 在外键约束后加上:on update cascade/on delete cascade
-- ② no action:无动作,若子表中有匹配的记录,就不允许更新/删除父表的数据
# 在外键后加上:on update no action/on delete no action
-- ③ set null:设置为空,若子表中有匹配的记录,更新/删除父表中的数据,子表中对应数据设置为
空
# 在外键约束后加上:on update set null/on delete set null
学生表中存在有 3 号班级的学生,不允许删除 3 号班级
delete from class where class_id = 3;
创建参考表 student1
create table student1(
s_id int primary key,
s_name varchar(20) not null,
s_cid int not null,
s_age int,
s_sex varchar(4),
constraint for_scid1 foreign key(s_cid) references class(class_id) on update
cascade on delete no action -- 级联更新和删除
);
insert into student1(s_id,s_name,s_cid) values(1,'张三',1),
(2,'李四',3),(3,'王五',2);
delete from class where class_id = 2;
update class set class_id = 6 where class_id = 1;
drop table student;

相关文章:

SQL语言:完整性约束

完整性约束 数据完整性是指存储在数据库中的数据要能正确反映实际情况&#xff0c;规定输入的数据不能是无效值、错误值 或者乱码等。 一、非空约束&#xff1a; 非空约束关键字&#xff1a; not null 1、非空约束的创建 create table teacher( t_id int not null, -- 为教…...

UBUNTU下CMAKE指定执行文件运行时查找库的路径

在Ubuntu下&#xff0c;使用CMake时&#xff0c;如果需要指定执行文件运行时库的搜索路径&#xff0c;可以在CMakeLists.txt文件中通过set_target_properties命令来设置。 以下是一个示例&#xff0c;假设你的目标是一个名为my_application的可执行文件&#xff0c;你想要添加…...

WHAT - CSS Animationtion 动画系列(四)- 移动端全屏动画

目录 一、背景1.1 GIF & Video1.2 存在的问题 二、技术方案2.1 使用CSS动画和JavaScript2.2 使用JavaScript库2.3 使用序列帧1. css animation 帧动画2. JavaScript requestAnimationFrame 帧动画 2.4 使用Canvas1. html 和 canvas 中的 video2. 基于Canvas的动画库 今天我…...

springboot004网页时装购物系统

springboot004网页时装购物系统 亲测完美运行带论文&#xff1a;获取源码&#xff0c;私信评论或者v:niliuapp 运行视频 包含的文件列表&#xff08;含论文&#xff09; 数据库脚本&#xff1a;db.sql其他文件&#xff1a;ppt.pptx论文/文档&#xff1a;开题报告.docx论文&…...

海外住宅IP介绍

住宅IP&#xff0c;通俗的来讲就是分配给家庭的IP地址&#xff0c;ISP默认分配用户为家庭用户&#xff0c;其真实性与安全性都有一定保障。海外住宅IP是指由海外互联网服务提供商分配给家庭用户的IP地址&#xff0c;IP地址通常是静态的&#xff0c;稳定的&#xff0c;可以为用户…...

Qt | QTimer 类(计时器)

01、相关知识回顾 Qt C++ | QTimer经验总结Qt | QDateTimeEdit、QDateEdit类和QTimeEdit类02、QTimer 类 1、QTimer 类是 QObejct 的直接子类,该类用于实现计时器,QTimer 类未继承自 QW...

SQL 面试系列(一)【留存率问题】

前言 在学 HQL 之前是不太了解 SQL 的&#xff0c;以为 SQL 只可以实现 CRUD &#xff0c;直到面试的公司让我下去多了解一些 SQL &#xff0c;我才最近开始再次深入学习 MySQL 和 Oracle。而且越学越发现 SQL 真的是一门很有深度的语言&#xff0c;我以前的使用只是皮毛而已&a…...

2024OD机试卷-游戏分组 (java\python\c++)

题目:游戏分组 题目描述 部们准备举办一场 王者荣耀 表演赛,有 10 名游戏爱好者参与,分为两队,每队 5 人。 每位参与者都有一个评分,代表着他的游戏水平。为了表演赛尽可能精彩,我们需要把 10 名参赛者分为实力尽量相近的两队。 一队的实力可以表示为这一队 5 名队员的…...

重装前端整体流程

用户管理 --汇总 -- 明细-CSDN博客 一、node 这个看环境变量 2023最新版Node.js下载安装及环境配置教程&#xff08;非常详细&#xff09;从零基础入门到精通&#xff0c;看完这一篇就够了_nodejs安装及环境配置-CSDN博客 配置到国内镜像的时候&#xff0c;去看&#xff0c;淘…...

Oracle Database 23ai Free版本体验

Oracle Database 23ai 体验链接&#xff1a; Oracle Database 23ai Free (https://www.oracle.com/database/free/get-started/) Autonomous Database 23ai Container Image (https://www.oracle.com/autonomous-database/free-trial/) Oracle GoldenGate 23ai (https://www…...

84.网络游戏逆向分析与漏洞攻防-游戏技能系统分析-筛选与技能有关的数据包

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…...

维护表空间中的数据文件

目录 向表空间中添加数据文件 从表空间中删除数据文件 删除users表空间中的users02.dbf数据文件 对数据文件的自动扩展设置 Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 维护表空间中的数据文件主要包括向表空间中添…...

2024五月母亲节嘉年华活动方案

2024以花之名 致谢母亲簪花趣味亲子五月母亲节嘉年华活动方案-43P 活动策划信息&#xff1a; 方案页码&#xff1a;43页 文件格式&#xff1a;PPT 方案简介&#xff1a; 岁月温柔治愈 母爱闪闪发光 一年一度的PY圈孝子孝女大赛即将到来 本次母亲节&#xff0c;“以花之名…...

Linux 第三十三章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…...

低空经济:无人机竞赛详解

无人机竞赛市场近年来呈现出蓬勃发展的态势&#xff0c;其市场价值不仅体现在竞赛本身&#xff0c;还体现在推动无人机技术创新、拓展应用场景以及促进产业链发展等多个方面。 一、比赛项目介绍 无人机竞赛通常分为多个项目&#xff0c;包括竞速赛、技巧赛、航拍赛等。每个项目…...

CAD插入文字到另一图形样式变相同

CAD从一张图形复制到另外一张图形后&#xff0c;文字样式变成一样是因为两张图所用的文字样式名称一样&#xff0c;但是样式里面的使用字体样式不一样。如下图所示&#xff0c;找到工具栏中的注释 &#xff0c;点击文字样式。里面就会显示当前图形中使用的样式名称及其对应的字…...

算法随想录第八天打卡|344.反转字符串,541. 反转字符串II, 卡码网:54.替换数字, 151.翻转字符串里的单词,卡码网:55.右旋转字符串

344.反转字符串 建议&#xff1a; 本题是字符串基础题目&#xff0c;就是考察 reverse 函数的实现&#xff0c;同时也明确一下 平时刷题什么时候用 库函数&#xff0c;什么时候 不用库函数 题目链接/文章讲解/视频讲解&#xff1a;代码随想录 Python class Solution:def reve…...

外卖系统的JWT实现登录

1、什么是JWT jwt可以生成一个加密的token&#xff0c;作为用户登录的令牌&#xff0c;当用户登陆成功之后&#xff0c;发放给客户端。请求需要登录的资源或者接口的时候&#xff0c;将token携带&#xff0c;后端验证token是否合法。jwt有三部分组成&#xff1a; A&#xff1a;…...

基于springboot实现的家具销售电商平台

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&…...

STM32中的Systick的使用

SysTick&#xff0c;全称System Tick Timer&#xff0c;是Cortex-M microcontrollers内核中提供的一个简单而有效的系统定时器&#xff0c;设计用来给操作系统提供时间基准&#xff0c;或用于生成周期性的中断。STM32系列微控制器&#xff0c;作为基于ARM Cortex-M内核的设备&a…...

做一个桌面悬浮翻页时钟

毛玻璃效果翻页桌面悬浮时钟&#xff0c;TopMost&#xff08;Topmost“True”&#xff09;&#xff0c;不在任务栏显示&#xff08;ShowInTaskbar“False”&#xff09;&#xff0c;在托盘区显示图标&#xff0c;双击托盘区图标实现最小化和还原&#xff0c;右键托盘图标可选“…...

Transformers中加载预训练模型的过程剖析(一)

使用HuggingFace的Transformers库加载预训练模型来处理下游深度学习任务很是方便,然而加载预训练模型的方法多种多样且过程比较隐蔽,这在一定程度上会给人带来困惑。因此,本篇文章主要讲一下使用不同方法加载本地预训练模型的区别、加载预训练模型及其配置的过程,藉此做个记…...

数据可视化的艺术:使用Matplotlib和Seaborn揭示数据故事

引言 数据可视化是数据分析中的关键一环&#xff0c;它帮助我们理解数据模式、趋势和异常。在Python中&#xff0c;Matplotlib和Seaborn是两个流行的数据可视化库&#xff0c;它们提供了丰富的图表和图形选项&#xff0c;使数据的可视化变得简单而强大。 Matplotlib&#xff…...

2024全新小狐狸AI免授权源码

源码安装说明&#xff1a; 下 载 地 址 &#xff1a; runruncode.com/php/19757.html 1. 在宝塔新建一个站点&#xff0c;选择 PHP 版本为 7.2、7.3 或 7.4。将压缩包上传到站点的根目录&#xff0c;并设置运行目录为 /public。 2. 导入数据库文件&#xff0c;该文件位于 …...

Python基础详解四

目录 一&#xff0c;Json解析 二&#xff0c;pyecharts模块 三&#xff0c;类和对象 四&#xff0c;类型注解 一&#xff0c;Json解析 字典转换为JSON&#xff1a; import jsondata [{"name":"袁震","age":20},{"name":"张三&…...

es6新语法和ajax和json

es6新语法 1.定义变量&#xff1a;let 2.定义常量&#xff1a;const <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…...

Hadoop3:HDFS副本节点选择逻辑讲解

一、副本节点选择&#xff08;机架感知&#xff09; 说明 第一个副本&#xff0c;因为我们的client可能是web页&#xff0c;也可能是shell终端。 如果是web页&#xff0c;则随机选取一个节点&#xff0c;如果是shell终端&#xff0c;则选择当前shell终端所在的节点。 节点距离最…...

Java 高级面试问题及答案 更新(二)

Java 高级面试问题及答案 以下是几个常见的Java高级面试问题及其答案&#xff0c;这些问题覆盖了Java语言的核心概念和高级特性。 问题1: 什么是Java内存模型(JMM)&#xff0c;它在并发编程中扮演着什么角色&#xff1f; 答案&#xff1a; Java内存模型(JMM)是一个抽象的概念…...

MacOS安装Go

下载 Go 安装包&#xff1a; 访问 Go 官方网站的下载页面&#xff0c;找到适合 macOS 系统的 Go 安装包&#xff0c;并下载 go1.20.2.darwin-amd64.pkg&#xff08;假设你的 macOS 是 64 位系统&#xff09;。 安装 Go&#xff1a; 打开下载的安装包 go1.20.2.darwin-amd64.pk…...

【微服务最全详解】

文章目录 微服务微服务的介绍微服务服务架构演变 微服务网关微服务的负载均衡微服务的容灾机制服务崩溃服务容灾机制微服务熔断机制微服务限流Sentinel怎么实现限流微服务限流算法1.令牌桶算法2.漏斗桶算法 服务监控日志收集 微服务 微服务的介绍 微服务是一种软件架构风格&a…...