黑马测试mysql基础学习
视频来源:软件测试工程师所需的MySQL数据库技术,mysql系统精讲+课后练习_哔哩哔哩_bilibili
环境准备:
虚拟机Linux服务器安装mysql数据库。本机安装Navicat。使Navicat连接虚拟机的数据库。(麻烦一点的是Navicat连接虚拟机的数据库。网上自查怎么做就行。)
我遇到的一些麻烦点:1.虚拟机安装mysql,可以不用更新软件包。先查看是否安装了虚拟机,没有,就直接用命令安装mysql-service即可。
2.网上教程会让你开启安全模式,这里不建议开启,因为开启安全模式之后,它会有一个密码的限制,比如你用123456就会提示你密码不符合要求,这里我们是用作练习,就不要开安全模式。
3.虚拟机连接数据库,只要在数据库的配置文件注释那一行,以及给root用户添加所有权限就可以了,其它额外的命令都不要去弄。
ps:navicat不会连接虚拟机的linux直接翻到最下面,介绍了mysql命令是怎么连接的,并比对了其它一些博客的不必要的点。
一、sql语言基础
注释:
--单行注释、/* */多行注释。通过快捷键ctrl+/可以快速注释,同时再使用此快捷键可以取消注释。
数据类型:
int、tinyint、decimal(整数,小数)、varchar(字符串的数量)、datetime。用法:id int,name varchar(10),height decimal(5,2);
创建/删除表:
语法:create table 表名{ 字段名 数据类型,... };
例如:create table a{ name varchar(10) }; //创建表a,数据类型是字符串,长度为10.
删除表语法:drop table 表名; drop table if exists 表名;
insert添加数据:
插入一条语句:
格式1:insert into 表名 values(.....); //字符串信息可以用单引号或者双引号引起来,数字省略引号
格式2:insert into 表名 (字段1,......) values(值1,........) //部分字段设置值
插入多条语句:
格式1:insert into c(id,name,age) values(2,' adada',20); 再这样写几条,写多条语句,用英文隔开。
格式2:insert into 表名 values(....),(.....).....; 写一条语句,添加多条记录。(省略字段,像插入一条语句的格式1)
格式3:insert into 表名(字段1,....)values(值1,.....),(值1,.....)......; 写一条语句,设置指定字段值。
select简单查询:
select *from 表名 查询所有字段 例如:select * from c;
select 字段1,字段2,.... from 表名 查询指定字段 select age,name from c;
update修改数据:
update 表名 set 字段1=值1,字段2=值2....where 条件;
例如:update c set age=50;update c set name="元芳",age=33 where id=3;
删除表记录:
1.delete from 表名 where 条件; //通过delete删除,也可以删除整个表记录
2.truncate table 表名; ///通过truncate删除,只能删除整个表记录,但速度比delete快。
两种删除表记录的方式:delete from c ; truncate table c;
二、字段的约束
主要约束:主键(primary key):值不能重复,auto_increment代表自动增长
非空(not null)、唯一(unique)、默认值(default)。
一般用于创建表使用;
主键:
例如:create table d ( id int primary key auto_increment,name varchar(10) );//创建id字段非空,并自增长。
错误用法:所有字段都插入,但没写自增长字段值,会出错。而不指定id字段值时,系统会自动填写。
解决方案:使用占位符,通常使用0或者null来占位。
非空:
create table 表名( 字段名 数据类型 not null,....... );
唯一:
create table 表名(字段名 数据类型 unique,......);
默认值:
create table 表名(字段名 数据类型 default 值,..........);
进阶:
执行下列sql语句,生成students方便后续实验。
/* 如果学生表students存在,就删除学生表students */
drop table if exists students;/* 创建学生表students */
create table students (studentNo varchar(10) primary key, /*学号,主键,值不能重复*/name varchar(10), /*姓名*/sex varchar(1), /*性别*/hometown varchar(20), /*家乡*/age tinyint, /*年龄*/class varchar(10), /*班级*/card varchar(20) /*身份证号码*/
);/* 向学生表students插入数据 */
insert into students values
('001', '王昭君', '女', '北京', '30', '1班', '110101199003157654'),
('002', '诸葛亮', '男', '上海', '29', '2班', '310102199104262354'),
('003', '张飞', '男', '南京', '30', '3班', '320102199003047654'),
('004', '白起', '男', '安徽', '35', '4班', '340202198505177654'),
('005', '大乔', '女', '天津', '28', '3班', '120101199204067654'),
('006', '孙尚香', '女', '河北', '25', '1班', '130502199506137654'),
('007', '百里玄策', '男', '山西', '39', '2班', '140102198107277654'),
('008', '小乔', '女', '河南', '25', '3班', null),
('009', '百里守约', '男', '湖南', '31', '1班', ''),
('010', '妲己', '女', '广东', '24', '2班', '440701199607147654'),
('011', '李白', '男', '北京', '30', '4班', '110202199005017754'),
('012', '孙膑', '男', '新疆', '36', '3班', '650102198401297655');
别名与消除重复出现:
通过as语句可以代替字段名。例如:select name as 姓名 from students;查询得到姓名表而不是name的表。
且as可以省略。例如:select name 姓名 from students;效果和上面一样。
表的别名:select name ,age,sex from students ss;///表的别名一般用的较少。
消除重复记录:就是使用查询语句,加上这个,下次再使用查询,就会取消重复出现。
语法:select distinct sex from 表名; //这样就只会出现男,女,而不是多次出现。
注意:但是当出现多个字段值时,例如sex后面再添加一个name值,则只有sex和name都不一样才不会重复出现。
条件查询:
其实就是where字句.
支持多种运算符:比较运算符(>、<、>=)、逻辑运算符、模糊查询、范围查询、空判断.
模糊查询:like取代=、%表示多个字符、_表示一个字符。例如:where name like '孙%';
注意:%这个会把一个字符的,多个字符的都显示出来。
例题:查询名字为两个字的学生:SELECT * from students where name like '__';
例题:匹配最后一个字符的语句:SELECT * from students where studentNo like '%1' ;//匹配学号最后一个字符为1的学号。而不用管中间是否会出现1;
范围查询:in(...,....,....);表示一个非连续的范围。between ... and... ;表示一个连续的范围。
例如:SELECT * from students where age not BETWEEN 25 and 30 ; 年龄在25到30以外的记录。也可以这样写:SELECT * from students where age<25 or age>30;
空判断:例句:where card is null; //用is表示。
排序:
语法:select * from 表名 order by 字段1 asc | desc ,字段2 asc |desc,....
asc从小到大(升序),desc从大到小(降序)。默认情况下不给asc或desc,就是升序。
例句:select * from students order by age desc,studentNo;按年龄降序,若年龄相同,则按学号升序。再比如:SELECT * from students ORDER BY class ,studentNo DESC;
聚合函数(计数、求和):
聚合函数不能放在在where条件语句后中,而是放在select 后。
计数:语法:count(*);
例句:select count(*) from students where sex='女'; //查询学生是女生的学生数量。
最大值:max(*); 例如查询最大年龄,select max(age) from students;
求和:sum(*);例如:select sum(age) from students;
平均值:avg(*);例如:select avg(age) from students;
数据分组:
按字段分组,表示字段相同的数据放在同一个组中。group by 区别一下order by;
语法:select 字段1,字段2,聚合函数... from 表名 group by 字段1,字段2 ....
例如:SELECT sex,count(*) from students GROUP BY sex; 根据性别分别计数男,女的个数。
练习:用数据分组方法,统计各个班级学生总数,平均年龄、最大年龄、最小年龄。
分组后的数据筛选:
语法:select 字段1,字段2,聚合函数... from 表名 group by 字段1,字段2 .... having 字段1,....聚合... ; //搭配group by 使用的 having
练习:查询除了1班以外,其它各个班级学生的平均年龄、最大年龄、最小年龄。
注意:凡是关于查询“各个”,都是分组查询group by。这里还用到了筛选。
SELECT class,count(*),AVG(age),MAX(age),MIN(age) from students GROUP BY class having class!='1班'
练习:查询班级总人数大于2人的班级总称以及班级对应的总人数。
数据分页显示:
当数据量过大,通过此方法分页查看。(分成页数,只展示第几页这样。)
1.获取部分行。语法:select * from 表名 limit ,start,count ;从start开始获取count条数据,若省略start默认从0开始。例如:查看第三行开始的3条语句:SELECT * from students LIMIT 2,3;(因为默认从第0行开始,所以第三行是从数字2开始。)
2.分页!!!
语法:每页显示m条数据,查询第n页的数据。select *from students limit(n-1)*m,m;
例如:SELECT * from students LIMIT 8,4; 每页显示4条,查询第3页的数据。
多表进阶:
连接查询:对多个表进行查询。
分为内连接:只查询两个表共有的。左连接:只查询左表存在的数据。
内连接(inner join):
语法1: select * from 表1 inner join 表2 on 表1.字段 = 表2.字段.
例如: select * from students inner join score on students.stu = score.stu ;(查询students和score表stu编号相同的数据。) // inner join ... on ....
语法2:select * from 表1,表2 where 表1.字段 = 表2.字段 ;
上一个例子改写:SELECT * from students,scores where students.studentNo=scores.studentNo;
练习:查询学生信息,只显示姓名、课程号、成绩。(两个表students,scores)
练习:查询姓名为“王昭君”的信息,要求只显示姓名、课程号、成绩。
练习(三表):查询学生信息和成绩以及成绩对应的课程名称。(三表students.scores.courses)
解:SELECT * from students INNER JOIN scores on students.studentNo=scores.studentNo INNER JOIN courses on courses.courseNo = scores.courseNo;
练习:查询成绩最高的男生信息,要求显示姓名、课程名、成绩。(三表)
注意:max(scores.score)只能用于select之后,但是要求显示是select name,cousename,score。
故这里考虑使用排序,在最后面加上limit 1,只显示1位。
解:SELECT name,coursename,score from students INNER JOIN scores on students.studentNo=scores.studentNo INNER JOIN courses on courses.courseNo = scores.courseNo where students.sex='男' ORDER BY scores.score DESC LIMIT 1;
左连接(left join):
语法:select * from 表1 left join 表1.字段=表2.字段
例题:查询所有学生的信息以及成绩,包括没有成绩的学生。
select * from studetns left join scores on students.studentNo = scores.studentNo;
mysql数据库本身的一些命令:
选择数据库: use 数据库名称。退出mysql命令模式:exit;
创建数据库:create database 数据库名 default charset[默认字符集];
例如:create database mytest default charset utf8;
删除数据库:drop databse 数据库名.
显示已有数据库:show database;
增加新用户:
这个比较重要,在远程连接Linux服务器时会用得到。
用root身份登录mysql
语法: grant all on 数据库名.表名 to 用户名@‘登录主机’ identified by ‘密码’ with grant option;
grant all on代表为用户赋权; 数据库名可以是* ; 表名可以是*,代表所有表。
@ ‘localhost’ 代表只能在本机登录; @‘%’ ,代表可以远程登录。
with grant option 表示该用户是否能把权限分配给其它用户。
例如:创建一个root用户,可以操作所有数据库和表,该用户可以远程登录,密码为123456,该用户可以为其它用户分配权限。
grant all on *.* to root@'%' identified by '123456' with grant option;
使用navicat 连接虚拟机的linux:
之前都是参考别人的博客做的,有些做的要么是淘汰了,要么就多次一举了,接下来可以分析为什么别人那么做的了。
第一步:linux下载mysql,这一步基本上都只有一句:sudo apt-get install mysql-service。可以省略更新软件表(sudo apt-get update);然后使用mysql --version 验证版本即可。
第二步:开启Mysql服务: sudo service mysql start
第三步:打开 /etc/mysql/mysql.conf.d/ 目录下的 mysqld.cnf 文件,修改其中的 bind-address 参数,将其注释或改为0.0.0.0 。在重启MySQL服务:sudo service mysql restart
第四步(关键):使用 指令登录mysql命令模式。(到了这里就用到前面学的知识点了)
sudo mysql -u root -p;
登录mysql之后,
use mysql;
(进入到mysql这个数据库里,注意!mysql数据库和mysql软件是两回事。如果对这个有疑问,可以先用show datebase,可以看到默认情况下是存在mysql这个数据库的,一般默认下在mysql软件,都有默认的四个数据库。)
直接更新root用户的host字段,改为'%',即表示允许远程登录。
我看了不同的博客里面,有两种方式:
方式1:
update user set host ='%' where user ='root' and host='localhost';
//这里用了和运算符,因为默认情况下,root这个用户的host是‘localhost’。不用and也可以。
方式2:update user set host ='%' where user ='root'; //其实就是and可以省。
第五步:刷新。
flush privileges;
相关文章:

黑马测试mysql基础学习
视频来源:软件测试工程师所需的MySQL数据库技术,mysql系统精讲课后练习_哔哩哔哩_bilibili 环境准备: 虚拟机Linux服务器安装mysql数据库。本机安装Navicat。使Navicat连接虚拟机的数据库。(麻烦一点的是Navicat连接虚拟机的数据…...

ROS2-话题学习
强烈推荐教程: 《ROS 2机器人开发从入门到实践》3.2.2订阅小说并合成语音_哔哩哔哩_bilibili 构建功能包 # create package demo_python_pkg ros2 pkg create --build-type ament_python --license Apache-2.0 demo_python_pkg 自己写的代码放在./demo_python_pkg/…...
C++指针的基本认识
1.数组做函数参数 首先,所有传递给函数的参数都是通过传值方式进行的,传递给函数的都是参数的一份拷贝。 接着,当传递的参数是一个指向某个变量的指针时,函数将对该指针执行间接访问操作(拷贝指针,并访问所指向的内容),则函数就可以修改指向的变量。 2.一维数组 数组名…...
TypeScript系列06-模块系统与命名空间
1. ES 模块与 CommonJS 互操作性 1.1 模块解析策略 TypeScript 提供多种模块解析策略,每种策略针对不同的运行环境和开发场景优化: // tsconfig.json {"compilerOptions": {"moduleResolution": "node16", // 或 "…...
Linux(Centos 7.6)命令详解:zip
1.命令作用 打包和压缩(存档)文件(package and compress (archive) files);该程序用于打包一组文件进行分发;存档文件;通过临时压缩未使用的文件或目录来节省磁盘空间;且压缩文件可以在Linux、Windows 和 macOS中轻松提取。 2.命…...

es-使用easy-es时如何指定索引库
在对应的实体类中,通过注解IndexName指定。 如上图,指定的索引库就是problems,那么之后我使用easy-es时都是针对该索引库进行增删改查。...
Redis-主从架构
主从架构 主从架构什么是主从架构基本架构 复制机制的工作原理1. 全量复制(Full Synchronization)2. 部分复制(Partial Synchronization)3. PSYNC2机制(Redis 4.0) 主从架构的关键技术细节1. 复制积压缓冲区…...

Java数据结构第二十期:解构排序算法的艺术与科学(二)
专栏:Java数据结构秘籍 个人主页:手握风云 目录 一、常见排序算法的实现 1.1. 直接选择排序 1.2. 堆排序 1.3. 冒泡排序 1.4. 快速排序 一、常见排序算法的实现 1.1. 直接选择排序 每⼀次从待排序的数据元素中选出最小的⼀个元素,存放在…...

inkscape裁剪svg
参考https://blog.csdn.net/qq_46049113/article/details/123824888,但是上个博主没有图片,不太直观,我补上。 使用inkscape打开需要编辑的图片。 在左边导航栏,点击矩形工具,创建一个矩形包围你想要保留的内容。 如果…...
类加载器加载过程
今天我们就来深入了解一下Java中的类加载器以及它的加载过程。 一、什么是类加载器? 在Java中,类加载器(Class Loader)是一个非常重要的概念。它负责将类的字节码文件(.class文件)加载到Java虚拟机&#x…...

Git基础之基本操作
文件的四种状态 Untracked:未追踪,如新建的文件,在文件夹中,没有添加到git库,不参与版本控制,通过git add将状态变为staged Unmodify:文件已入库,未修改,即版本库中的文件…...
简单的 Python 示例,用于生成电影解说视频的第一人称独白解说文案
以下是一个简单的 Python 示例,用于生成电影解说视频的第一人称独白解说文案。这个示例使用了 OpenAI 的 GPT 模型,因为它在自然语言生成方面表现出色。 实现思路 安装必要的库:使用 openai 库与 OpenAI API 进行交互。设置 API 密钥&#…...

[Pycharm]创建解释器
仅以此文章来记录自己经常脑子抽忘记的地方 有时候我们在建好了一个项目以后,想要更换解释器。以新建conda解释器为例。 一、conda解释器 1.选择setting 2.选择Add Local Interpreter 3.type选则conda。如果你之前已经有了conda环境,和我一样选择了Gen…...
在 k8s中查看最大 CPU 和内存的极限
在 Kubernetes(k8s)中,你可以从不同层面查看最大 CPU 和内存的极限,下面为你详细介绍从节点和集群层面查看的方法。 查看节点的 CPU 和内存极限 节点的 CPU 和内存极限是指单个节点上可分配的最大资源量,可通过以下几…...

【Python】为什么要写__init__.py
文章目录 PackageA(__init__特性)应该往__init__.py里放什么东西?1、包的初始化2、管理包的公共接口3、包的信息 正常我们直接导入就可以执行,但是在package的时候,有一种__init__.py的特殊存在 引入moduleA.py,执行main.py&…...
【IPFS应用开发】IPFS播放器-上传助手
本系列文章是针对 https://blog.csdn.net/weixin_43668031/article/details/83962959 内容的实现所编写的。开发经历包括思考过程、重构和推翻重来。 基于IPFS的视频播上传助手发布 起源一、优势:二、劣势:三、未来展望:上传助手Demo版本发布公告欢迎体验!立即体验:http:/…...

单细胞多数据集整合和去除批次效应教程,代做各领域生信分析
单细胞多数据集整合和去除批次效应教程 每个数据集的数据分别单独进行读取单细胞数据构建Seurat分析对象 读取各种来源的单细胞数据构建Seurat分析对象的教程 做这一步的时候可以查看我这篇写的非常详细的教程文章: 【腾讯文档】单细胞分析步骤1读取各种来源格式…...
Windows控制台函数:移动光标位置函数SetConsoleCursorPosition()
目录 什么是 SetConsoleCursorPosition? 它长什么样? 什么是 COORD? 怎么用它? 它有什么用? 跟 C 标准库有什么不一样? 注意事项 再试一个有趣的例子 什么是 SetConsoleCursorPosition?…...
MyBatis-Plus 注解大全
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 MyBatis-Plus 注解大全 MyBatis-Plus 是基于 MyBatis 的增强工具,通过注解简化了单表 CRUD 操作和复杂查询的配置。以下是常用注解的分类及详细说…...

Redis基础之基础概念
NoSQL数据库的优点 1.直接减少CPU与IO压力,是直接通过内存来读取的 2.可以直接作为缓存使用,减少IO操作 如果我们在请求中需要来传递数据,使用NoSQL可以来进行数据的直接存储和读取,从而来减少CPU与IO压力 或者是如果一些数据较为…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...