dream8网站建设教程视频/百度竞价app
文章目录
- 🛫数据库约束
- 🌴约束类型
- 🎋NOT NULL约束
- 🎍UNIQUE:唯一约束
- 🌳DEFAULT:默认值约束
- 🎄PRIMARY KEY:主键约束
- 🍀FOREIGN KEY:外键约束
- 🌲CHECK约束
- 🛬表的设计
- 🚩一对一
- 🚩一对多
- 🚩多对多
- ⭕总结
本节目标:
- 数据库约束
- 表的关系
🛫数据库约束
🌴约束类型
-
NOT NULL - 指示某列不能存储 NULL 值。
-
UNIQUE - 保证某列的每行必须有唯一的值。
-
DEFAULT - 规定没有给列赋值时的默认值。
-
PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
-
FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
-
CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句
🎋NOT NULL约束
创建表时,可以指定某列不为空
比如我们先创建一个student表,我们对里面的id列进行约束为不能为null;
创建如下:
DROP TABLE IF EXISTS student;
CREATE TABLE student (id INT NOT NULL,sn INT,name VARCHAR(20),qq_mail VARCHAR(20)
);
查看表结构如下:
我们可以看到id行列是显示不可为null的
接下来我们插入数据试一下
结果也是意料之中,插入null数据时就直接报错了
🎍UNIQUE:唯一约束
指定sn列为唯一的、不重复的
这里我们重新设置一下表结构,对sn进行约束为唯一约束
DROP TABLE IF EXISTS student;
CREATE TABLE student (id INT NOT NULL,sn INT UNIQUE,name VARCHAR(20),qq_mail VARCHAR(20)
);
我们对表结构进行查询可以看到,sn列发生了明显变化
接下来我们依旧插入数据进行测试
发现如果sn相同就会进行报错
🌳DEFAULT:默认值约束
指定插入数据时,若列为空,则为默认值
我们重新设置一下student表,对name进行默认值约束,若为null,则为默认值:遇事问春风乄
设置如下:
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (id INT NOT NULL,sn INT UNIQUE,name VARCHAR(20) DEFAULT '遇事问春风乄',qq_mail VARCHAR(20)
);
我们查看表结构后发现
Default列的name行不再为null,而为我们设置的默认值
我们来进行测试一下,插入一个name为null的数据
我们看到查询后name为默认值
注意事项:只适用于指定列插入数据,且该列不是受约束的列
🎄PRIMARY KEY:主键约束
指定列为主键
主键 是关系表中记录的唯一标识
使用主键应注意以下几点:
-
每个表只能定义一个主键。
-
主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据。这是唯一性原则。
-
一个字段名只能在联合主键字段表中出现一次。
-
联合主键不能包含不必要的多余字段。当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。这是最小化原则。
这里我创建以下student表
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (id INT PRIMARY KEY,sn INT UNIQUE,name VARCHAR(20) DEFAULT '遇事问春风乄',qq_mail VARCHAR(20)
);
表结构如下:
我们发现上述表格可以理解为:主键是 NOT NULL 和 UNIQUE 的结合
对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1
使用如下:
-- 主键是 NOT NULL 和 UNIQUE 的结合,可以不用 NOT NULL
id INT PRIMARY KEY auto_increment
注意事项:是当前表里使用的最大值+1
🍀FOREIGN KEY:外键约束
外键用于关联其他表的主键或唯一键
语法如下:
foreign key (字段名) references 主表(列)
MySQL 外键约束(FOREIGN KEY是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西瓜,其它的水果都是不能购买的。
主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。
定义外键时,需要遵守下列规则:
-
主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
-
必须为主表定义主键。
-
主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
-
在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
-
外键中列的数目必须和主表的主键中列的数目相同。
-
外键中列的数据类型必须和主表主键中对应列的数据类型相同。
接下来我们设计一个案例如下:
- 创建班级表classes,id为主键
DROP TABLE IF EXISTS classes;
CREATE TABLE classes (id INT PRIMARY KEY auto_increment,name VARCHAR(20),desc1 VARCHAR(100)
);
- 创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键,classes_id为外键,关联班级表id
表结构如下:
使用注意事项放在上面了,这里博主偷个懒,就不演示了;
🌲CHECK约束
CHECK约束添加规则
-
CHECK 约束用于限制列中的值的范围。
-
Check约束通过逻辑表达式来判断数据的有效性,用来限制输入一列或多列的值的范围,在列中更新数据时,所要输入的内容必须满足Check约束的条件,否则将无法正确输入。
-
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
-
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
使用如下:
drop table if exists test_user;
create table test_user (id int,name varchar(20),sex varchar(1),check (sex ='男' or sex='女')
);
表结构如下:
表结构没有什么变化,我们再来看看添加数据吧
添加数据如下:
查询如下:
当我们输入其他值时
就会爆出错误!
🛬表的设计
大概可以分为以下三种
🚩一对一
🚩一对多
🚩多对多
⭕总结
关于《【MySQL】 MySQL的增删改查(进阶)–壹》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!
相关文章:

【MySQL】 MySQL的增删改查(进阶)--壹
文章目录 🛫数据库约束🌴约束类型🎋NOT NULL约束🎍UNIQUE:唯一约束🌳DEFAULT:默认值约束🎄PRIMARY KEY:主键约束🍀FOREIGN KEY:外键约束…...

Map<K,V>的使用和List学习
Map Map是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。对于静态类型的查找来说,一般直接遍历或者用二分查找【不会对区间进行插入和删除操作】 而在现实生活中的查找比如: 根据姓名查询考试成绩通讯录…...

Flask实现Web服务调用Python程序
Flask实现Web服务调用Python程序_flask调用python程序_小白白程序员的博客-CSDN博客 【小沐学Python】Python实现Web服务器(Flask入门)_python flask web开发_爱看书的小沐的博客-CSDN博客...

步步为营,如何将GOlang引用库的安全漏洞修干净
文章目录 引场景构建第一步、直接引用的第三方库升级修复策略1.确认是否为直接引用的第三方库2.找到需要升级的版本是否为release版本 第二步、间接引用的第三方库升级修复策略那么问题来了,我们这么间接引用库的对应的直接引用库是哪个呢? (…...

as-if-serial与happens-before原则详解
文章目录 前言详解解决多线程下的问题 Happens-before原则总结as-if-serial语义happens-before的例子 前言 "as-if-serial"原则是Java内存模型中的一个重要概念。该规则规定:不管怎么重排序(编译期间的重排序,指令级并行的重排序&…...

基于Yolov8的工业小目标缺陷检测(2):动态蛇形卷积(Dynamic Snake Convolution),实现暴力涨点 | ICCV2023
目录 1.工业油污数据集介绍 1.1 小目标定义 1.2 难点 1.3 工业缺陷检测算法介绍 1.3.1 YOLOv8...

ARM64汇编基础
ARM64汇编基础 主要内容 到目前为止,大部分的移动设备都是64位的arm架构,一直想抽个时间系统学习下,这个周末就专门来学习下。毕竟两天的时间,也只是简单的入门了解下,为后续工作和学习打下基础。 本次学习的主要内容…...

Nodejs 第十六章(ffmpeg)
FFmpeg 是一个开源的跨平台多媒体处理工具,可以用于处理音频、视频和多媒体流。它提供了一组强大的命令行工具和库,可以进行视频转码、视频剪辑、音频提取、音视频合并、流媒体传输等操作。 FFmpeg 的主要功能和特性: 格式转换:…...

k8s集群部署es
集群内创建需要用到存储,此处举例使用腾讯云cfs共享存储 内存limits限制不需要加,否则会经常内存溢出导致es集群故障 apiVersion: apps/v1 kind: StatefulSet metadata:name: es7-clusternamespace: elasticsearch spec:serviceName: es-clusterreplica…...

学习记忆——宫殿篇——记忆宫殿——记忆桩——火车+外院+客厅+卧室
护板 警示灯 烟筒 采集箱 司炉室 桥 电线杆 棚顶 车厢 护栏 植物 石阶 水泥台 竹门 树干 躺椅 柱子 墙 池 洞 方灯 枕头 树 浴池 墙 射灯 藤条 浴巾框 耳环 窗户 灯 沙发 壁炉 吊灯 兵马俑 门 石佛 沙发椅 圆木 弧形木箱盖 床 窗帘 画板 纸伞 花 沙发背 颜料 抽屉...

QT用户登录注册,数据库实现
登录窗口头文件 #ifndef LOGINUI_H #define LOGINUI_H#include <QWidget> #include <QLineEdit> #include <QPushButton> #include <QLabel> #include <QMessageBox>#include <QSqlDatabase> //数据库管理类 #include <QSqlQuery> …...

GEE学习总结(9)——像元二分法计算月度植被覆盖度(MODIS)
像元二分法计算植被覆盖度 通过MODIS的NDVI数据集MOD13Q1和像元二分法计算植被覆盖度 var multi_NDVI ee.ImageCollection(MODIS/006/MOD13Q1).filterDate(2015-06-01, 2016-09-01).select(NDVI).max().divide(10000).clip(geometry);var ndviVis {min: 0.0,max: 1,palette…...

RabbitMQ用户命令_策略_日志
RabbitMQ相关安装 Centos离线安装RabbitMQ并开启MQTT Docker安装rabbitMQ RabbitMQ集群搭建和测试总结_亲测 Docker安装RabbitMQ集群_亲测成功 RabbitMQ创建管理员命令 #查看当前用户命令: rabbitmqctl list_users#创建用户和密码 rabbitmqctl add_user admin…...

停车场系统、智慧城市停车、智慧社区、物业管理、新能源充电、人脸门禁 uniapp 系统源码
1. 智慧停车 支持模式 封闭性单个停车场路边停车(车位级管理)大小场(场中场),多场子并行或嵌套 所有者模式 统一平台管理总平台下子账号(区域代理)自建场地资源,自行维护数据总平台下子账号(区域代理)再分配和单个停车场管理人员(物业管理/维保/保安/财务…...

Linux磁盘管理
物理设备的命名规则 在linux系统中一切都是文件,硬件设备也不例外。即然是文件,就必须有文件名称。系统内核中的udev设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以看出设备大致的属性以及分区信息等;在…...

vue学习之vue cli创建项目
安装 node.js https://nodejs.org/en 安装 vue cli npm install -g @vue/cli --registry=https://registry.npm.taobao.org创建项目 执行创建命令,回车vue create vue-cli-learning选择 “Manually select features”,回车 “空格” 关闭 Linter / Formatter 选项,回车...

K8S:Pod容器中的存储方式及PV、PVC
文章目录 Pod容器中的存储方式一.emptyDir存储卷1.emptyDir存储卷概念2.emptyDir存储卷示例 二.hostPath存储卷1.hostPath存储卷概念2.hostPath存储卷示例 三.nfs共享存储卷1.nfs共享存储卷示例 四.PV和PVC1.PV、PVC概念2.PVC 的使用逻辑及数据流向3.storageclass插…...

uni-app跳转到另一个app
第一步: 首先要知道 app的包名 获取方式如下 第二步: 在第一个 demo1 app 一个页面中需要一个按钮去跳转 方法如下 <template><view class"content"><button click"tz">跳转</button></view> </…...

如何通过一键导出导入数据实现批量重命名文件名称
在日常办公中,我们经常需要对大量的文件进行重命名,以便更好地管理和查找文件。而且,有时候我们还需要将文件名称翻译成其他语言,以适应不同的工作需求。如何高效地完成这项任务呢?接下来,我将介绍一种方法…...

CTF —— 网络安全大赛(这不比王者好玩吗?)
前言 随着大数据、人工智能的发展,人们步入了新的时代,逐渐走上科技的巅峰。 \ ⚔科技是一把双刃剑,网络安全不容忽视,人们的隐私在大数据面前暴露无遗,账户被盗、资金损失、网络诈骗、隐私泄露,种种迹象…...

3D模型转换工具HOOPS Exchange如何实现OBJ格式轻量化?
什么是OBJ模型轻量化? OBJ格式是一种常用的三维模型文件格式,通常包含模型的顶点、法线、纹理坐标等信息,但有时候这些信息可能会使模型文件变得较大,不利于网络传输、加载和运行。 OBJ(Object)模型轻量化…...

命令模式-
定义:又叫动作模式或事务模式。指的是将一个请求封装成一个对象,使发出请求的责任和执行请求的责任分割开,然后可以使用不同的请求把客户端参数化,这样可以使得两者之间通过命令对象进行沟通,从而方便将命令对象进行储…...

进程的管理
#include <unistd.h> void _exit(int status); #include <stdlib.h> void _Exit(int status); status参数:是进程退出时的状态信息,父进程在回收子进程资源的时候可以获取到 #include<stdio.h> #include<stdlib.h> #includ…...

绿色科技:可持续发展的创新解决方案
标题绿色科技:可持续发展的创新解决方案 摘要引言绿色能源创新1. 太阳能和风能2. 储能技术 可再生资源管理3. 智能农业4. 循环经济 智能城市的未来5. 智能交通6. 城市感知 可持续生活方式7. 可持续建筑8. 智能家居 总结参考资料 博主 默语带您 Go to New World. ✍ …...

安防视频/视频汇聚平台EasyCVR使用onvif探测添加设备通道详细步骤来啦!
视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、…...

Python单例模式(3种常用方式)
Python单例模式 1、使用模块(推荐)2、使用装饰器3、使用new()方法 单例模式是最常见的一种设计模式,该模式确保系统中一个类仅有一个实例 常用的三种实现方式如下: 1、使用模块(推荐) 模块是天然单例的&a…...

uni-app实现web-view图片长按下载
<template><view><web-view :webview-styles"webviewStyles" :src"webUrl"></web-view></view> </template> uniapp的web-view中图片无法长按保存,IOS下是正常的,但是Android下长按无反应 解…...

深入理解Linux网络笔记(一):内核是如何接收网络包的
本文为《深入理解Linux网络》学习笔记,使用的Linux源码版本是3.10,网卡驱动是Intel的igb网卡驱动 Linux源码在线阅读:https://elixir.bootlin.com/linux/v3.10/source 1、内核是如何接收网络包的 1)、Linux网络收包总览 在TCP/I…...

android系统目录结构
文章目录 android系统目录结构问答偏好设置保存在哪里在应用设置中点击清除数据,清除的是什么在应用设置中点击清除缓存,清除的是什么 参考 android系统目录结构 /- system (一般只有root权限才能访问)- data- app (存放应用程序的 APK 文件…...

怒刷LeetCode的第11天(Java版)
目录 第一题 题目来源 题目内容 解决方法 方法一:迭代 方法二:递归 方法三:指针转向 第二题 题目来源 题目内容 解决方法 方法一:快慢指针 方法二:Arrays类的sort方法 方法三:计数器 方法四…...