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;

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

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

相关文章

[数据集][目标检测]电力场景安全帽检测数据集VOC+YOLO格式295张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;295 标注数量(xml文件个数)&#xff1a;295 标注数量(txt文件个数)&#xff1a;295 标注类别…

【OceanBase 系列】—— 什么是冻结和转储

文章出处&#xff1a;OceanBase分布式数据库-海量数据 笔笔算数 本文主要介绍什么是冻结和转储。 适用版本 OceanBase 数据库所有版本。 冻结 冻结是指将 Active MEMTable 转化为 Frozen MEMTable 的过程。 冻结的触发方式 手动触发&#xff1a;alter system minor freeze…

机器学习---朴素贝叶斯

朴素贝叶斯是一种用于分类和预测任务的算法&#xff0c;他的原理是基于贝叶斯定理。其中朴素的意思是假设各特征之间相互独立。这个实验我是用的老师课后作业的题目预测某天是否会打网球&#xff0c;假设每个特征独立。 目录 贝叶斯公式&#xff1a; 训练集&#xff1a; 处理…

最新版★重大升级★神点云连锁餐饮V2独立版点餐系统★公众号/h5/小程序前后端全套源码

提醒&#xff1a; 市场上流通很多老版本代码&#xff0c;一大堆问题且无法保证售后的源码&#xff0c;请各位买家一定要睁大眼睛&#xff0c;以防上当受骗&#xff01;&#xff01;&#xff01;本系统源码全是经本人亲自测试与修复的完好版本&#xff0c;且本人用此版本源码已…

Java | Leetcode Java题解之第86题分隔链表

题目&#xff1a; 题解&#xff1a; class Solution {public ListNode partition(ListNode head, int x) {ListNode small new ListNode(0);ListNode smallHead small;ListNode large new ListNode(0);ListNode largeHead large;while (head ! null) {if (head.val < x…

第 1 天_二分查找【算法基础】

第 1 天_二分查找 前言34. 在排序数组中查找元素的第一个和最后一个位置题解官方33. 搜索旋转排序数组题解官方74. 搜索二维矩阵 前言 这是陈旧已久的草稿2021-11-09 19:33:44 当时在学习数据结构&#xff0c;然后再LeetCode上找了一个算法基础。 但是后来又没做了。 现在20…

使用LLaMA Factory来训练智谱ChatGLM3-6B模型

使用LLaMA Factory来训练智谱ChatGLM3-6B模型时&#xff0c;以下是一个训练过程&#xff1a; 1. 环境搭建 a. 安装Python和Anaconda 下载并安装适合你操作系统的Python版本&#xff08;推荐Python 3.10或更高版本&#xff09;。安装Anaconda&#xff0c;以管理Python环境和依…

【STM32+k210项目】基于AI技术智能语音台灯的设计(完整工程资料源码)

视频演示 基于AI技术智能语音台灯的设计 前言&#xff1a; 随着社会的快速发展&#xff0c;人们对家用电器智能化程度的要求越来越高。不管是对于学生人群还是对于工作加班者&#xff0c;台灯是每家每户必不可少的工具&#xff0c;长期处于光线太强或者过弱的环境中学习和一系列…

FreeRTOS二值信号量

目录 一、信号量的概念 1、信号量的基本概念 2、信号量的分类 二、二值信号量简介 三、二值信号量相关API 1、创建二值信号量 2、释放二值信号量 3、获取二值信号量 四、二值信号量实操 1、实验需求 2、CubeMX配置 3、代码实现 一、信号量的概念 1、信号量的基本概…

如何学会发表人工智能学术论文

对于拼论文&#xff0c;我也经历过迷茫&#xff0c;不知道应该如何选题&#xff0c;也不知道如何开始做研究&#xff0c;因为导师不可能手把手的教学生&#xff0c;大多数情况下就是把握一下方向&#xff0c;具体的流程都要请教师兄们&#xff0c;所以如果有个非常厉害又热心的…

panel控件

在ASP.NET Web Forms中&#xff0c;Panel 控件是一个常用的容器控件&#xff0c;它可以包含其他控件&#xff0c;并且可以通过编程方式或直接在ASPX页面上设置其属性来控制其外观和行为。Panel 控件在呈现到客户端时通常被转换为HTML的 <div> 元素。 下面是一个使用 Pan…

【程序员侠】李飞往事之神犬巴巴斯

李飞有一只长得很丑的黑狗&#xff0c;刘一刀一直对李飞的狗感到好奇。刘一刀阅狗无数&#xff0c;可以说很懂狗了&#xff0c;但这只黑狗却让刘一刀捉摸不透&#xff0c;它身上似乎有一种神秘的力量还有一个沧桑的故事。 刘一刀知道打听别人的狗是一件很不礼貌的事情&#xf…

计算机毕业设计python+spark知识图谱音乐推荐系统 音乐数据分析可视化大屏 音乐爬虫 LSTM情感分析 大数据毕设 深度学习 机器学习

本科毕业设计&#xff08;论文&#xff09;开题报告 课题名称 基于Spark的音乐推荐与数据分析系统 的设计与实现 课题类型 系统设计 学院 大数据与人工智能学院 班级 专业 数据科学与大数据技术 指导教师 职称 学生姓名 学号 重庆工程学院教务处制 1.课…

如何快速变得专业:掌握类的基本概念-类/方法/关键字/变量/数据类型/注释

在李笑来的《财富自由之路》中提到一种初学者快速入门的学习方法&#xff1a;快速掌握最小必要知识。 关于Java的类&#xff0c;最少必要知识就是本文提到的基本概念&#xff0c;掌握了这些基本概念&#xff0c;就对类有了基本的了解&#xff0c;为后续的深入学习和沟通奠定了基…

智慧油田三维电子沙盘系统

深圳易图讯科技(www.3dgis.top)智慧油田三维电子沙盘系统采用三维GIS、大数据、云计算、虚拟现实、物联网、AI等前沿技术&#xff0c;支持无人机航拍、高清卫星影像、DEM高程数据、矢量数据、无人机倾斜摄像、BIM模型、点云、城市白模、等高线、标高点等数据融合和切换&#xf…

Python 生成器常用场景一 取代普通迭代器

在上一篇文章 https://blog.csdn.net/nvd11/article/details/138738472 已经简单介绍了生成器 是 一种特殊的迭代器 而的确&#xff0c; 大部分普通的迭代器是可以被生成器取代的&#xff0c; 以达到简化代码的目的。 使用迭代器的例子 我们找回之前介绍迭代器用到的link li…

C语言笔记12

1.使用qsort函数进行排序 #include <stdio.h> #include <stdlib.h> #include <string.h>//void qsort(void* base, //指向待排序数组的第一个元素的指针 // size_t num, //base指向数组中的元素个数 // size_t size,//base指向的数组中一…

【ESP32接入ATK-MO1218 GPS模块】

【ESP32接入ATK-MO1218 GPS模块】 1. 引言2. ATK-MO1218 GPS模块概述3. 接入ATK-MO1218 GPS模块的步骤4. 示例代码5. 结论1. 引言 在现代的嵌入式系统和物联网项目中,精确的位置信息是至关重要的。ATK-MO1218 GPS模块作为一款高性能的GPS/北斗双模定位模块,为开发者提供了强…

项目管理-计算题公式-补充【复习】

1.EMV决策树 定义&#xff1a;用决策树在若干备选行动方案中选择一个最佳方案。在决策树 中&#xff0c;用不同的分支代表不同的决策或事件&#xff0c;即项目的备选路径。每个决策或事件 都有相关的成本和单个项目风险(包括威胁和机会)。决策树分支的终点表示沿特 定路径发展的…

Xshell 7官网免费版下载与安装详细教程!学校/家庭使用免费哦~

一、 安装 1 卸载之前安装的xshell, 未安装忽略此步骤 2 解压本地文件&#xff0c;双击运行xshell**.exe, 按照提示安装 等候引导完成 3 点击下一步 4接受下一步 5 选择安装的路径 改成你自己的安装路径 6程序文件夹选择默认 7 取消勾选&#xff0c;激活之后操作 8 激活&…