黑马测试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压力 或者是如果一些数据较为…...

Django小白级开发入门
1、Django概述 Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。 Django 框架的核心组件有: 用于创建模型的对象关系映射为最终用户设计较好的管理界面URL 设计设计者友好的模板…...

热图回归(Heatmap Regression)
热图回归(Heatmap Regression)是一种常用于关键点估计任务的方法,特别是在人体姿态估计中。它的基本思想是通过生成热图来表示某个关键点在图像中出现的概率或强度。以下是热图回归的主要特点和工作原理: 主要特点 热图表示: 每个关键点对应一个热图,热图中的每个像素值…...

SpringSecurity认证授权完整流程
SpringSecurity认证流程:loadUserByUsername()方法内部实现。 实现步骤: 构建一个自定义的service接口,实现SpringSecurity的UserDetailService接口。建一个service实现类,实现此loadUserByUsername方法。…...

MongoDB用户管理和复制组
用户管理 1、建用户时,use到的库就是此用户的验证库 2、登录时必须明确指定验证库才能登录 3、通常管理员用的验证库是admin,普通用户的验证库一般是所管理的库设置为验证库 4、如果直接登录到数据库,不进行use(示例ÿ…...

【Android】setText调用导致的悬浮窗抖动问题
在Android13中,有这么一个bug,写一个可以拖到的悬浮窗,这个悬浮窗里有TextView,在拖到某个位置后,再调用TextView的setText方法,会发现出现了一个窗口动画,悬浮窗跳到了起始位置,从开…...

【从零开始学习计算机科学】数字逻辑(四)数字系统设计
【从零开始学习计算机科学】数字逻辑(四)数字系统设计 数字系统设计硬件描述语言 HDL(Hardware Description Language)Verilog HDL 的起源与发展HDL 软核、固核和硬核的重用HDL 的应用数字系统设计实现数字系统设计 一个数字集成电路的可以从不同的层次(系统级、算法级、…...

QT 作业 C++ day5
作业 代码 MyQThread.h class MyThread : public QThread {Q_OBJECT public:MyThread(QObject *parent nullptr); protected:void run() override; signals://向ui界面发送的 "复制进度" 的信号void copy_process_signal(int index); public slots:// "复…...

洛谷 P2234:[HNOI2002] 营业额统计 ← STL set
【题目来源】 https://www.luogu.com.cn/problem/P2234 【题目描述】 Tiger 最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger 拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析…...

植物神经功能紊乱检查不出来,浑身难受?
植物神经功能紊乱,又称为自主神经功能失调,是一种功能性神经症,它涉及身体多个系统的不规则反应,通常没有器质性病变作为基础。这意味着,尽管患者可能会体验到多种症状,如焦虑、紧张、心悸、疲劳、失眠等&a…...

vue3 遇到babel问题(exports is not defined) 解决方案
由于我在引用ant-design-vue插件,于是产生了下图的问题。 1.问题分析 Babel 是一个 JavaScript 编译器,主要用于:将 ES6 代码转译为 ES5 代码,以兼容旧版浏览器。处理模块化语法(如 import/export)。 2.解…...