MySQL基础

SQL语言

        SQL(Structured Query Language,结构化查询语言)是一种专门用来与关系型数据库通信的编程语言。它被广泛用于创建、操作、查询和管理关系数据库中的数据。SQL 语言的功能包括数据查询、数据操作、数据定义和数据访问控制。

        SQL语言一般分为一下几种:

  • DQL:数据库查询语言。执行查询操作。
  • DML:数据库操作语言。执行增删改操作。
  • DDL:数据库定义语言。定义表,数据库或视图等。
  • DCL:数据库控制语言。管理用户权限。
  • TCL:事务控制语言。事务提交、回滚。

        我们主要讨论DML与DDL。也就是数据库的增删改查操作。

MySQL体系结构

        MySQL主要由连接池组件、管理服务和工具组件、SQL接口组件、查询分析器组件、优化器组件、缓冲组件、插件式存储引擎、物理文件组成。我们重点了解连接池及缓冲组件。

        对于数据库的连接,使用长连接是不明智的选择,因为我们主要进行增删改查操作,操作粒度较小,所以数据库一般使用短连接。MySQL内部使用连接池管理大量连接,也就是用一个主线程接收连接,用多个连接线程处理业务,使用select+阻塞IO。select只监听lisentfd的事件,MySQL的命令也是并发处理的。连接池用于鉴权、线程复用等。

        SQL接口将SQL语句解析生成相应对象,如DML、DDL、存储过程、视图等。

        解析器负责类似C++的语句分析,将DML或DDL进行分析,生成语法树。

        查询优化器则指定语句执行计划,不同的SQL语句有不同的执行方式,制定多个执行计划,根据磁盘状态选择最优计划。

         MySQL的缓冲组件就是一块内存区域用来做缓冲池,同计算机系统中的内存原理一样,为了加快访问速度,在读取页操作时会先将磁盘中读到的页放到缓冲池,下一次读到相同的页会先看这个页是不是在缓冲池,如果在就直接读,不在就读磁盘。淘汰机制使用LRU。但是MySQL8.0已经删除了缓存机制。

        存储引擎负责数据存储与查询,并且决定写入磁盘还是内存。主流的是InnoDB。

        一条select语句的执行流程如下:

三范式与反范式

        数据库的三范式是关系型数据库设计中的规范,旨在减少数据冗余和提高数据一致性。三范式的初衷是为了减小空间占用。

  • 第一范式:列不可分。确保每列保持原子属性,数据库表中的所有字段都是不可分解的。
  • 第二范式:依赖主键。确保表中的每列都和主键相关,而不能只与主键的某一部分相关。
  • 第三范式:直接依赖。确保每列都与主键直接相关,而不是简介相关,以减少数据冗余。

        虽然三范式给我们规范了表的设计,避免数据冗余,但是在实际业务逻辑中我们如果遇到表的数量越来越多的情况,就会有更多的联表查询,系统整体性能就降低了。这时候我们就需要进行反范式设计来减少联表查询。

CRUD

        这里仅介绍基础的CRUD,还有高级查询内容大家可以搜索完整的资料,那里会讲的比较全面。此处就不过多赘述了。否则就偏离本篇博客标题了。(作为一个c++人用得不多,并且我真的讨厌这种语言,我选择用AI,能看懂就行,太无聊了这玩意儿)。

创建数据库

create database `数据库名`;

删除数据库

drop database `数据库名`;

选择数据库

use `数据库名`;

约束

  • 非空约束:not null
  • 自增约束:auto_increment
  • 唯一约束:unique
  • 主键约束:primary
  • 外键约束:foreign

创建表

create table `表名` (列名 列属性);

刪除表

drop table `表名`;//一般在跑路的时候用。

清空表数据

truncate table `表名`;//删除表数据,其他保留。以页(16k,至少两行数据)为单位删除。
delete table `表名`;//删除部分或全部数据(条件删除),其他保留。逐行删除。

drop与truncate无法进行事务回滚,通常在服务器停机维护时才用。

增删改查

//增
insert into `表名`(`字段1`,`字段2`,...)values(value1,value2,...)()()...;
//删
delete from `表名` [where Clause];
//改
update 表名 set field1=new_value1,field2=new_value2 [,fieldn=new_valuen];
//查
select field1,field2,...fieldN from 表名 [where Clause];

视图

        视图就是一张虚拟逻辑表,本身不包含数据,内容由查询定义。

create view 视图名 as <select语句>;

  • 17
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值