当前位置: 首页 > news >正文

【MySQL】超详细-基础操作

 数据库定义

数据库是一类软件,用来管理数据,组织数据;

  • 关系型数据库MySQL(Oracle,SQL Server,SQLite)以表格形式组织数据,数据格式要求严格;
  • 非关系型数据库Redis(MongoDB,HBase)以键值对/文档形式组织数据,数据格式较松散,性能高,运用在分布式场景中;
  • 多维数据库:essbase;
  • 分布式数据库:DB2是IBM开发的一种大型关系型数据库平台;
  • (在软件开发领域中,经典结论:没有银弹)

 MySQL基本结构

MySQL的基本结构:客服端-服务端 结构的程序

客户端(client):发出请求的一方

服务端(server):被动接受请求一方

请求(request):客户端主动给服务端发的数据

响应(response):服务端给客户端返回数据

服务器的基本特点:

1:7*24小时运行(引用分布式系统,做高可用支持);

2:服务器是不知道客户端什么时候给他发请求,服务器是被动的一方;

3:服务器(负责存储和管理数据,是数据库的本体)可以给多个客户端(和用户交互的界面)提供服务;

(服务器本质就是一台电脑(计算机);

计算机怎么构成的:

CPU(中央处理器),

主板(一块大的电路板,cup装在上面),

内存,硬盘 ->负责存储数据的,

电源,散热器,机箱,

显卡(GPU 专门负责图形渲染相关的计算的,最贵的),

显示器,鼠标,键盘;

存储数据:

1:内存->存储空间较小,访问速度较快,成本高,数据易失(断电数据丢失);

2:硬盘->存储空间较大,访问速度较慢(速度比内存慢速度慢好几个数量级,一个数量级就是10倍),成本低,数据持久(断电数据不会丢失,持久是相对的,并不是永久存在);

  • 硬盘分类:机械硬盘,固态硬盘(固态硬盘比机械硬盘快一个数量级);
  • 外存:外存是一个“统称”,硬盘只是典型代表,还有U盘,软盘,光盘;
  • CPU:中央处理器,用于各种逻辑判断和算术运算(CPU是人类当前科技领域的巅峰之作,能相提并论的就是氢弹)是通用运算芯片;
  • 显卡(GPU是专用计算芯片,专门用来计算图形图像,GPU速度比CPU快;
  • 显存:显存就是专门给显卡使用的内存(平时内存是给CPU使用的,为了不冲突,会在显卡上单独焊上内存单元);
  • AI:显卡用于AI领域中;

MySQL数据库存储数据,数据存储在硬盘(空间大,持久化存储)上;

Redis是将数据存储在内存上,很特殊*;

大数据:一个机器存不了的数据,使用多个机器来存储,这个操作数据的一系列技术体系叫做大数据;

数据库的基本操作

SQL是大小写不明感的,写成大写或者小写都可以;

各种命名名称不能是SQL中的关键字-〉如果非要使用,可以使用反引号进行引起来;

一个汉字占几个字节-〉这是不确定的,要根据字符集(GBK使用2个字节表示一个汉字,UTF8变长编码,一般是3个字节表示一个汉字);

❓误删数据库

  • 控制好权限,MySQL支持丰富的权限配置功能,根据账号限制权限;

  • 备份,重要的数据多备份几份;

线上数据:表示真实的用户数据;

线下数据:用来测试的数据,数据是假的;

直观基本操作(简单)

1:show databases; 查看现有的数据库

2:create database 数据库名;创建数据库

3:create database 数据库名 charset 字符集名;创建数据库指定字符集

4:use 数据库名;选中数据库

5:drop database 数据库名;删除数据库

额外补充知识点(实际工作)

2_26

线上环境/生产环境

一、线下环境

1:办公环境-〉开会,做PPT,发邮件,写日报周报,软件聊天;

2:开发环境-〉

  • 简单项目,开发环境就是办公环境;

  • 项目对环境要求较高,公司会发单独的服务器,通过办公电脑连到服务器上开发;

3:测试环境-〉类似于开发环境

二、线上环境

1:生产环境-〉

  • 程序会放到上面,就可以被外面用户真实访问到,如果用户访问量比较大,对于配置比较高;

  • 在生产环境上的程序出现bug了,会被外面的用户直接访问到;

  • 把写好的程序发布到生产环境上,这个过程成为“上线”;

  • 上线是一个非常重要的操作,“误操作”引出的生产环境的问题;

编程语言体系-〉“武当”,“少林”

C(代码好理解,代码好写,不保证代码的正确性);Lisp(更好的能保证代码的正确性,代码不好理解,代码不好写,思考能力极强);

MySQL中的数据类型

1:数字

bit 1

tinyint 1

smallint 2

int 4

bigint 8

float(m,d) 4 (m表示长度,d表示小数位数)

double(m,d) 8

decimal(m,d) m/d最大值+2(要最大值)

numeric(m,d) m/d最大值+2

  • float和double不能精确存储小数,所以避免在金钱,计算机科学前使用;

  • decimal和numeric是能够精确存储小数的,但是需要消耗的空间和时间更多;

慎重使用 浮点数 比较相等-〉0.1+0.2=0.3 false

2:字符串

varchar(自定义可存放最大值) 可变长的字符串类型,varchar的单位是“字符”,而不是字节,一个汉字就是一个字符;

text 长文本数据,长度靠自适应的,会自动扩容,但是实际开发中会明确数据存储的上限;

mediumtext 更长文本数据,和text一样,谨慎使用;

blob 存储二进制数据,指的是(图片,音频,视频,可执行程序,.class文件),谨慎使用;

3:时间

datetime 8 1000到9999年,不会进行时区的检索及转换;

timestamp 4 1970到2038,自动检索当前时区并转换;

4:null

null-〉数据库中的null表示“这个单元格没填”

MySQL核心操作(增、查、改、删 -> 详细)

🦠create table 表名(列名 类型,列名 类型,....);创建表

🦠desc 表名;查看表结构(desc-〉describe描述;在查询有一个desc-〉descend下降)

🦠drop table 表名;删除表(不仅删除了表,还删除了表中的数据)

MySQL中的注释#和-- (两横杠加一空格)

额外补充知识点(类型)

强类型和弱类型-〉

  • 越支持隐式类型转换的是弱类型,越不支持的是强类型(隐式类型转换就是不需要写代码就就能自动转换类型的);

静态类型和动态类型-〉

  • 一个变量的类型,能否在程序运行过程中发生改变。允许发生改变,就是动态类型;不允许发生改变的就是静态类型;

1:新增

insert into 表名 values (值,值,...);

insert into 表名 (列名,列名...) values (值,值...);

insert into 表名 values(值,值...),(值,值...);

insert into 表名 (列名,列名...) values (值,值...);

MySQL中有一个专门的函数now()来获取当前系统时间;

sql作为一个编程函数,提供了一些库函数;

时间加入的标准是:“2024-3-2 16:01:00”

2:查询

select * from 表名;全列查询(select*是一个危险操作,实际工作中,生产环境上要慎用)

select 列名,列名... from 表名;指定列的查询(列名必须存在于要查的表中)

(select只是查询,是读操作,不会影响数据库服务器硬盘上存储的数据)

(decimal限制的是硬盘上的数据,而不是临时表的数据,临时表能够尽可能保证最终计算结果是正确的)

1:select*from 表名;全列查询

2:select 列名,列名 from 表名;指定列查询

3:select distinct 列名 from 表名;去重查询(distinct)

4:select 列名,列名+列名 as 重命名 from 表名;计算查询

5:select * from 表名 order by 列名/表达式;排序查询(order by)默认升序排序

select * from 表名 order by 列名/表达式 desc;降序排序(descend)

❓在SQL中进行算术运算,如果其中某个操作数,结果是null,那么最后结果也是null。(我对这个定义还有一点疑问❓)

6:select * from  表名 order by 列名1,列名2...;order by指定多个列排序(先按照列名1排序,如果列名1有相同的就按列名2排序...)

7:select * from 表名 order by 列名1,列名2 desc...;按列名1升序排序,按列名2降序排序...

8:👍select 列名,列名... from 表名 where 条件;

  • 条件-〉逻辑运算符,关系运算符;

  • “=”,就表示“等于”的意思。null不安全,例如:null=null结果是null。null和其他的值进行关系运算还是null,相当于false;

  • “〈=〉”,表示“等于”的意思。使用null是安全的,例如:null〈=〉null结果是true(1);

  • between a1 and a2,范围在[a1,a2]之间返回true(1);

  • in(值1,值2....)相当于是一个集合,判断这个值是不是在这个集合里;

  • is null 是null;is not null 是不为null;

  • and就是(&&)

  • or就是(||)

  • not就是(!)

where和order by可以结合使用,where在前,order by在后;

and的优先级比or优先级高;

超详细查询

1:select * from 表名;全列查询

2:select 列名,列名... from 表名;指定查询

3:select 表达式 from 表名;带有表达式的查询

4:select 表达式 as 别名 from 表名;带有别名的查询(表达式查询只影响临时表)

5:select distinct 列名 from 表名;去重查询

6:select 列名 from 表名 order by 列名/列名 desc;排序查询

7:select 列名 from 表名 where 条件;条件查询

8:select 列名 from 表名 列名 like “x%”;模糊查询

  • 慎用like(🔥)

  • “x%”以x开头;“%x”以x结尾;“%x%”包含x;

  • “x_”x开头,_表示一个字,“x__”x开头,__表示两个字;

9:针对空值的查询,〈=〉(可以通过两个列比较)、is null、is not null;

10:分页查询(🌶️)

  • select * from 表名 limit 值;查询的值小于等于值(此处是offset 0)

  • select * from 表名 limit 值1 offset 值2;查询跳过值2的数据,查出小于等于值1的条数(offset表示的是偏移量)

  • select * from 表名 limit 值1,值2;值1是offset,值2是最大条数

3:修改

1:update 表名 set 列名 = 值,列名 = 值... where 条件;

update修改的是硬盘上存储的数据,select修改的是临时表上的数据;

4:删除

1:delete from 表名 where 条件;删除的都是以行为维度进行删

2:delete from 表名;删除表中所有数据

一个sql的执行顺序

1:遍历表

2:带入条件

3:计算列名中的表达式(定义别名)

4:排序/聚合 等操作

编程中谈到区间,区间都是前闭后开;

数据库的约束

约束可以理解为,数据库提供的一种针对数据的合法性,验证的机制;

1:not null

  • 设定not null,说明列里不能存储空值,表里内容必填

2:unique

  • 这定这一列的所有行的数据都得是唯一的(不能重复)

3:default

  • 指定默认值,当不进行任何指定,默认值就是null

4:primary key

  • 主键:一条记录的身份标识(类似于 学号/身份证 = not null + unique)

5:foreign key

  • 外键涉及到两个表之间的关系

6:check

  • 指定条件,插入/修改数据,数据符号才能插入/修改成功

相关文章:

  • 栈与队列力扣经典例题20. 有效的括号1047. 删除字符串中的所有相邻重复项150. 逆波兰表达式求值
  • 【Go】探索Go语言接口类型:强类型与灵活性的完美结合
  • java实现大文件的分割与合并
  • 你适合学Python吗?学了Python可以做什么工作?
  • webpack5基础--05_处理图片资源
  • 灵魂指针,教给(二)
  • hivesql和sparksql排序问题详解
  • 【Godot4自学手册】第二十节增加游戏的打击感,镜头震颤、冻结帧和死亡特效
  • [C语言]——分支和循环(4)
  • 【E3S独立出版】2024年第二届绿色建筑国际会议(ICoGB 2024)
  • 重学SpringBoot3-WebMvcAutoConfiguration类
  • 使用 Docker 部署 MrDoc 在线文档管理系统
  • BUUCTF---[MRCTF2020]你传你呢1
  • 【CSS】(浮动定位)易忘知识点汇总
  • Ant Design Vue 修改Model弹框 样式不生效
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • AHK 中 = 和 == 等比较运算符的用法
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • java取消线程实例
  • Leetcode 27 Remove Element
  • Mac转Windows的拯救指南
  • PAT A1050
  • Rancher-k8s加速安装文档
  • Spring Boot MyBatis配置多种数据库
  • 从setTimeout-setInterval看JS线程
  • 从伪并行的 Python 多线程说起
  • 代理模式
  • 如何合理的规划jvm性能调优
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 说说动画卡顿的解决方案
  • 原生js练习题---第五课
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (52)只出现一次的数字III
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (论文阅读30/100)Convolutional Pose Machines
  • (五)网络优化与超参数选择--九五小庞
  • (转)【Hibernate总结系列】使用举例
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)iOS字体
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • ***利用Ms05002溢出找“肉鸡
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .Mobi域名介绍
  • .NET 8.0 中有哪些新的变化?
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET 中 GetProcess 相关方法的性能
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET中使用Protobuffer 实现序列化和反序列化