0102 MySQL05
1.约束
1.约束(constraint):在创建表时,可以给表中的字段加上一些约束,保证表中数据的完整性,有效性
常见的约束?
非空约束:not null
唯一性约束:unique
主键约束:primary key(简称PK)
外键约束:foreign key(简称FK)
检查约束:check(MySQL不支持,Oracle支持)
补充:xxx.sql这种文件称为sql脚本文件,执行该脚本文件时,该文件中的所有SQL语句会全部执行,批量的执行SQL语句,可以使用sql脚本文件
怎么执行?mysql>source D:\xxxxx\xxx.sql
1.非空约束
not null约束的字段不能为null
drop table if exists t_vip;
create table t_vip(
id int,
name varchar(255) not null
);
insert into t_vip(id,name) values(1,'zhangsan');
insert into t_vip(id,name) values(2,'lisi');
insert into t_vip(id) values(3);//报错,name字段没有默认值
2.唯一性约束
1.unique约束的字段不能重复
drop table if exists t_vip;
create table t_vip(
id int,
name varchar(255) unique,
email varchar(255)
);
insert into t_vip(id,name,email) values(1,'zhangsan','zhangsan@123.com');
insert into t_vip(id,name,email) values(2,'lisi','lisi@123.com');
insert into t_vip(id,name,email) values(3,'zhangsan','zhangsan@456.com');//报错,name值重复
insert into t_vip(id) values(3);//可以为null
2.新需求:name和email两个字段联合起来具有唯一性?
drop table if exists t_vip;
create table t_vip(
id int,
name varchar(255) unique,
email varchar(255) unique
);//不符合需求,表示各自唯一
drop table if exists t_vip;
create table t_vip(
id int,
name varchar(255) ,
email varchar(255) ,
unique (name,email)
);//两个字段联合起来唯一
测试:
insert into t_vip(id,name,email) values(1,'zhangsan','zhangsan@123.com');
insert into t_vip(id,name,email) values(2,'zhangsan','zhangsan@456.com');
//不报错
约束直接添加到列后面:列级约束
约束没有添加到列后面:表级约束(多个字段联合起来唯一时使用)
not null只有列级约束,没有表级约束
3.unique和not null可以联合吗?
drop table if exists t_vip;
create table t_vip(
id int,
name varchar(255) not null unique
);//name为主键
//在MySQL中,如果一个字段同时被not null和unique约束时,该字段自动变成主键字段
(Oracle中不适用)
3.主键约束
1.primary key相关术语?
主键约束:一种约束
主键字段:字段添上主键约束,这样的字段
主键值:主键字段中的每一个值
2.什么是主键?有什么用?
主键值是每一行记录的唯一标识,是每一行记录的身份证号
任何一张表都应该有主键,没有主键的表无效
特征:not null + unique(不能是空,也不能重复)
3.给表添加主键约束?
drop table if exists t_vip;
create table t_vip(
id int primary key,
name varchar(255)
);
insert into t_vip(id,name) values(1,'zhangsan');
insert into t_vip(id,name) values(1,'lisi');//报错,主键重复
//主键可以使用表级约束
一个字段做主键:单一主键
字段联合做主键:复合主键(在实际开发中不建议使用)
4.主键约束数量?
drop table if exists t_vip;
create table t_vip(
id int primary key,
name varchar(255) primary key
);//报错,一张表只能添加一个,即主键只能有一个
5.主键值建议使用类型?
int,bigint,char等类型
不建议使用varchar做主键,一般是数字,且定长
6.自然主键和业务主键?
自然主键:主键值是一个自然数,和业务无关
业务主键:主键值和业务紧密关联,如拿银行卡账号做主键
在实际开发中,使用自然主键较多,因为主键只要做到不重复,不需要有意义,
和业务挂钩,当业务发生变动时,可能影响主键值
7.在MySQL中,有一种机制可以帮助我们自动维护一个主键值?
drop table if exists t_vip;
create table t_vip(
id int primary key auto_increment,
name varchar(255)
);
insert into t_vip(name) values('zhangsan');
insert into t_vip(name) values('zhangsan');
insert into t_vip(name) values('zhangsan');
//auto_increment表示自增,从1开始递增
4.外键约束
1.foreign key相关术语:
外键约束、外键字段、外键值
2.业务背景:
设计数据库表,描述‘班级‘和’学生‘的信息?
第一种方案:班级和学生存储在一张表中t_student
| no(pk) | name | classno | classname |
| 1 | jack | 001 | 高三1班 |
| 2 | tom | 001 | 高三1班 |
| 3 | zhangsan | 002 | 高三2班 |
| 4 | wangwu | 002 | 高三2班 |
以上方案的缺点:数据冗余,空间浪费
第二种方案:班级一张表,学生一张表t_class,t_student
| classno(pk) | classname |
| 001 | 高三1班 |
| 002 | 高三2班 |
| no(pk) | name | cno(班级编号) |
| 1 | jack | 001 |
| 2 | tom | 001 |
| 3 | zhangsan | 002 |
| 4 | wangwu | 002 |
当班级编号没有任何约束时,可能导致数据无效
为了保证学生表中班级编号有效,需要添加外键约束
那么classno就是外键字段,字段中的每一个值就是外键值
注:被引用的t_class的是父表,t_student是子表
删除表,删除数据顺序:先删子表,再删父表
创建表,插入数据顺序:先创父表,再创子表
drop table if exists t_student;
drop table if exists t_class;
create table t_class(
classno int primary key,
classname varchar(255)
);
create table t_student(
no int primary key auto_increment,
name varchar(255),
cno int,
foreign key(cno) references t_class(classno)
);
insert into t_class(classno,classname) values(001,高三1班);
insert into t_class(classno,classname) values(002,高三2班);
insert into t_student(name,cno) values(jack,001);
insert into t_student(name,cno) values(tom,001);
insert into t_student(name,cno) values(zhangsan,002);
insert into t_student(name,cno) values(wangwu,002);
3.子表中的外键引用父表中的某个字段,被引用的这个字段必须是主键吗?
不一定是主键,但至少具有unique唯一性
外键可以为null吗?
insert into t_student(name) values(lisi);//可以为null
2.存储引擎(了解)
1.存储引擎:是MySQL中特有的术语,是一个表存储数据的方式,不同的存储引擎,表存储数据的方式不同
2.怎么给表指定’存储引擎‘?
show create table t_student;
可以在建表的时候给表指定存储引擎,可以在最后小括号’)‘的右边使用:
ENGINE来指定存储引擎
CHARSET来指定这张表的字符编码方式
MySQL默认的存储引擎是InnoDB,默认字符编码方式utf8
create table t_product(
id int primary key,
name varchar(255)
)engine=InnoDB default charset=gbk;
3.怎么查看MySQL支持哪些存储引擎?
show engines \G

MySQL支持九大存储引擎
4.常用的存储引擎?(了解)
MyISAM存储引擎,它管理表具有以下特征:
使用三个文件表示每个表:
格式文件:存储表结构的定义(mytable.frm)
数据文件:存储表行的内容(mytable.MYD)
索引文件:存储表上索引(mytable.MYI):索引是一本书的目录,缩小扫描范围
对于一张表来说,只要是主键或有unique约束的字段会自动创建索引
优势:可被转化为压缩、只读表来节省空间
不支持事务,安全性低
InnoDB存储引擎
是MySQL默认的存储引擎,支持事务,支持数据库崩溃后自动恢复机制
它管理表具有以下特征:
每个InnoDB表在数据库目录中以.fm格式文件表示
InnoDB表空间tablespace被用于存储表的内容(表空间是逻辑名称,表空间存储数据+索引)
提供一组用来记录事务性活动的日志文件
用COMMIT(提交)、SAVEPOINT及ROLLBACK(回滚)支持事务处理
支持外键及引用的完整性,包括级联删除和更新
特点:非常安全
MEMORY存储引擎(之前被称为HEAP引擎)
其数据存储在内存中,且行的长度固定,这两个特点使MEMORY存储引擎非常快
它管理表具有以下特征:
在数据库目录内,每个表均以.frm格式的文件表示
表数据及索引被存储在内存中(查询快)
表级锁机制
不能包含TEXT或BLOB字段
优点:查询效率最高
不安全,关机之后数据消失,因为数据和索引都在内存
相关文章:
0102 MySQL05
1.约束 1.约束(constraint):在创建表时,可以给表中的字段加上一些约束,保证表中数据的完整性,有效性 常见的约束? 非空约束:not null 唯一性约束:unique 主键约束&am…...
[深入理解SSD系列 闪存2.1.3] 固态硬盘闪存的物理学原理_NAND Flash 的读、写、擦工作原理
2.1.3.1 Flash 的物理学原理与发明历程 经典物理学认为 物体越过势垒,有一阈值能量;粒子能量小于此能量则不能越过,大于此能 量则可以越过。例如骑自行车过小坡,先用力骑,如果坡很低,不蹬自行车也能 靠惯性过去。如果坡很高,不蹬自行车,车到一半就停住,然后退回去。 …...
洗地机哪家强?洗地机排行榜
随着清洁行业电器的开展,越来越多的新颖工具和电器开端进入消费者的生活之中。众所周知,面对美不胜收的清洁电器产品,选购也是一大头疼事,应该怎样选购洗地机等清洁电器呢,实在的用户体验和清洁效率莫过于消费者最看重…...
【Java基础 下】 029 -- 多线程
目录 一、为什么要有多线程? 1、线程与进程 2、多线程的应用场景 3、小结 二、多线程中的两个概念(并发和并行) 1、并发 2、并行 3、小结 三、多线程的三种实现方式 1、继承Thread类的方式进行实现 2、实现Runnable接口的方式进行实现 3、利用…...
R语言生物群落(生态)数据统计分析与绘图
查看原文>>>R语言生物群落(生态)数据统计分析与绘图 R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂,涉及众多统计分析方法。本课程以生物群落数据分析中的最常用的统计方法回归和混…...
浙江首场千人大会现场爆满!实在智能九哥专题演讲:企业数字化转型,从实在RPA开始!
为帮助众多电商商家探索数字时代下新赛道、新趋势、新方向,制定有目标、有节奏的全年生意规划,“未来电商高峰论坛暨电商生态赋能大会”于3月4日在杭州正式拉开序幕。本次大会旨在向品牌电商企业主、运营操盘手分享数字电商时代的黄金趋势及运营策略&…...
Windows 上 执行docker pull命令 提示:The system cannot find the file specified.
错误提示error during connect: This error may indicate that the docker daemon is not running.: Get "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/version": open //./pipe/docker_engine: The system cannot find the file specified.解决办法在cmd 窗口中执…...
查看 WiFi 密码的两种方法
查看 WiFi 密码的两种方法1. 概述2. 在控制面板中查看 WiFi 密码3. 使用 CMD 查看 WiFi 密码结束语1. 概述 突然忘记 WiFi 密码怎么办? 想连上某个使用过的 WiFi,但有不知道 WiFi 密码怎么办? 使用电脑如何查询 WiFi 密码? 以下是…...
逻辑优化基础-bi-decomposition
简介 bi-decomposition是逻辑综合中用于简化布尔函数的一种技术。其思想是将函数分成两个较小的函数,每个函数仅取决于所选变量的一个值。这些较小的函数可以使用简单的逻辑门(如AND、OR和NOT门)来实现,然后组合以获得原始函数的…...
Modbus转profinet网关连接1200PLC在博图组态与驱动器通讯程序案例
本案例给大家介绍由兴达易控modbus转profinet网关连接1200PLC在博图软件无需编程,实现1200Profinet转modbus与驱动器通讯的程序案例 硬件连接:1200PLC一台;英威腾DA180系列驱动器一台;兴达易控modbus转profinet网关一台 下面就是…...
Android ART虚拟机 启动和初始化
前言 之前整理了一系列Dalvik虚拟机的关于堆内存和GC的文章,轮到对ART内存进行分析优化了,继续整理输出一波,本篇为ART虚拟机系列的第一篇,介绍ART虚拟机的启动和初始化。 #mermaid-svg-8iNdLFTpOHLgRjHA {font-family:"tre…...
宇视科技一二三面
一面 1、自我介绍 2、堆和栈的区别,堆在数据结构中是如何表示的 3、有用过Linux吗?虚拟空间中用户态是3G,假如计算机的内存是4G,为什么计算机可以运行这些进程 4、虚拟地址到物理地址的映射过程 5、进程间的通信方式 6、共享内存…...
优思学院|盘点,精益生产25个工具!【必需收藏】
精益生产方法需要一种全面的方法才能有效实施。精益这个概念是每个接触产品供应链的人都要实践的,无论是在计划方面还是在分析方面。 精益生产工具有助于持续改进生产效率和产品或服务质量。精益工具是要减少 Muda (浪费),从生产过…...
Linux中将多块新硬盘合并成一个,挂载到/mysqldata目录下
需求: 将两块空硬盘合并为“一块”,挂载到指定目录(/data)下,达到在一个目录使用2块硬盘所有空间的效果。 使用 fdisk -l 命令查看当前系统中的硬盘,如下图: 系统中存在两块未分配的硬盘&#…...
Git的SSH密钥配置
Git的SSH密钥配置简记Githttps和ssh的区别基本需求SSH密钥类型ED25519 SSH 密钥RSA SSH 密钥查看您是否有现有的 SSH 密钥对设置流程设置user name和emailssh密钥配置检查是否存在ssh Key创建新的ssh key将ssh密钥添加到您的Git帐户验证您是否可以连接使用Git有一段时间了&…...
C++回顾(九)——多继承
9.1 多继承 9.1.1 概念 一个类有多个直接基类的继承关系称为多继承(多个父类)多继承声明语法 class 派生类名 : 访问控制 基类名1 , 访问控制 基类名2 , … , 访问控制 基类名n {数据成员和成员函数声明 };类 C 可以根据访问控制同时…...
交流约瑟夫森效应
定理 根据约瑟夫森效应的基本方程,当隧道结两端施加恒定电压V0V_0V0时,结两边超导体波函数的位相差为 Δϕ2eℏV0tΔϕ0\begin{align} \Delta\phi\frac{2e}{\hbar}V_0t\Delta\phi_0 \end{align} Δϕℏ2eV0tΔϕ0 得到超导电流密度为 JsJcs…...
大数据项目实战之数据仓库:用户行为采集平台——第3章 用户行为日志
第3章 用户行为日志 3.1 用户行为日志概述 用户行为日志的内容,主要包括用户的各项行为信息以及行为所处的环境信息。收集这些信息的主要目的是优化产品和为各项分析统计指标提供数据支撑。收集这些信息的手段通常为埋点。 目前主流的埋点方式,有代码…...
centos6下为Rstudio安装多版本R
之前的R版本太旧,不少包装不上,需要安装新版本的R: R --version R version 3.6.0 (2019-04-26) -- "Planting of a Tree"于是下载最新版R: 因为没有证书,需要加上最后面的参数. wget https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/base/R-4/R-4.2.2.tar.gz --no…...
TCL 拥抱云原生,实现 IT 成本治理优化
作者:行疾 TCL 工程师团队基于阿里云企业云原生 IT 成本治理方案沉淀了一套成熟的 IT 企业成本治理流程与系统,通过阿里云容器服务提供的开箱即用的成本洞察、资源智能画像等功能,进行业务成本拆分、闲置资源可视化发现,并制定弹性…...
泉盛UV-K5/K6固件深度定制指南:解锁专业级无线电功能
泉盛UV-K5/K6固件深度定制指南:解锁专业级无线电功能 【免费下载链接】uv-k5-firmware-custom 全功能泉盛UV-K5/K6固件 Quansheng UV-K5/K6 Firmware 项目地址: https://gitcode.com/gh_mirrors/uvk5f/uv-k5-firmware-custom 你是否对原厂固件的功能限制感到…...
开发者技能图谱:如何利用GitHub仓库系统化规划技术学习路径
1. 项目概述:一个面向开发者的技能图谱与学习路径仓库最近在GitHub上闲逛,发现了一个挺有意思的仓库,叫tayyabexe/skills。乍一看名字,你可能会觉得这又是一个“Awesome-XXX”式的资源列表合集。但点进去仔细研究后,我…...
WinDirStat插件开发终极指南:构建自定义磁盘管理功能
WinDirStat插件开发终极指南:构建自定义磁盘管理功能 【免费下载链接】windirstat WinDirStat is a disk usage statistics viewer and cleanup tool for Microsoft Windows 项目地址: https://gitcode.com/gh_mirrors/wi/windirstat 作为Windows平台最知名的…...
Arduino Uno R3 bootloader烧写避坑全记录:从USBasp驱动安装到熔丝位设置(Win10/11实测)
Arduino Uno R3 bootloader烧写实战指南:从驱动配置到熔丝位安全操作 当一块全新的Atmega328P芯片静静躺在工作台上时,它就像一张白纸,等待着被赋予生命。作为硬件开发者,我们常常需要为这些空白芯片注入灵魂——烧写bootloader。…...
跨端三维GIS实战:uni-app集成Cesium.js的RenderJS方案解析
1. 为什么需要跨端三维GIS解决方案 最近几年三维GIS应用越来越普及,从传统的Web端到移动端APP,开发者都希望实现"一次开发,多端运行"的目标。uni-app作为跨端开发框架,天然具备这个优势。但当我们想在uni-app中集成Cesi…...
保姆级排错:Keil里J-Link选项神秘消失?手把手教你定位GD32E23等ARM-M23内核芯片的调试器兼容问题
当Keil调试器选项消失时:深度解析ARM-M23内核芯片的调试兼容性问题 第一次在Keil的Debug配置界面发现J-Link选项神秘消失时,我盯着屏幕愣了几秒钟——前一天明明还能正常使用的工具链,怎么突然就"罢工"了?这种看似"…...
告别手动计算!用C#给ArcGIS做个插件,一键搞定城市风环境评估(附源码思路)
从零构建ArcGIS风环境评估插件:C#实战与架构设计 在建筑规划与城市设计中,风环境评估往往需要反复计算迎风面指数这类专业指标。传统工作流中,规划师需要手动处理风向数据、编写脚本批处理建筑网格,不仅效率低下,还容易…...
Laravel RSS聚合器larafeed:现代化内容聚合后端解决方案
1. 项目概述:一个为Laravel打造的现代化RSS聚合器如果你正在用Laravel构建一个内容聚合平台、新闻阅读器,或者只是想为自己的个人博客添加一个“我最近在读什么”的订阅墙,那么你很可能需要处理RSS或Atom源。手动解析这些XML格式的源、处理缓…...
美政府AI主管:Anthropic 将在 18 个月内成为人类历史最有价值公司
Anthropic 已经成为人工智能革命中最成功的案例之一,但这或许还不是全部。风险投资家兼美国政府人工智能和加密货币沙皇大卫萨克斯在 All-In播客节目中提出了一个惊人的说法:Anthropic 不仅有望成为科技界最强大的公司,而且有望成为人类历史上…...
HandheldCompanion:解锁Windows掌机游戏体验的终极钥匙
HandheldCompanion:解锁Windows掌机游戏体验的终极钥匙 【免费下载链接】HandheldCompanion ControllerService 项目地址: https://gitcode.com/gh_mirrors/ha/HandheldCompanion 你是否曾为Windows掌机的游戏兼容性而烦恼?是否梦想着在便携设备上…...
