【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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值