文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL(一)基本架构、SQL语句操作、试图

2023-08-16 14:51

关注

MySQL系列文章

MySQL(一)基本架构、SQL语句操作、试图
MySQL(二)索引原理以及优化
MySQL(三)SQL优化、Buffer pool、Change buffer
MySQL(四)事务原理及分析
MySQL(五)缓存策略
MySQL(六)主从复制
数据库三范式



前言

MySQL是关系型数据库。数据库就是用来保存数据的。


那关系型又是什么意思?
关系型数据库就是类似于excel表格,每一行每一列中的每一个单元都能在表格中找到相关联的数据。
整个库就像一张关系网。
例如:
在这里插入图片描述


那非关系型数据库又是什么?
非关系型数据库就类似于redis这种,用键值来存储。类似于哈希表数据结构。可以想象,键值对存储中的每个存储数据之间是没有关联的。
例如:

tony:35aries:18

一、MySQL网络结构

MySQL分为服务端和客户端。我们安装好MySQL需要启动服务端,然后用客户端连接。当然可以多个客户端连接一个MySQL服务端。因此客户端和服务端连接就涉及到网络通信。而MySQL 网络架构通常是指服务端实现的网络架构,因为要与多个客户端连接,所有需要考虑到并发的场景。
Mysql网络的主要处理方式是IO多路复用 select + 阻塞的 io;select只监听listenfd,不会管连接线程的读写。select是跨平台的,mysql可以在Linux和windows下运行;
而redis(使用epoll)只能在Linux下运行,在windows中使用的是用select替换的,并且windows没有fork子线程,功能不全。

二、一条SQL语句经历的步骤

一条SQL语句在服务端经历的步骤还是比较复杂:
首先经历连接器(建立,管理连接,校验用户信息)然后通过查询缓存,查到直接命中,没查到会继续运行然后sql语句被分析器语句分析,语法分析,生成语法树;经过优化器选择最优的执行步骤;通过执行器根据执行计划,从存储引擎获取数据,并返回客户端。
在这里插入图片描述

三、MySQL操作

insert

INSERT INTO `table_name`(`field1`, `field2`, ...,`fieldn`) VALUES (value1, value2, ..., valuen);//例如INSERT INTO test_db (id, name, age) VALUES ("3", "lihua", 27);

删除数据的三种方式:drop,truncate,delete速度依次降低

DROP TABLE `table_name`;//删除整张表,包括索引,约束,触发器等(不能回滚)TRUNCATE TABLE `table_name`;//删除表数据,以以页为单位删除;其他保留(不能回滚)DELETE TABLE `table_name`;//删除部分或全部数据,逐行删除,其他保留(条件删除)可以回滚

SELECT field1, field2,...fieldN FROM table_name[WHERE Clause]

UPDATE table_name SET field1=new_value1,field2=new_value2 [, fieldn=new_valuen]

高级查询

高级查询主要了解分组查询和聚合查询

分组查询

即增加条件判断:
1.where condition
2.group by column having condition

-- 分组加group_concat| id | name   | gender | age ||----|--------|--------|-----|| 1  | Alice  | Female | 20  || 2  | Bob    | Male   | 22  || 3  | Charlie| Male   | 21  || 4  | Dave   | Male   | 23  || 5  | Eve    | Female | 19  |SELECT `gender`, group_concat(`age`) FROM `student` GROUP BY `gender`;//以gender分组,将同组的age合并起来组成一个年龄字符串| gender | group_concat(age) ||--------|---------------------|| Female | 20,19                || Male   | 22,21,23             |-- 分组加条件(having的条件可以用select中本条命令查到的,而where做不到)SELECT `gender`, count(*)  FROM as num `student` where num > 6;

————————————————

聚合查询

在这里插入图片描述

SELECT sum(`num`) FROM `score`;

多表联合查询

分为内联查询和外联查询
内联:inner join,只取两张表有对应关系的记录

//从两个名为"course"和"teacher"的表中获取课程ID和对应的教师ID。假设"course"表中有以下数据:| cid | name        | teacher_id ||-----|-------------|-----------|| 1   | Calculus    | 101       || 2   | Physics     | 102       || 3   | Chemistry   | 103       || 4   | Computer Science | 105 || 5   | Biology     | 104       |"teacher"表中有以下数据:| tid | name      ||-----|-----------|| 101 | Smith    || 102 | Johnson  || 103 | Lee      || 104 | Davis    |SELECT cid FROM `course` INNER JOIN `teacher` ON course.teacher_id =teacher.tid;| cid ||-----|| 1   || 2   || 3   || 5   |

外联:分为left join和 right join;在内连接的基础上保留左表/右表没有对应关系的记录

假设"course"表中有以下数据:| cid | name        | teacher_id ||-----|-------------|-----------|| 1   | Calculus    | 101       || 2   | Physics     | 102       || 3   | Chemistry   | 103       || 4   | Computer Science | 101 || 5   | Biology     | 104       |"teacher"表中有以下数据:| tid | name      ||-----|-----------|| 101 | Smith    || 102 | Johnson  || 103 | Lee      |
SELECT course.cid teacher.name FROM `course` LEFT JOIN `teacher` ON course.teacher_id =teacher.tid;| cid | name    ||-----|---------|| 1   | Smith   || 2   | Johnson || 3   | Lee     || 4   | Smith   || 5   | NULL    |
SELECT course.cid teacher.name FROM `course` RIGHT JOIN `teacher` ON course.teacher_id =teacher.tid;| cid | name    ||-----|---------|| 1   | Smith   || 4   | Smith   || 2   | Johnson || 3  | Lee     |

四、视图

视图( view )是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。其内容由查询定义。

视图只做select查询,不做增删改(虽然可以做,但是一般不用,限制比较多)。在工作项目中:比如一个充值表,我只给你一个视图,不会给你表,你就没法修改这个核心资源。只能查,不能改。

作用:

  • 可复用,减少重复语句书写;类似程序中函数的作用; 重构利器:
    (假如因为某种需求,需要将 user 拆成表 usera 和表 userb来查询;如果应用程序使用 sql 语句: select * from user 那就会提示该表不存在;若此时不直接拆表,而创建视图 create view user as select a.name,a.age,b.sex from usera as a, userb as b where a.name=b.name; 则只需要更改数据库结构,而不需要更改应用程序;)
    逻辑更清晰,屏蔽查询细节,关注数据返回;
  • 权限控制,某些表对用户屏蔽,但是可以给该用户通过视图来对该表操作;

来源地址:https://blog.csdn.net/weixin_44477424/article/details/131736109

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯