mysql专题上

article/2025/7/14 20:33:01

连接服务器

mysql -h 127.0.0.1 -P 3306 -u root -p 

-h后接的是要连接的部署了mysql的主机,127.0.0.1指的是单机访问,如果没有指令则直接连接本地
-P后接的是端口号 一般是3306
-u后接的是要登入的用户
-p指要登陆密码
在这里插入图片描述
如果要退出可以直接quit
在这里插入图片描述

mysql和mysqld

mysql是数据库服务的客户端,mysqld是数据库服务的服务器端,所以MySQL本质上是基于CS模式的一种网络服务,既然是网络服务,那我们就可以查到端口号,数据库一般指的是未来我们在磁盘或者内存中存储的有特定结构或者组织的数据,而数据库服务一般指的是mysqld
在这里插入图片描述

在这里插入图片描述

MySQL的架构

在这里插入图片描述
第一层:做链接安全管理
第二层:词法语法分析
第三层:用用户指定的存储引擎去操作文件
在这里插入图片描述

第四层:内存/磁盘

sql语句分类

DDL

数据定义语言,用来维护存储数据的结构,比如说创建表或者修改表结构

DML

数据操纵语言,用来对数据进行操纵,比如说插入一条数据,删除一条数据

DCL

数据控制语言,主要负责权限管理和事务,比如说commit

数据库的操作

查看数据库

show databases;

在这里插入图片描述
如果我们想看数据库存放的文件,可以通过

vim /etc/my.cnf

查看datadir可以看到自己的数据库存储的内容放在哪一个目录下
在这里插入图片描述

在这里插入图片描述
如果我们想查看自己现在处于哪个数据库里,可以使用

select database();

在这里插入图片描述
如果想查看数据库的属性,可以使用

show create database d1;

在这里插入图片描述
如果想看此时的连接情况

show processlist;

在这里插入图片描述

创建数据库

本质上是在/var/lib/mysql目录下创建一个目录

create database [if not exists] databasename [specification];
sepcification:character set charset_name #字符集collate collation_name #校验规则#这两个字符集都符合就近原则

在创建数据库的时候有两个编码集,一个是数据库编码集,用于数据库未来存储数据,一个是数据库校验集,支持数据库字段比较使用的编码,这两个编码必须匹配,不同的校验规则作用不一样,有的导致大小写敏感,有的导致大小写不敏感等
在这里插入图片描述

在这里插入图片描述

如果想查看相应的编码集可以用以下指令

show variables like 'character_set_database';

在这里插入图片描述
如果想查看校验集可以使用

show variables like 'collation_database';

在这里插入图片描述
如果我们想查看所有数据库支持的编码集

show charset;

在这里插入图片描述
如果想查看所有校验集

show collation;

在这里插入图片描述

create database if not exists db1 charset=utf8 collate utf8_general_ci;

在这里插入图片描述
可以看到文件里也同步了
在这里插入图片描述

使用数据库

use databasename;

在这里插入图片描述

删除数据库

本质上是在/var/lib/mysql删除一个目录,删除之后有两个结果,第一是数据库内部看不到对应的数据库,第二个是数据库文件夹被删除,里面的数据表也全部被删除

drop database [if exists] databasename;
drop database db1;

在这里插入图片描述

修改数据库

alter database d1 charset=gbk;

在这里插入图片描述
/*!40100 DEFAULT CHARACTER SET gbk */这句话表示MySQL版本大于4.01,就执行后面这一句

数据库备份

备份
mysqldump -P 3306 -u root -p -B databasename > databasename.sql

-B指明数据库
如果备份的时候忘记带上-B,就可以先创建一个新数据库,然后再use这个数据库,再source还原
如果只是备份其中的表

mysqldump -P 3306 -u root -p -B databasename 表1 表2 > databasename.sql

如果要同时备份多个数据库

mysqldump -P 3306 -u root -p -B databasename1 databasename2 > databasename.sql

在这里插入图片描述
这里面也可以看到我们过去的动作
在这里插入图片描述

还原

在这里插入图片描述
可以看到现在是没有d1 的

source /var/lib/mysql/test1.sql

在这里插入图片描述
这样就有d1了
在这里插入图片描述

表的操作

创建表

创建的表是在磁盘中以二进制存放的普通文件

create table student(file1 datatype1 comment '注释',file2 datatype2,file3 datatype3...
)character set 字符集 collate 校验规则 engine 存储引擎;
create table student (id int,name varchar(20) comment '姓名',password varchar(50) comment '密码',age int,sex varchar(1),birthday timestamp,amout decimal(13,2),resume text
)character set utf8 engine MyISAM;#也可以用等号

在这里插入图片描述

在这里插入图片描述
而且我们可以看到不同的存储引擎的文件个数是不一样的
在这里插入图片描述

查看表

如果我们想查看表结构

desc tablename;

在这里插入图片描述
也可以

show create table tablename\G

在这里插入图片描述

修改表

修改表名
alter table tablename1 rename to tablename2;

在这里插入图片描述

新增一列
alter table tablename1 add column datatype;

在这里插入图片描述

修改一列的属性
alter table tablename1 modify column 新属性;

是把这一列创建的所有字段全部覆盖掉
在这里插入图片描述

删除一列
alter table tablename1 drop column;

在这里插入图片描述

修改列名称
alter table tablename1 change columnold columnnew 新定义;

在这里插入图片描述

数据类型

在这里插入图片描述
范围问题
float会自动四舍五入
在这里插入图片描述
这边创建一个表
在这里插入图片描述
关于tinyint有符号
在这里插入图片描述

关于tinyint无符号
在这里插入图片描述
如果我们插入的数据范围超过了指定的类型,mysql会直接阻止插入
在这里插入图片描述
add:如果是set和enum,可以用数字代替
在这里插入图片描述
如果需要找到set里的一部分,下图表示1在1,2这个集合里
在这里插入图片描述
在这里插入图片描述
也可以直接用数字
在这里插入图片描述

表的约束

空属性null和默认值default

一般不参与计算,包括null和not null
在这里插入图片描述
当在表中建立约束为not null的时候,在插入的时候这个字段必须有值,不能为空
在这里插入图片描述
在这里插入图片描述
如果设置了默认值,再执行一次刚才的插入
在这里插入图片描述
下图是修改后的表结构
在这里插入图片描述

在这里插入图片描述
如果我们没有指定一列要插入,默认使用的是default,但如果没有default为null,且有加not null约束,那就会报错

列描述comment

comment类似于c/c++里的注释
在这里插入图片描述

zerofill

可以看到int后面是有数字的
在这里插入图片描述
但如果加入zerofill
在这里插入图片描述
在这里插入图片描述
在插入数据的时候可以看到a和b是有区别的,zerofill的意思是,插入数据的宽度小于规定的宽度,如果多于规定的宽度则不变,mysql会自动补零进行显示,未来显示的表格是等宽的,存储的数据是不变的,只是显示有区别:
在这里插入图片描述

主键primary key

primary key不能为空,不能重复,一张表中只能有一个,通常是整数类型,在建表的时候自动加上not null非空约束
在这里插入图片描述
以下是不能为空和重复的证明
在这里插入图片描述
在这里插入图片描述

也可以这样创建
在这里插入图片描述
当表建好了之后可以添加主键

alter table 表名 add primary key(字段名);

也可以删除主键

alter table 表名 drop primary key;

也可以做一个复合主键,表示这几个合起来为主键,合起来不重复即可
在这里插入图片描述

自增长auto_increment

当对应的字段不给值会被自动触发,会选择表中字段最大的值+1,自增长字段必须有值,key列必须有值,也就是说本身必须是一个索引,一张表最多只能有一个自增长,在删除表中所有数据的时候,auto_increment不变
在这里插入图片描述
在这里插入图片描述
如果id修改了,最大值为1000,会从新的起始值开始插入
在这里插入图片描述
下图可以看到auto_increment是在表外的
在这里插入图片描述

唯一键unique key

唯一键不能重复,但可以为空,一个表中可以有多个唯一键
在这里插入图片描述
如果要删除唯一键,可以先用以下查找索引名称
在这里插入图片描述
在这里插入图片描述

外键foreign key

外键用于定义主表和从表的关系,主表必须有主键约束或者unique约束,在主表中的数据必须存在或者为null
在这里插入图片描述
在这里插入图片描述
不能插入主表没有的值,主表不能删除从表还在的值,比如说班级表必须保证学生表不能存在隶属于一个班级的学生后才能删除这个班级
在这里插入图片描述
在这里插入图片描述

表的增删改查

表的插入

insert into 表名 (列名) values (cloumn1,column2...);

如果要全列插入可以不写列名
在这里插入图片描述
也可以多行插入
在这里插入图片描述
插入否则更新
在这里插入图片描述
在这里插入图片描述
如果遇到主键冲突了可以变成更新操作,两行被影响表示冲突并修改,但不能和其他的主键唯一键冲突
在这里插入图片描述
如果不冲突是一行受影响,表示直接插入
在这里插入图片描述
如果插入的数据是一样的,则0行受影响
在这里插入图片描述
可以使用select row_count()查看有哪几行受影响
在这里插入图片描述

表的替换

insert into 表名 (列名) values (cloumn1,column2...);

如果不出现冲突,相当于直接插入
在这里插入图片描述

如果出现主键或者唯一键冲突,则删除后再插入,这里的主键是有设置auto_increment的,所以证明这是删除后重新插入的结果
在这里插入图片描述
两行受影响表示冲突后替换
在这里插入图片描述

表的查询

select
[distinct]{*|column1,column2...}
from table_name
where{...}
order by ...{asc|desc}
limit...
全列查询

在这里插入图片描述
但一般不会全部查询,因为数据传输量太大,也会影响索引的使用
所以可以用limit限定
在这里插入图片描述
也可以重命名,重命名不能用于where的筛选,但可以用于order by
在这里插入图片描述
如果想去重可以
在这里插入图片描述

where子句

null不参与比较运算
在这里插入图片描述
在这里插入图片描述

in(option1,option2…,)
select* from class where class_id in(1,2,3,4);

在这里插入图片描述

模糊匹配like

%表示可以匹配多个,_只能匹配一个
在这里插入图片描述
也可以使用not like
在这里插入图片描述

排序

order by用于对结果做排序,默认升序,asc表示升序,desc表示降序
在这里插入图片描述
也可以先对class_id做完排序后再对class_pid做排序,表示在class_id相等的情况下对class_pid做排序
在这里插入图片描述
如果null参与排序,它比任何值都要小
在这里插入图片描述

limit
limit n;取前几行
limit s n;取从s行开始的n行
limit n offset s;取从s行开始的n行

在这里插入图片描述
在这里插入图片描述

聚合函数

在这里插入图片描述
在这里插入图片描述

统计一个表中有多少个记录
在这里插入图片描述
统计有效数据
在这里插入图片描述
也可以直接去重
在这里插入图片描述
也可以先where在聚合函数
在这里插入图片描述
在这里插入图片描述

group by分组

在select中使用group by可以对指定列进行分组查询

select 聚合函数/分组列 as 重命名 from table where{...} group by 列1,列2,列3...;

在这里插入图片描述
经常配合having 配合使用,having类似于where

[select 聚合函数/分组列 as 重命名 from table where {...}] group by {列1,列2,列3..}{having...}

在这里插入图片描述
having是对分组后的结果进行筛选,where是对原来的表的任意行进行筛选,having也可以像where一样使用,因为一切都是表

表的更新

update tablename set column={exp...}
where{...}#如果没有where则会全列修改
order by{...}
limit{...} 

在这里插入图片描述
关于order by和limit
比如说我们需要找到class_id倒数三名的行,把class_pid设置为5
在这里插入图片描述

表的删除

```bash
delete from tablename
where{...}#如果没有where则会全列修改
order by{...}
limit{...} 

在这里插入图片描述

清空表

如果想删除整表数据,可以直接
在这里插入图片描述

截断表

无法针对性的对某数据做出删除,只能对整表使用,比delete更快,不经过事物,所以无法回滚,会重置auto_increment

truncate tablename;

在这里插入图片描述
在这里插入图片描述
但如果我们只是清空表,auto_increment是不会清0的,而truncate是会清0的
这张是delete
在这里插入图片描述
这张是truncate
在这里插入图片描述

删除表中重复记录

在这里插入图片描述

我们有一张这种表,需要去重,但不能直接用select,因为直接select只能查询,不能改变表内容,所以我们可以创建一张空的表,空的表要和原本的表结构一模一样,可以直接创建create,也可以直接用like语句创建,把去重后的结果插入这张表中,最后进行rename重命名
在这里插入图片描述
在这里插入图片描述

MySQL函数

日期函数

在这里插入图片描述

select 函数#在mysql中,select可以执行对应的函数

在这里插入图片描述

字符串函数

在这里插入图片描述
在这里插入图片描述

数学函数

在这里插入图片描述

其他函数

user()查询当前用户
md5(str)对一个字符串进行md5摘要,得到一个32位字符串
database()显示当前正在使用的数据库
ifnull(val1,val2)如果val1为空,返回val2,否则返回val1
password() MySQL使用这个函数对用户加密


http://www.hkcw.cn/article/TRUrZSCyOT.shtml

相关文章

DAY43打卡

浙大疏锦行 kaggle找到一个图像数据集,用cnn网络进行训练并且用grad-cam做可视化 进阶:并拆分成多个文件 fruit_cnn_project/ ├─ data/ # 存放数据集(需手动创建,后续放入图片) │ ├─ train/ …

蓝天影院订票网站的设计V3

1 绪 论 1.1 本课题研究背景 20世纪90年代中期以来,随着以Internet为代表的计算机技术,网络技术和信息技术的迅速发展,影院订票也逐渐转移到网络上[1][2]。伴随着我国计算机信息产业的飞速进步,计算机的开发应用已经遍布生活…

Python----目标检测(《YOLO9000: Better, Faster, Stronger》和YOLO-V2的原理与网络结构)

一、YOLO9000: Better, Faster, Stronger 1.1、基本信息 标题: YOLO9000: Better, Faster, Stronger 作者: Joseph Redmon, Ali Farhadi 机构: 华盛顿大学1, 艾伦人工智能研究所2 发布时间: 2016年(根据arXiv编号1612.08242推断) 论文链接: [1612.0…

力扣HOT100之动态规划:32. 最长有效括号

这道题放在动态规划里属实是有点难为人了,感觉用动态规划来做反而更难理解了,这道题用索引栈来做相当好理解,这里先讲下索引栈的思路。 索引栈做法 我们定义一个存放整数的栈,定义一个全局变量result来记录最长有效子串的长度&a…

操作系统:文件系统笔记

文件系统 参考资料: 12.10 虚拟文件系统_哔哩哔哩_bilibili7.1 文件系统全家桶 | 小林coding 基本组成 文件系统是操作系统中负责管理持久数据的子系统,说简单点,就是负责把用户的文件存到磁盘硬件中,因为即使计算机断电了&#…

Docker 安装 Redis 容器

系列文章目录 文章目录 系列文章目录前言1 获取redis镜像2 创建和部署redis容器3 查看redis是否启动成功4 使用Redis客户端验证连接总结 前言 搭建环境: ubuntu22.04.05 docker redis: 7.0.10 测试环境: windows: win11 Redis测试客户端:Ti…

Spring Boot 3.X 下Redis缓存的尝试(二):自动注解实现自动化缓存操作

前言 上文我们做了在Spring Boot下对Redis的基本操作,如果频繁对Redis进行操作而写对应的方法显示使用注释更会更高效; 比如: 依之前操作对一个业务进行定入缓存需要把数据拉取到后再定入; 而今天我们可以通过注释的方式不需要额外…

【Linux】Ubuntu 20.04 英文系统显示中文字体异常

英文系统显示中文字体异常 新安装的 Ubuntu 20.04 英文系统,显示中文字体有些奇怪,比如在谷歌浏览器中中文字体显示效果如下 参考 英文版ubuntu默认中文显示很奇怪 解决方案 - dbxxx - 博客园 编辑文件 sudo gedit /etc/fonts/conf.avail/64-languag…

每天总结一个html标签——a标签

文章目录 一、定义与使用说明二、支持的属性三、支持的事件四、默认样式五、常见用法1. 文本链接2. 图片链接3. 导航栏 在前端开发中,a标签(锚点标签)是最常用的HTML标签之一,主要用于创建超链接,实现页面间的跳转或下…

Day10

1. ArrayList和LinkedList的区别? 底层结构:ArrayList 是基于动态数组实现,支持索引快速访问;LinkedList 是基于双向链表实现,依赖指针访问前后元素。插入与删除效率:在尾部操作时,两者性能相近…

Flask + Celery 应用

目录 Flask Celery 应用项目结构1. 创建app.py2. 创建tasks.py3. 创建celery_worker.py4. 创建templates目录和index.html运行应用测试文件 Flask Celery 应用 对于Flask与Celery结合的例子,需要创建几个文件。首先安装必要的依赖: pip install flas…

鸿蒙电脑会在国内逐渐取代windows电脑吗?

点击上方关注 “终端研发部” 设为“星标”,和你一起掌握更多数据库知识 10年内应该不会 用Windows、MacOS操作系统的后果是你的个人信息可能会被美国FBI看到,但绝大多数人的信息FBI没兴趣去看 你用某家公司的电脑系统,那就得做好被某些人监视的下场,相信…

安全态势感知中的告警误报思考

如果说2020年还是小打小闹,那么2021年无疑是杀疯了,我带着我的误报识别系统和事件专家系统在流量态势感知领域杀疯了。先说说这个误报识别系统,我创新性的定义了灰色事件,认为告警不是非黑即白的,而是需要持续评估的&a…

电脑wifi显示已禁用怎么点都无法启用

一、重启路由器与电脑 有时候,简单的重启可以解决很多小故障。试着先断开电源让路由器休息一会儿再接通;对于电脑,则可选择重启系统看看情况是否有改善。 二、检查驱动程序 无线网卡驱动程序的问题也是导致WiFi无法启用的常见原因之一。我…

MAC电脑怎么通过触摸屏打开右键

在Mac电脑上,通过触摸屏打开右键菜单的方法如下: 法1:双指轻点:在触控板上同时用两根手指轻点,即可触发右键菜单。这是Mac上常用的右键操作方法。 法2:自定义触控板角落:可以设置触控板的右下角或左下角作为右键区域…

【音视频】 FFmpeg 硬件(AMD)解码H264

参考链接:https://trac.ffmpeg.org/wiki/HWAccelIntro 硬件编解码的概念 硬件编解码是⾮CPU通过烧写运⾏视频加速功能对⾼清视频流进⾏编解码,其中⾮CPU可包括GPU、FPGA或者ASIC等独⽴硬件模块,把CPU⾼使⽤率的视频解码⼯作从CPU⾥分离出来&…

【笔记】为 Python 项目安装图像处理与科学计算依赖(MINGW64 环境)

📝 为 Python 项目安装图像处理与科学计算依赖(MINGW64 环境) 🎯 安装目的说明 本次安装是为了在 MSYS2 的 MINGW64 工具链环境中,搭建一个完整的 Python 图像处理和科学计算开发环境。 主要目的是支持以下类型的 Pyth…

软件测评师教程 第2章 软件测试基础 笔记

第2章 软件测试基础 笔记 25.03.18 2.1 软件测试的基本概念 2.1.1 什么是软件测试 软件测试的定义: IEEE 使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求 或是 弄清预期结果与实际结果之间的差异。 软件测试应尽…

[网页五子棋][匹配对战]落子实现思路、发送落子请求、处理落子响应

文章目录 落子实现思路发送落子请求处理落子响应两种棋盘的区别实现 handleTextMessage实现对弈功能控制台打印棋盘完善前端逻辑 落子实现思路 先来实现:点击棋盘,能发送落子请求 客户端 1 点击了棋盘位置,先不着急画子,而是给服…

【QT控件】QWidget 常用核心属性介绍 -- 万字详解

目录 一、控件概述 二、QWidget 核心属性 2.1 核心属性概览 2.2 enabled ​编辑 2.3 geometry 2.4 windowTitle 2.5 windowIcon 使用qrc文件管理资源 2.6 windowOpacity 2.7 cursor 2.8 font ​编辑 2.9 toolTip 2.10 focusPolicy 2.11 styleSheet QT专栏&…