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

这篇具有很好参考价值的文章主要介绍了MySQL(一)基本架构、SQL语句操作、试图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MySQL系列文章

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



前言

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


那关系型又是什么意思?
关系型数据库就是类似于excel表格,每一行每一列中的每一个单元都能在表格中找到相关联的数据。
整个库就像一张关系网。
例如:
MySQL(一)基本架构、SQL语句操作、试图,MySQL,mysql,架构,sql


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

tony:35
aries: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(一)基本架构、SQL语句操作、试图,MySQL,mysql,架构,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;

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

聚合查询

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

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

作用:文章来源地址https://www.toymoban.com/news/detail-570925.html

  • 可复用,减少重复语句书写;类似程序中函数的作用; 重构利器:
    (假如因为某种需求,需要将 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; 则只需要更改数据库结构,而不需要更改应用程序;)
    逻辑更清晰,屏蔽查询细节,关注数据返回;
  • 权限控制,某些表对用户屏蔽,但是可以给该用户通过视图来对该表操作;

到了这里,关于MySQL(一)基本架构、SQL语句操作、试图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql,用sql语句,建立学生-课程数据库基本表

    学生表 学号 姓名 年龄 性别 院系 Student Sno Sname Sage Ssex Sdept 课程表 课程号 课程名 先行课 学分 Course Cno Cname Cpno Ccredit 选课表 学号 课程号 成绩 SC Sno Cno Grade 注意创建表的时候要注意它的字段名,类型,长度,约束条件,取值范围要合适,大小写符号要正确,中文逗号,分号

    2024年02月08日
    浏览(59)
  • MYSQL实战45讲笔记--基础架构:一条SQL查询语句是如何执行的?

    MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层 :连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等

    2024年02月07日
    浏览(47)
  • 数据库应用:MySQL数据库SQL高级语句与操作

    目录 一、理论 1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL高级操作 5.MySQL中6种常见的约束 二、实验  1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL高级操作 5.主键表和外键表  三、总结 克隆表:将数据表的数据记录生成到新的表中。 (1)克隆表 ① 先创建再导入 ② 创建

    2024年02月13日
    浏览(81)
  • 基于Linux操作系统中的MySQL数据库SQL语句(三十一)

    MySQL数据库SQL语句 目录 一、SQL语句类型 1、DDL 2、DML 3、DCL 4、DQL 二、数据库操作 1、查看 2、创建 2.1、默认字符集 2.2、指定字符集 3、进入  4、删除 5、更改 6、练习 三、数据表操作 (一)数据类型 1、数值类型 1.1、TINYINT 1.2、SMALLINT 1.3、INT 1.4、BIGINT 1.5、FLOAT(M,D) 2、时间

    2024年02月15日
    浏览(68)
  • 一条SQL如何被MySQL架构中的各个组件操作执行的?

    简单用一张图说明下, MySQL 架构有哪些组件,接下来给大家用 SQL 语句分析 假如 SQL 语句是这样 SELECT class_no FROM student WHERE name = \\\'lcy\\\' AND age 18 GROUP BY class_no 其中 name 为索引,我们按照 时间顺序 来分析一下 客户端:客户端(如 MySQL 命令行工具、 Navicat 、 MySQL Workbench 或其他应

    2023年04月22日
    浏览(51)
  • 【Mysql】万字长文带你快速掌握数据库基础概念及SQL基本操作

    为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。 (博客的参考源码可以在我主页的资源里找到,如果在学习的

    2024年02月15日
    浏览(57)
  • [MySQL]SQL优化之sql语句优化

    🌈键盘敲烂,年薪30万🌈 目录 一、索引优化 回顾: 📕索引分类: 📕索引失效: 📕设计原则: 📕SQL性能分析 二、SQL优化 语句优化 📕 insert语句: 📕 主键优化: 📕 order by优化: 📕 group by优化: 📕 limit 优化 📕 count 优化 📕 update 优化  📕索引分类: 一般分类:主

    2024年02月04日
    浏览(43)
  • mysql(二)SQL语句

    目录 一、SQL语句类型 二、数据库操作  三、数据类型  四、创建  五、查看  六、更改  七、增、删、改、查  八、查询数据 SQL语句类型:     DDL         DDL(Data Definition Language,数据定义语言):用于定义数据库中的各种对象,包括数据库、表、视图、触发器等,常

    2024年02月16日
    浏览(53)
  • MySQL sql语句

    用户管理: 1、新建用户: CREATE USER name IDENTIFIED BY \\\'ssapdrow\\\'; 2、更改密码: SET PASSWORD FOR name=PASSWORD(\\\'fdddfd\\\'); 3、权限管理 SHOW GRANTS FOR name;    //查看name用户权限 GRANT SELECT ON db_name.* TO name; //给name用户db_name数据库的所有权限 REVOKE SELECT ON db_name.* TO name; //GRANT的反操作,去除权限

    2023年04月15日
    浏览(48)
  • MySQL- sql语句基础

    报错:You can’t specify target table ‘Person’ for update in FROM clause 原因:mysql不能在同一语句中先select出同一表中的某些值,然后对这个表做修改 错误写法 解决方法:添加临时表 正确写法 我们可以使用函数 GROUP_CONCAT() 将多行中的多个值组合成一个字符串。下面显示了 GROUP_CONC

    2024年02月12日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包