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

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)nameclassnoclassname
1jack001高三1班
2tom001高三1班
3zhangsan002        高三2班
4wangwu002高三2班

以上方案的缺点:数据冗余,空间浪费

第二种方案:班级一张表,学生一张表t_class,t_student

classno(pk)classname
001高三1班
002高三2班

no(pk)namecno(班级编号)
1jack001
2tom001
3zhangsan002
4wangwu002

当班级编号没有任何约束时,可能导致数据无效

为了保证学生表中班级编号有效,需要添加外键约束

那么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} Δϕℏ2e​V0​tΔϕ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 企业成本治理流程与系统,通过阿里云容器服务提供的开箱即用的成本洞察、资源智能画像等功能,进行业务成本拆分、闲置资源可视化发现,并制定弹性…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

uniapp 字符包含的相关方法

在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...