Mysql:数据库

Mysql

  • 一、数据库概念?
  • 二、MySQL架构
  • 三、SQL语句分类
  • 四、数据库操作
    • 4.1 数据库创建
    • 4.2 数据库字符集和校验规则
    • 4.3 数据库修改
    • 4.4 数据库删除
    • 4.4 数据库备份和恢复
    • 其他
  • 五、表操作
    • 5.1 创建表
    • 5.2 修改表
    • 5.3 删除表
  • 六、表的增删改查
    • 6.1 Create(创建):数据新增
      • 1)普通插入
      • 2)插入否则更新
      • 3) 替换方式二:replace
    • 6.2 Retrieve(读取)
      • 1)WHERE条件
    • 2) 筛选分页结果
    • 6.3 Update(更新)
    • 6.4 Delete(删除)
    • 6.5 插入查询结果
  • 七、mysql聚合函数
  • 八、查询分类
    • 1)多表查询
    • 2)自连接
    • 3) 子查询
    • 4)合并查询

一、数据库概念?

 mysql是一套基于CS模式,给我们一个提供数据存取服务的网络程序。日常口语中的数据库其实是指在磁盘或内存中存储的特定组织结构的数据。
 存储数据最常见的方式就是直接用文件存储。但文件存储存在诸多缺陷:

  1. 安全性问题!普通文件没有权限约制,数据可以随意被访问,存在数据安全问题。
  2. 文件不利于海量数据的查询和管理。比如需要在100万数据中查找主机ip为198.1.1.0的ip地址的个数。对于文件而言需要程序员将文件打开,然后按行遍历、判断、统计等工作。非常麻烦,效率低下。 但对于数据库而言,数据库本质其实就是一套对数据内容存取的一套解决方案。程序员将相关字段和要求传给数据库即可,数据库会将结果直接反馈呈现给程序员!
  3. 文件在程序中不方便控制。文件系统缺乏事务管理、并发控制等机制,难以保证数据的一致性和完整性。MySQL架构

 宏观上数据库是指:数据库客户端、服务端以及数据库文件。而口语中思的数据库指数据在磁盘上存取的一套解决方案(create databases创建出来的数据库)
在Linux中,数据库本质就是/var/lib/mysql目录下的一个目录文件,而建表本质就是该该目录下的一些普通文件。

二、MySQL架构

 第一层主要解决连接和安全问题。第二层类似于编译器主要进行词法分析、语法分析、以及mysql语句优化。第三次为各种存储引擎,是真正和OS系统进行交换,实现功能的。
 存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法(show engines;查看)

在这里插入图片描述

三、SQL语句分类

 sql语言分为以下3类:

  1. 数据定义语言(DDL),用于维护存储数据的结构。代表指令:createdrop
  2. 数据操纵语言(DML),用来对数据进行操作。代表指令:insertdeleteupdate
  3. 数据控制语言(DCL),主要负责权限管理和事务。代表指令: grantrevokecommit

四、数据库操作

4.1 数据库创建

 指令:create database [if not exists] db_name [charset = xxx] [collate = xxx];

  • charset (或character set):数据库字符集,数据库存储数据的编码格式!
  • collate :数据库校验集,数据库将数据读取出来时所采用的编码格式!

4.2 数据库字符集和校验规则

作用指令
查看系统默认字符集show variables like 'character_set_database';
查看系统默校验规则show variables like 'collation_database';
查看数据库支持的字符集show charset;
查看数据库支持的校验规则show collation;

4.3 数据库修改

 指令:alter database db_name [charset = xxx] [collate = xxx];

  • 数据库的修改主要是对数据库的字符集和校验规则进行修改,但需要保证修改后的字符集和校验规则匹配,否则数据的存储或读取可能出现乱码。

4.4 数据库删除

 指令:drop database db_name [if not exists];

  • 数据库的创建本质就是在/var/lib/mysql下创建的目录文件,而数据库删除的本质就是该目录文件被删除。
  • 数据库删除后,对应的数据库文件夹被删除,级联删除,里面的数据表全部被删。

4.4 数据库备份和恢复

作用指令样例
数据库备份mysqldump -P3306 -u root -p -B 数据库名 > 文件路径mysqldump -P3306 -u root -p123456 -B mytest > mytest.sql
数据库恢复source 文件路径;source D:/mysql-5.7.22/mytest.sql;
备份表mysqldump -u root -p 数据库名 表名1 表名2 > mytest.sql;
备份多个数据库mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
  • 如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据
    库,再使用source来还原。

其他

  • 查看连接情况指令:show processlist;

五、表操作

5.1 创建表

CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
  • field指明表结构的列名,datatype指明列名类型。
  • 对于字符集、校验规则、存储引擎如果没有显示指定,默认采用表所在的数据库相关属性。

5.2 修改表

 修改表的结构有,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我以及添加字段,删除字段等等。

作用指令样例
添加字段alter table tablename add [field datatype] [,field datatype]....;在原有表结构基础上,即birthday列之后添加assets 列:alter table users add assets varchar(100) comment '图片路径' after birthday;
删除字段alter table tablename drop (column);删除name列: alter table users dropname ;
修改字段类型alter table tablename modify [field datatype] [,field datatype]....;将name属性修改为60: alter table users modify name varchar(60);
修改表名alter table 旧命 rename to 新名
对某列进行重命名alter table tablename xxx name xxx alter table employee change name xingming varchar(60); --新字段需要完整定义

5.3 删除表

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...

六、表的增删改查

6.1 Create(创建):数据新增

1)普通插入

insert into table (需要插入数据的类名) values (插入数据);

多行数据 + 指定列插入:

INSERT INTO students (id, sn, name) VALUES
(102, 20001, '曹孟德'),
(103, 20002, '孙仲谋');

2)插入否则更新

由于 主键 或者 唯一键 对应的值已经存在而导致插入失败。所以可以选择性的进行同步更新操作语法:

指令:INSERT ... ON DUPLICATE KEY UPDATE column = value [, column = value] ...

实例:

// 向students表中插入数据,不存在直接插入。如果发送冲突,则执行UPDATE 之后的语句进行数据更新
INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大师')
ON DUPLICATE KEY UPDATE sn = 10010, name = '唐大师';Query OK, 2 rows affected (0.47 sec)
-- 0 row affected: 表中有冲突数据,但冲突数据的值和 update 的值相等
-- 1 row affected: 表中没有冲突数据,数据被插入
-- 2 row affected: 表中有冲突数据,并且数据已经被更新

3) 替换方式二:replace

指令:REPLACE INTO students ...
实例:

-- 主键 或者 唯一键 没有冲突,则直接插入;
-- 主键 或者 唯一键 如果冲突,则删除后再插入REPLACE INTO students (sn, name) VALUES (20001, '曹阿瞒');
Query OK, 2 rows affected (0.00 sec)-- 1 row affected: 表中没有冲突数据,数据被插入
-- 2 row affected: 表中有冲突数据,删除后重新插入

6.2 Retrieve(读取)

SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...
  1. DISTINCT关键字用于对结果去重。
  2. WHERE 后接筛选条件
  3. ORDER BY:按照指定列进行排序,ASC升序, DESC降序。
  4. LIMIT :输出结果显示限制

1)WHERE条件

在这里插入图片描述

在这里插入图片描述

2) 筛选分页结果

-- 起始下标为 0-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;--0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

6.3 Update(更新)

UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]
  • 将查询到的结果进行更新。如果后面没有筛选条件,则表面对整表进行操作。

6.4 Delete(删除)

删除查到的数据: DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
截断表:TRUNCATE [TABLE] table_name;

  • delete只是对数据进行删除,表结构依然存在。
  • truncate截断不走事物,不会对日志进行操作(记录删除操作),所以速度更快。但由于不经过事物,所以无法归滚。
  • truncate会重置AUTO_INCREMENT 项,而delete不会!

6.5 插入查询结果

INSERT INTO table_name [(column [, column ...])] SELECT ..

实例:对表进行重命名

// 创建表和新增数据
CREATE TABLE duplicate_table (id int, name varchar(20));
INSERT INTO duplicate_table VALUES (100, 'aaa'), (100, 'aaa');//创建一张空表 no_duplicate_table,结构和 duplicate_table 一样
CREATE TABLE no_duplicate_table LIKE duplicate_table;//将 duplicate_table 的去重数据插入到 no_duplicate_table
INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table// 通过重命名表,实现原子的去重操作
RENAME TABLE duplicate_table TO old_duplicate_table, no_duplicate_table TO duplicate_table;
  1. 最后通过rename进行,目的在于该操作是原子的,等一切都做好后,进行统一放入、更新、生效。

七、mysql聚合函数

 聚合函数是先将数据查询到后,在进行聚合。聚合时必须保证数据是可以被聚合的。
在这里插入图片描述
执行顺序样例:
在这里插入图片描述

八、查询分类

1)多表查询

 多表查询是指对多张表进行笛卡儿积,然后通过内链接on或where筛选出我们需要的表。
在mysql中,不仅仅物理磁盘上存在的表结构叫表,中间筛选出来的,以及最终结果也是逻辑上的表。也可以直接将其重命名后直接当作单独的表使用,即Mysql下一切皆表!
在这里插入图片描述

2)自连接

自连接是指在同一张表连接查询!

 自连接的典型使用场景就是:一张表中保存公司所有人员的id以及上级id。现在需要查找某个员工的上级领导名字,那我们会使用自连接。

3) 子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。子查询可以跟在where和from后面。

4)合并查询

  • union:该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。但需要保证两个结果的字段必须一样。

实例:将工资大于2500或职位是MANAGER的人找出来
在这里插入图片描述

  • union all: 该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。
    在这里插入图片描述

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

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

相关文章

2024年12月 Scratch 图形化(二级)真题解析 中国电子学会全国青少年软件编程等级考试

202412 Scratch 图形化(二级)真题解析 中国电子学会全国青少年软件编程等级考试 一、单选题(共25题,共50分) 第 1 题 小猫初始位置和方向如下图所示,下面哪个选项能让小猫吃到老鼠?( ) A. B. …

开工了,搬砖了!

今天是正月初八,正式搬砖了。地铁还是空荡荡的,显然很多小伙伴春节假期还没有结束。往年上班时间也是正月初十左右,每次看到身边的人都返程了,心理总有些许不安,就好像人只有忙碌起来才显得生命和时间都是可贵的&#…

gesp(C++六级)(13)洛谷:P11375:[GESP202412 六级] 树上游走

gesp(C六级)(13)洛谷:P11375:[GESP202412 六级] 树上游走 题目描述 小杨有一棵包含无穷节点的二叉树(即每个节点都有左儿子节点和右儿子节点;除根节点外,每个节点都有父节点)&#…

51单片机看门狗系统

在 STC89C52 单片机中,看门狗控制寄存器的固定地址为 0xE1。此地址由芯片厂商在硬件设计时确定,但是它在头文件中并未给出,因此在使用看门狗系统时需要声明下这个特殊功能寄存器 sfr WDT_CONTR 0xE1; 本案将用一个小灯的工作状况来展示看门…

HTML排版标签、语义化标签、块级和行内元素详解

目录 前言 一、HTML中的排版标签 1. 文本相关标签 1.1 标题标签 ~ 1.2 段落标签 1.3 强调和加粗 1.4 换行标签 1.5 水平线标签 二、HTML中的语义化标签 2.1 语义化标签概述 2.2 常见的语义化标签 示例(核心代码部分): 三、HTM…

20250205——Windows系统基于ollama的DeepSeek-R1本地安装

1、安装ollama 1.1 Windows系统 打开ollama官网链接Download Ollama on Windows,根据自己的系统下载安装包,如果是Windows系统,下载Windows版本。 1.1 Linux系统 (这个是因为运行遇到报错了,想自己记录一下解决方法&a…

DeepSeek R1 x ApiSmart

根据美国业界的说法:如果一个模型能够在生成良好代码方面表现更出色,那么通常它也能对非代码生成类型的其他用户查询产生更好的答案。 在AI编程领域,市面上已有多款大模型和工具供我们选择。常见的有OpenAI系列模型、Claude 3.5 Sonnet&#…

解决threeJS加载obj gltf和glb模型后颜色太暗的方法

网上找到的部分解决方法 网上找到的部分解决方法 咱们有时候去glb官方下载glb或gltf模型时候,模型显示太黑 其实通过查找后不难发现网上给出了很多解决方法,但是大部分都无法从根本上解决问题。我之前看到有一篇文章对gltf的解决方法是让gltf增加自发光…

GitHub Copilot 越狱漏洞

研究人员发现了两种操控 GitHub 的人工智能(AI)编码助手 Copilot 的新方法,这使得人们能够绕过安全限制和订阅费用、训练恶意模型等。 第一种技巧是将聊天交互嵌入 Copilot 代码中,利用 AI 的问答能力,使其产生恶意输…

动态规划练习八(01背包问题)

一、问题介绍与解题心得 01背包问题就是每个物品数量只有一个,每个物品可以取或不取,来达到收益最大,或者收益在某个值。 限制条件:背包容量有限,物品个数只有1个 解决问题:从价值入手(价值最…

Java实习生面试题汇总

Java实习生面试题汇总 简介 本人是二本大三学生,下半年大四。暑假在上海这边找实习工作,面了几家公司,所问到的问题记录在下面。 因为是在校生,没任何实习经历,一般找我面试的都是小公司,一般问的比较简…

开源安全一站式构建!开启企业开源治理新篇章

在如今信息技术日新月异、飞速发展的数字化时代,开源技术如同一股强劲的东风,为企业创新注入了源源不断的活力,然而,正如一枚硬币有正反两面,开源技术的广泛应用亦伴随着不容忽视的挑战。安全风险如影随形,…

xxl-job 自定义告警短信发送

官方介绍 代码实现 实现 JobAlarm 重写 doAlarm 方法 Component public class SmsJobAlarm implements JobAlarm {Overridepublic boolean doAlarm(XxlJobInfo info, XxlJobLog jobLog) {boolean alarmResult true;// 简单内容,根据业务自行修改String template …

大数据学习之Spark分布式计算框架RDD、内核进阶

一.RDD 28.RDD_为什么需要RDD 29.RDD_定义 30.RDD_五大特性总述 31.RDD_五大特性1 32.RDD_五大特性2 33.RDD_五大特性3 34.RDD_五大特性4 35.RDD_五大特性5 36.RDD_五大特性总结 37.RDD_创建概述 38.RDD_并行化创建 演示代码: // 获取当前 RDD 的分区数 Since ( …

【分布式架构理论3】分布式调用(2):API 网关分析

文章目录 一、API 网关的作用1. 业务层面:简化调用复杂性2. 系统层面:屏蔽客户端调用差异3. 其他方面: 二、API 网关的技术原理1. 协议转换2. 链式处理3. 异步请求机制1. Zuul1:同步阻塞处理2. Zuul2:异步非阻塞处理 三…

3.【BUUCTF】XSS-Lab1

进入题目页面如下 好好好&#xff0c;提示点击图片&#xff0c;点进去页面如下&#xff0c;且url中有传参&#xff0c;有注入点 发现题目给出了源码 查看得到本题的源码 分析一下代码 <!DOCTYPE html><!--STATUS OK--> <!-- 声明文档类型为 HTML5&#xff0c;告…

uniapp小程序自定义中间凸起样式底部tabbar

我自己写的自定义的tabbar效果图 废话少说咱们直接上代码&#xff0c;一步一步来 第一步&#xff1a; 找到根目录下的 pages.json 文件&#xff0c;在 tabBar 中把 custom 设置为 true&#xff0c;默认值是 false。list 中设置自定义的相关信息&#xff0c; pagePath&#x…

105,【5】buuctf web [BJDCTF2020]Easy MD5

进入靶场 先输入试试回显 输入的值成了password的内容 查看源码&#xff0c;尝试得到信息 什么也没得到 抓包&#xff0c;看看请求与响应里有什么信息 响应里得到信息 hint: select * from admin where passwordmd5($pass,true) 此时需要绕过MD5&#xff08;&#xff09;函…

JVM监控和管理工具

基础故障处理工具 jps jps(JVM Process Status Tool)&#xff1a;Java虚拟机进程状态工具 功能 1&#xff1a;列出正在运行的虚拟机进程 2&#xff1a;显示虚拟机执行主类(main()方法所在的类) 3&#xff1a;显示进程ID(PID&#xff0c;Process Identifier) 命令格式 jps […

【大模型】AI 辅助编程操作实战使用详解

目录 一、前言 二、AI 编程介绍 2.1 AI 编程是什么 2.1.1 为什么需要AI辅助编程 2.2 AI 编程主要特点 2.3 AI编程底层核心技术 2.4 AI 编程核心应用场景 三、AI 代码辅助编程解决方案 3.1 AI 大模型平台 3.1.1 AI大模型平台代码生成优缺点 3.2 AI 编码插件 3.3 AI 编…