MySQL 基础入门

写在前面

关于MySQL的下载安装和其图形化软件Navicat的下载安装,网上已经有了很多的教程,这里就不再赘述了,本文主要是介绍了关于MySQL数据库的基础知识。

MySQL数据库

MySQL数据库基础

MySQL数据库概念

MySQL 数据库: 是一个关系型数据库管理系统

支持SQL语句的数据库:

MySQL数据库; SQL Server数据库; Oracle数据库; Sybase数据库; DB2数据库; PostgreSQL数据库; 人大金仓数据库(国产)。

MySQL数据库的逻辑结构

在这里插入图片描述

计算机数据容量计算方式

1、1PB = 1024TB

2、1TB = 1024GB

3、1GB = 1024MB

4、1MB = 1024KB

5、1KB = 1024B

6、1B = 8bits(比特)

PB:拍字节,TB:太字节,GB:千兆字节;MB:兆字节,KB:千字节,B:字节

MySQL数据库的数据类型

整数类型 (bool、 int big int 浮点数类型 float double decimal 字符串类型 varchar text blob 日期类型 DateTime(年-月-日 时:分:秒) TimeStamp(时间戳) 其他数据类型 enum 等)

编写SQL语句的顺序,解释器编译SQL语句的顺序

编写SQL语句顺序与解释器编译SQL语句顺序(重点):

在这里插入图片描述
如上图所示,SQL语句的编写顺序为: Select distinct 字段名 from 表名 join 表名 on 连接条件 where 查询条件 group by 分组字段 having 分组条件 order by 排序条件 limit 查询位置 查询条数

编译器解释SQL语句的顺序为: from 表名 on 连接条件 join 表名 where 查询条件 group by 分组字段 having 分组条件 Select distinct 字段名 order by 排序条件 limit 查询位置 查询条数

exists与in、内表与外表的区别

内表与外表的区别

  1. 建表默认就是内表,如:create table 指定表名;
  2. external就是外表,如:create table external 指定表名;
  3. 删掉内表,HDFS(分布式文件系统)上的数据被删掉了;
  4. 删除外表,HDFS上的数据是存在的。

exists 与 in的区别

exists的效率比in查询要高,因为in不走索引。

in适合于外表数据量大而内表数据小的情况;exists适合于外表小而内表大的情况。

数据库常用命令

查看函数帮助的、查看警告的命令
  • 查看函数说明命令:help 函数名,如:help abs;----查看abs()函数帮助
  • 显示数据库警告的命令: show warnings
数据库常用的函数
  • avg(expression):返回字段expression的平均值;
  • max(expression): 返回字段expression中的最大值;
  • min(expression):返回字段expression中的最小值;
  • sum(expression):返回字段expression的总和;
  • count(expression): 返回字段expression的行数;
  • replace(string, from_string, new_string)string:原始字符串;from_string:要替换的子字符串;new_string:新的替换子字符串;
  • group_concat(expression):用于将group by产生的同一个分组中的值连接起来,返回一个字符串结果
  • user():返回当前用户名:select USER();
  • database(): 返回当前数据库名:select DATABASE();
  • version():返回数据库的版本号:select VERSION();
新建、选择、删除数据库与新建、显示、删除表的命令
  • 新建数据库命令create database 数据库名 character set utf8 collate utf8_general_ci;

注意:character set设置编码格式,collate校验编码格式

  • 选择数据库命令use 数据库名;

  • 删除数据库命令drop database 数据库名;

  • 新建表命令:create table 表名;

  • 显示表命令show tables;

  • 删除指定表的命令drop table 指定表名;

查看指定表的结构的命令
  • 查看表的字段与字段值命令describe 指定表名;
为指定表添加、修改、重命名、删除字段的命令
  • 为指定表添加一个字段alter table 指定表名 add 字段名 字段类型;

  • 为指定表修改字段类型alter table 指定表名 modify 字段名 字段类型;

  • 重命名指定表的字段alter table 指定表名 change 原字段名 新字段名 字段类型;

  • 为指定表删除字段alter table 指定表名 drop 字段名;

新建表并为表添加一条数据
  • 为指定表添加一条数据:insert into 指定表名(字段名1,字段名2,字段名3,字段名4)values(数据1,数据2,数据3,数据4);

使用MySQL语句的例子

自动插入录入时间

--新建一个自动记录时间的消息表
create table test_msg(   id int primary key auto_increment comment "主键",message longtext comment "消息",cre_time timestamp not null default current_timestamp comment "录入时间")comment="记录消息的表";-- 没有输入时间,会自动记录插入数据时系统时间
insert into test_msg(message) values("这是一个重大的新闻");
查询其他数据库的表
--编写一个查询其他数据库数据时数据的SQL语句
select from database_name.表名;-- 其中database_name不是当前选择的数据库
单表查询(重点)
-- 新建学生表并插入相应的数据
create table student(
s_id int(10) primary key default 0 comment'用户ID',
sname varchar(10) comment'用户姓名',
sex varchar(1) comment'用户性别',
age int(3) comment'用户年龄',
s_time DateTime comment'记录时间',
s_info longtext comment'用户简介'
)engine=InnoDB default charset=utf8;-- 查询学生表中所有数据
select * from student;
select s_id,sname,sex,age,s_time,s_info from student;-- 查询学生姓名为张浩的信息
select * from student where sname="张浩";
select * from student where sname in("张浩");-- 查询学生姓名,重复的不要显示
select distinct(sname) from student;-- 查询年龄为20-40的学生信息
select * from student where age between 20 and 40;
select * from student where age>=20 and age<=40;-- 查询以年龄进行(小到大,大到小)排序显示学生信息
-- 小到大排序:
select * from student where age order by age asc;-- 大到小排序:
select * from student where age order by age desc;-- 查询姓名以A开头、以A结尾、包含A、A开头并且后面跟一个字符的学生信息
-- A开头:
select * from student where sname like'A%';-- A结尾:
select * from student where sname like'%A';-- 包含A:
select * from student where sname like'%A%';-- A开头并且后面跟一个字符:
select * from student where sname like'A_';-- 查询性别不为女的学生信息
select * from student where sex not in ('女');
select * from student where sex !='女';-- 查询年龄是22、55岁的学生信息
select * from student where age in (22,55);
select * from student where age=22 or age=55;-- 查询年龄由小到大,在第二到第五的所有学生信息
select * from student where age order by age desc limit 1,4;-- 查询最新的学生信息
select * from student order by s_time desc limit 1;-- 查询相同年龄等于2的人数,并显示其姓名
select age as "年龄",count(age) as "人数",group_concat(sname) 
from student where age group by age having count(age)=2;-- 根据学生的年龄查询显示学生处于的年龄段
select * ,
case when t1.age between 0 and 18 then 'young'
when t1.age between 19 and 45 then 'middle'
else 'old' end as 'test_age' 
from student t1;-- 将李丽的年龄更新100岁
update student set sex='女',age="100" where s_id='97';-- 删除李丽的数据
delete from student where sname="李丽";-- 清除学生表所有的数据
truncate table student;
笛卡尔积

连接查询没有建外键时会出现笛卡尔积如集合A={a,b}, 集合B={1,2} 两个集合则为笛卡尔积 {(a,1),(a,2),(b,1),(b,2)}。

MySQL 的连接查询

左连接查询left join 表名 on 连接条件……-----左表全部保留,右表关联不上用null表示;

右连接查询right join 表名 on 连接条件……-----右表全部保留,左表关联不上的用null表示;

内连接查询inner join 表名 on- 连接条件join 表名 on 连接条件)……-----两表关联保留两表中交集的记录;

全连接查询左连接+ union all +右连接-----两表关联查询它们的所有记录;

三表查询(重点)

-- 创建员工表
create table employee(
id int primary key auto_increment,
name varchar(10) unique,
age int,
salary double,
check(salary>7000 and salary<=15000),
relation_department_name varchar(20));-- 创建部门表
create table department(
id int primary key auto_increment,
department_name varchar(20) unique,
department_person_num int);-- 创建项目表
create table project(
id int primary key auto_increment,
project_name varchar(20),
relation_department_name varchar(20));-- 1、要求-查询姓名为张三的员工,所在部门的名称、部门人数、关联项目的数量、关联项目的具体名称select t1.name as "姓名", t2.department_name as "部门名", 
t2.department_person_num as "部门人数",count(t3.project_name) as "关联项目个数",
group_concat(t3.project_name) as "关联项目名称"
from employee t1, department t2, project t3 
where t1.relation_department_name = t2.department_name 
and t2.department_name = t3.relation_department_name
and t1.name = "张三" group by t2.department_name,t2.department_person_num ;select t1.name as "姓名",t2.department_name as "部门名", t2.department_person_num as "部门人数",
count(t3.project_name) as "关联项目个数",group_concat(t3.project_name) as "关联项目名称"
from employee t1 left join department t2 on t1.relation_department_name = t2.department_name 
left join project t3 on t2.department_name = t3.relation_department_name
where t2.department_name is not null
and t3.relation_department_name is not null
and t1.name = "张三" group by t2.department_name,t2.department_person_num ;-- 2、要求-查询所有的员工,所在部门的人数与关联的项目数,具体项目的名称?select t1.name as "姓名",t2.department_person_num as "部门人数",
count(t3.project_name) as "关联项目个数",group_concat(t3.project_name) as "关联项目名称"
from employee t1, department t2, project t3 
where t1.relation_department_name = t2.department_name 
and t2.department_name = t3.relation_department_name
group by t1.name,t2.department_person_num ;select t1.name as "姓名",t2.department_person_num as "部门人数",
count(t3.project_name) as "关联项目个数",group_concat(t3.project_name) as "关联项目名称" 
from employee t1 left join department t2 on t1.relation_department_name = t2.department_name
left join project t3 on t2.department_name = t3.relation_department_name
where t2.department_name is not null
and t3.relation_department_name is not null
group by t1.name,t2.department_person_num ;-- 3、要求-查询出每个人工程师所在的部门、薪资、负责项目名称select t1.name as "姓名",t2.department_name as "部门名",t1.salary as "薪资",
group_concat(t3.project_name) as "关联项目名称"
from employee t1, department t2, project t3 
where t1.relation_department_name = t2.department_name 
and t2.department_name = t3.relation_department_name
group by t1.name,t1.salary;select t1.name as "姓名",t2.department_name as "部门名",t1.salary as "薪资",
group_concat(t3.project_name) as "关联项目名称"
from employee t1 left join department t2 on t1.relation_department_name = t2.department_name
left join project t3 on t2.department_name = t3.relation_department_name
where t2.department_name is not null
and t3.relation_department_name is not null
group by t1.name,t1.salary;-- 4、要求-查询出每个人工程师所在的部门、薪资、负责项目名称,并增加一个工资阶段财富类型字段select t1.name as "姓名",t2.department_name as "部门名",t1.salary as "薪资",
group_concat(t3.project_name) as "关联项目名称",case when t1.salary between 0 and 4000 then "低收入"
when t1.salary between 4001 and 8000 then "中收入"
else "高收入" end as "财富类型"from employee t1, department t2, project t3 
where t1.relation_department_name = t2.department_name 
and t2.department_name = t3.relation_department_name
group by t1.name,t1.salary;select t1.name as "姓名",t2.department_name as "部门名",t1.salary as "薪资",
group_concat(t3.project_name) as "关联项目名称" ,case when t1.salary between 0 and 4000 then "低收入"
when t1.salary between 4001 and 8000 then "中收入"
else "高收入" end as "财富类型"from employee t1 left join department t2 on t1.relation_department_name = t2.department_name
left join project t3 on t2.department_name = t3.relation_department_name
where t2.department_name is not null
and t3.relation_department_name is not null
group by t1.name,t1.salary;-- 5、要求-查询项目中学生管理系统最高薪资的工程师姓名、所在项目、薪资select t1.name as "姓名",t3.project_name as "项目名",t1.salary as "薪资"
from employee t1, department t2, project t3 
where t1.relation_department_name = t2.department_name 
and t2.department_name = t3.relation_department_name
and t3.project_name = "学生管理系统"
order by t1.salary desc limit 1;select t1.name as "姓名",t3.project_name as "项目名",t1.salary as "薪资"
from employee t1 left join department t2 on t1.relation_department_name = t2.department_name 
left join project t3 on t2.department_name = t3.relation_department_name
where t2.department_name is not null
and t3.relation_department_name is not null
and t3.project_name = "学生管理系统"
order by t1.salary desc limit 1;

MySQL视图

什么是视图

MySQL数据库视图:视图(View)是一种虚拟存在的表。

视图的特点

  • 视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系
  • 视图是由基本表(实表)产生的表(虚表)
  • 视图的建立和删除不影响基本表
  • 对视图内容的更新(增删改)直接影响基本表
  • 当视图来自多个基本表时,不允许添加、删除、更新数据。

视图的优缺点

优点:

1、安全:一些数据表有着重要的信息,有些字段是保密的,不能让用户直接看到;

2、性能:视图建立在服务器上,直接调用在服务器上运行,可以提高性能;

3、灵活:建立一张视图,视图中的数据直接映射到新建的表,这样,就可以少做很多改动,也达到了升级数据表的目的。

缺点:如果实际数据表的结构变更了,就需要及时对相关的视图进行相应的维护。

视图相关的SQL语句

  • 声明视图create view 视图名 as SQL查询语句;
  • 查看视图show tables;
  • 删除视图drop view 视图名;

MySQL存储过程

什么是存储过程

存储过程:是一组为了完成特定功能的SQL语句集合。

存储过程的优缺点

优点:

  1. 封装性:封装成一个没有返回值函数;
  2. 可增强SQL语句的功能和灵活性:针对特定的功能编写存储过程;
  3. 高性能:存储过程编写成功后,就存储在数据库服务器中,以后客户端可以直接调用,从而提高性能;
  4. 提高数据库的安全性:存储过程作为接口提供给外部程序,外部程序无法直接操作数据库表,可以提高数据安全性。

缺点: DBMS(DBMS是数据库管理系统)中的存储过程语法有所不同,所以可移植性差。

存储过程的语法

create procedure 存储过程名(in 参数名 参数类型,out 参数名 参数类型)  
-- in:表示输入,out:表示输出
begin
-- 实现功能的SQL语句(一般是查询语句的封装);
end;-- 调用存储过程:
call 存储过程名();-- 删除存储过程:
drop procedure 存储过程名;
-- 例子如下:-- 新建存储过程test_add:create procedure test_add(in a int,in b int,out c int)
begin
set c=a+b;
end-- 调用存储过程:
call test_add(2,3,@a);-- 查看输出
select @a;-- 删除存储过程:
drop procedure test_add;

MySQL 数据库导入导出

将表导出:

-- 将表test_csv导出到指定路径下面,导成csv类型文件select id,name from test_csvinto outfile 'D:/test_as/test(utf8).csv'character set utf8fields terminated by ',';-- 导入前可以先查看导入的路径:show variables like 'secure_file_priv';-- 将into outfile 'D:/test_as/test(utf8).csv'中路径改为对应路径-- character set utf8 表示字符编码为utf-8-- fields terminated by ','; 表明数据与数据直接用','分隔开

将表导入:

load data local infile 'D:/test_as/test(utf8).csv'into table test_csvcharacter set utf8fields terminated by ',';-- 将infile 'D:/test_as/test(utf8).csv'中路径改为对应路径-- character set utf8 表示字符编码为utf-8-- fields terminated by ','; 表明数据与数据直接用','分隔开

数据库整体导入导出(以Navicat为例):

  • 导出:右键数据库,选择“存储SQL文件”,选择对应的存储位置;
  • 导入:连接中新建数据,选中新建数据库右键“运行SQL文件”

MySQL 中事务的基本使用

事务概念:是一个操作序列,不可分割的工作单位,这些操作要么都执行,要么都不执行。

事务的语法:

1、beginstart transaction:显式地开启一个事务;

2、commitcommit work:提交事务,对数据库进行的修改是永久性的;

3、rollbackrollback work:回滚结束用户事务,并撤销正在进行的所有未提交的修改事务;

4、savepoint S1:在事务中创建一个回滚点(savepoint),一个事务中可以有多个回滚点,S1代表回滚点名称;

5、rollback to [savepoint] S1:把事务回滚到标记点,S1代表回滚点名称。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt中的多种输出方式,信号与槽的基本使用

完成Hello World可以通过很多控件实现 如采用编辑框来完成hello world 编辑框分为单行编辑框----QLineEdit 和多行编辑框---QTextEdit 采用单行编辑框&#xff0c;创建项目后&#xff0c;展开forms文件夹&#xff0c;双击ui文件进入 qt designer设计页面 找到line edit 拖到页…

英语表达年代和世纪

英语表达年代和世纪 1. Century (世纪)1.1. Start and end of centuries 2. Decade (年代)2.1. Usage 3. 英语表达年代和世纪4. HomeworkReferences XXX0 年代指 XXX0 年 - XXX9 年的连续 10 年&#xff0c;例如 1760 年代指 1760 年至 1769 年这连续 10 年。 XX 世纪 X0 年代…

MySQL数据库管理5

23.事务 1&#xff09;事务&#xff1a;可以认为是做一件事情 需要多个SQL 要么同时成功 要么同时失败 需求&#xff1a;银行转账update 你的账户 把你的钱减少update 你朋友的账户 把他的钱增多​这两个SQL不能只成功一个 要么都成功 要么都失败那么 我们就需要用到事务了 它…

闭包和装饰器

什么是闭包 闭包&#xff08;Closure&#xff09;是 Python 中一个非常重要的概念&#xff0c;它是一种特殊的函数对象&#xff0c;通常用于封装和延迟计算某些值。以下是闭包的详细定义和解释&#xff1a; 1.闭包的定义 闭包是指一个函数对象&#xff0c;它不仅包含函数的代…

notepad++8.6.4安装及细节

notepad8.6.4下载安装&#xff08;附安装包&#xff09; 一、安装包下载1.1方法一&#xff1a;官网下载&#xff08;点击跳转&#xff09;1.2方法二&#xff1a;网盘链接分享8.6.4版本 二、安装过程细节2.1这里的组件建议全部勾选。点击“下一步”。2.2 勾选①&#xff1a;可以…

COZE通关指南:工作流与插件开发

前言 本文隶属于专栏《AI Agent 通关指南》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见《AI Agent 通关指南》 正文 1. 平台基础介绍 🌟 1.1 COZE平台概述 COZE平台(coze.cn)是一个强大的AI应用开发平台…

【Block总结】ENLTransformerBlock,高效非局部变换器块|即插即用

1. 论文信息 标题: Perspective+ Unet: Enhancing Segmentation with Bi-Path Fusion and Efficient Non-Local Attention for Superior Receptive Fields论文地址: arXiv:2406.14052 2. 创新点 双路径编码策略: 在编码器阶段引入双路径策略,结合传统卷积和空洞卷积的结果,平…

【爬虫】网易云音乐评论数据爬取

文章目录 &#x1f356; 前言&#x1f3b6;一、抓取要求✨二、代码展示&#x1f3c0;三、运行结果&#x1f3c6;四、知识点提示 &#x1f356; 前言 【爬虫】网易云音乐歌词/评论数据爬取 &#x1f3b6;一、抓取要求 描述: 输入歌曲的id&#xff0c;获取对应歌曲的用户评论信…

C++使用Qt Charts创建数据可视化图表

Qt Charts 是一个强大的工具&#xff0c;用于创建直观的数据可视化图表。本文将通过一个具体的示例&#xff0c;展示如何使用 Qt Charts 创建一个包含多条数据序列、自定义坐标轴和随机数据生成的图表。 示例代码解析 以下是一个完整的示例代码&#xff0c;展示如何使用 Qt Ch…

TCP/IP五层协议

目录 1. 五层模型结构 2. 各层核心功能与协议 (1) 应用层&#xff08;Application Layer&#xff09; (2) 传输层&#xff08;Transport Layer&#xff09; (3) 网络层&#xff08;Network Layer&#xff09; (4) 数据链路层&#xff08;Data Link Layer&#xff09; (5…

【最新版】金媒婚恋系统v10.5最新稳定开源+原生前端小程序 PC端+安装教程

一.系统简介 1. 红娘服务 红娘服务模块是该系统的一大特色。专业红娘会通过分析用户的个人资料和偏好&#xff0c; 为用户提供精准的配对建议和个性化服务。用户可以预约红娘服务&#xff0c;通过红娘的介入&#xff0c;提升配对成功率。 2. 相亲活动 相亲活动模块用于组织和管…

吴恩达深度学习复盘(5)神经网络的前向传播TesorFlow与NumPy实现比对

数据结构差别 NumPy 和 TensorFlow 在数据表示上的差异展开&#xff0c;结合神经网络实践中的常见问题进行说明。以下是详细解析&#xff1a; 一、简介 数据表示的历史背景 NumPy 是 Python 科学计算的基础库&#xff0c;早期设计为处理多维数组TensorFlow 由 Google Brain 团…

多元高斯分布函数

1、 n n n元向量 假设 n n n元随机变量 X X X X [ X 1 , X 2 , ⋯ , X i , ⋯ , X n ] T μ [ μ 1 , μ 2 , ⋯ , μ i , ⋯ , μ n ] T σ [ σ 1 , σ 2 , ⋯ , σ i , ⋯ , σ n ] T X i ∼ N ( μ i , σ i 2 ) \begin{split} X&[X_1,X_2,\cdots,X_i,\cdots ,X_n…

洞察 Linux 进程管理

一、进程和线程的概念 1.进程 &#xff08;1&#xff09;概念 进程是程序在操作系统中的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位。进程是程序的执行实例&#xff0c;拥有独立的资源&#xff08;如内存、文件描述符等&#xff09;。每个进程在创建时会被…

PyTorch 实现图像版多头注意力(Multi-Head Attention)和自注意力(Self-Attention)

本文提供一个适用于图像输入的多头注意力机制&#xff08;Multi-Head Attention&#xff09;PyTorch 实现&#xff0c;适用于 ViT、MAE 等视觉 Transformer 中的注意力计算。 模块说明 输入支持图像格式 (B, C, H, W)内部转换为序列 (B, N, C)&#xff0c;其中 N H * W多头注…

每日一题(小白)字符串娱乐篇16

分析题意可以了解到本题要求在一串字符串中找到所有组合起来排序递增的字符串。我们可以默认所有字符在字符串中的上升序列是1&#xff0c;从第一个字符开始找&#xff0c;如果后面的字符大于前面的字符就说明这是一个上序列那么后面字符所在的数组加一&#xff0c;如果连接不上…

Ubuntu 22 Linux上部署DeepSeek R1保姆式操作详解(Xinference方式)

一、安装步骤 1.基础环境安装 安装显卡驱动、cuda&#xff0c;根据自己硬件情况查找相应编号&#xff0c;本篇不介绍这部分内容&#xff0c;只给出参考指令&#xff0c;详情请读者自行查阅互联网其它参考资料。 sudo apt install nvidia-utils-565-server sudo apt install…

Immutable.js 完全指南:不可变数据的艺术与实践

引言 在现代前端开发中&#xff0c;状态管理是一个核心挑战。随着应用复杂度增加&#xff0c;如何高效、安全地管理应用状态变得至关重要。Immutable.js 是 Facebook 推出的一个 JavaScript 库&#xff0c;它提供了持久化不可变数据结构&#xff0c;可以帮助开发者更好地管理应…

字符串数据类型的基本运算

任务描述 本关任务&#xff1a;从后台输入任意三个字符串&#xff0c;求最大的字符串。 相关知识 字符串本身是存放在一块连续的内存空间中&#xff0c;并以’\0’作为字符串的结束标记。 字符指针变量本身是一个变量&#xff0c;用于存放字符串的第 1 个字符的地址。 字符数…

Ubuntu 22.04 一键部署openManus

openManus 前言 OpenManus-RL,这是一个专注于基于强化学习(RL,例如 GRPO)的方法来优化大语言模型(LLM)智能体的开源项目,由来自UIUC 和 OpenManus 的研究人员合作开发。 前提要求 安装deepseek docker方式安装 ,windows 方式安装,Linux安装方式