数据库(部分讲解)

存取数据的演变史

文本文件

  • 文本文件有两个主要的缺点:

    ​ 第一个就是不能保证多用户存取的文件路径一致

    ​ 第二个就是不能保证多用户存取的数据格式一致

软件开发目录规范

  • 软件开发目录规范了数据文件的大致存储位置:

    ​ db文件夹;但是针对数据格式还是没有完全的统一

数据库服务(重点)

  • 统一路径 统一操作方式

    降低学习成本 提高开发效率

数据库软件应用史

单机模式

  • 在不同计算机上的相同程序,数据是无法共享,因为数据库服务全部在本地完成

网络游戏

  • 在不同计算机上的相同程序,数据可以共享,因为数据库服务单独在网络架设(远程数据库服务)

数据库的本质

  • 数据库三字在不同角度下描述的意思是不一样的,当我们不做特殊说明的情况下提供数据库其实都是在指数据库软件,我们也称数据库软件本质上是一款C/S架构的应用程序,言外之意所有的程序员理论上都可以编写(市面上已经有很多数据库软件)

站在底层原理角度

数据库指的是专用于操作数据的进程
eg:运行在内存中的代码

站在实际应用的角度

数据库指的是拥有操作界面的应用程序
eg:用于操作进程的界面

数据库的分类

  • 数据库分为:关系型数据库和非关系型数据库

关系型数据库

特征1:数据的组织方式有明确的表结构(字段名 字段类型)
	eg:id name password
    ps:关系型数据库存取数据的方式可以看成是表格
特征2:数据之间可以建立数据库层面关系
	eg:用户表数据 豪车表数据 豪宅表数据
    ps:只要获取到某一表的一条数据,就可以获取到与之相关的其他表数据
3.常用的关系型数据库:MySQL、PostgreSQL、MariaDB、Oracle、sqlite、db2、sq1、server
    1.MySQL:是开源的,使用最为广泛的,数据库学习必须要学习的
    2.Oracle:收费 使用成本较高但是安全性也最高
    3.PostgreSQL:是开源的,支持二次开发,兼容性极高
    4.MariaDB:跟MySQL是一个作者 开源免费
    5.sqlite:小型数据库 主要用于本地测试(django框架自带该数据库)

非关系型数据库

特征1:数据的组织方式没有明确结构,是以k:v键值对的形式组织的
    eg:{'name': 'jason', 'pwd': 123}
        {'username': 'kevin'}
特征2:数据之间无法直接建立数据库层面的关系
    ps:可以直接编写代码建立逻辑层面的关系
3.常用的非关系数据库:redis、mongoDB、memcache
    redis:是目前最火的,使用频率最高的缓存型数据库
    mongoDB:文档型数据库,最像关系型的非关系型,主要用于爬虫、大数据
    memcache:已经被redis淘汰
  • 总结:虽然数据库软件有很多 但是存在方式都差不多 学会了一个几乎就可以学会所有

    ​ 其中MySQL最为典型

  • 数据库的架构可以大致区分为三个概括层次:内层、概念层和外层

MySQL

Mysql介绍

  • mysql是一款Oracle公司出口的轻量级数据库软件,广泛应用于互联网场景,同时也是目前最主流的数据库

Mysql的优点

Mysql相对于文件系统,优点如下:

  1. mysql的结构相对于文件系统更方便管理
  2. mysql支持各种编程语言
  3. mysql比文件系统支持更大规模的数据
  4. mysql更具备扩展性
  5. mysql数据能更快的检索
  6. mysql支持分布式

版本问题

  • 8.x:最新版

  • 5.7:使用频率较高

  • 5.6:学习推荐使用

  • ps:站在开发的角度使用哪个版本学习都没有关系

下载流程

  1. 访问官方网址
    2.点击DOWNLOADS并点击GPL
    image
    image
    3.点击community server
    image
    4.点击Archives
    image
    5.选择对应系统的对应版本下载即可(zip压缩包)
    image
    把下载好的文件拖到桌面进行解压即可
    image

主要目录介绍

  • bin目录
存放启动文件
   	mysqld.exe(服务端)	mysql.exe(客户端)
  • data目录
存放核心数据
	my-default.ini(默认的配置文件)
	readme(软件说明)

MySQL基本使用

cmd建议你使用管理员身份打开
image
1.切换到mysql的bin目录下先启动服务端

mysqld

image
2.保持窗口不关闭 重新打开一个新的cmd窗口
3.切换到mysql的bin目录下启动客户端

mysql

image
'''直接使用mysql命令默认是游客模式 权限和功能都很少'''

管理员账户登录

管理员默认是没有密码的 连续回车即可
image
mysql -u用户名 -p密码

常见报错解决方案

1.localhost上的mysql无法连接

报错代码:

ERROR 2003 (HY000):Can’t connect to MySQL server on 'localhost' (10061)

报错原因:

① 很明显,localhost本机是存在的;但是它却没有提供mysql的服务供给使用

② 检查磁盘空间是否还有剩余可用空间,尽量保持有足够的磁盘空间可用

③ 查看mysql的负载能力,可能存在mysql的负载过高我们连接不上;一般是看processlist来看下具体线程和连接数运行情况:
       
       1、show processlist只能列出当前100条,我们可以看到所有用户的连接情况
       
       mysql> show processlist;
        +----+-----------------+-----------+------+---------+-------+------------------------+------------------+
        | Id | User            | Host      | db   | Command | Time  | State                  | Info             |
        +----+-----------------+-----------+------+---------+-------+------------------------+------------------+
        |  4 | event_scheduler | localhost | NULL | Daemon  | 30404 | Waiting on empty queue | NULL             |
        | 14 | root            | localhost | NULL | Query   |     0 | starting               | show processlist |
        +----+-----------------+-----------+------+---------+-------+------------------------+------------------+
        2 rows in set (0.00 sec)
       
       2、查看全部的链接情况
       
       mysql> show full processlist;
        +----+-----------------+-----------+------+---------+-------+------------------------+-----------------------+
        | Id | User            | Host      | db   | Command | Time  | State                  | Info                  |
        +----+-----------------+-----------+------+---------+-------+------------------------+-----------------------+
        |  4 | event_scheduler | localhost | NULL | Daemon  | 30527 | Waiting on empty queue | NULL                  |
        | 14 | root            | localhost | NULL | Query   |     0 | starting               | show full processlist |
        +----+-----------------+-----------+------+---------+-------+------------------------+-----------------------+
        2 rows in set (0.00 sec)
        
# 注意,针对以上查看结果进行详细字段说明:

① Id 当用户登录mysql时,系统会为用户分配一个"connection_id",可以使用函数connection_id()来查看:
    mysql> select connection_id();
    +-----------------+
    | connection_id() |
    +-----------------+
    |              14 |  -- 系统分配的id14
    +-----------------+
    1 row in set (0.01 sec)

② User 展示当前链接用户

③ Host 连接mysql的ip地址;可查到来源端口,同时可以跟踪出现问题语句的用户

④ db   连接数据库的名称

⑤ Command 当前链接执行的命令;query(查询)、sleep(休眠)、connect(连接)、daemon(守护进程)

⑥ Time  当前连接持续时长,单位时间是秒

⑦ State 展示当前连接的sql语句状态

⑧ Info 展示sql语句,对用来判断sql语句是否有问题很重要

问题解决方案:

① mysql未启动,则启动即可:

    mac端:brew services start mysql   mysql.server start 
    centos端: systemctl start mysqld.service    service mysql start
    其他:找到执行文件根目录执行 启动也ok

2.localhost/IP地址连接不上

报错代码:

➜  ~ mysql -uroot -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

报错原因:

① 概述:用户root访问localhost/IP被拒绝访问

② 一般是数据库的用户名或者密码跟服务器上mysql设置的不一致,导致匹配失败

问题解决方案:

# 注意解决步骤:

① 查看mysql配置文件

② 查看 mysql 配置文件加载顺序

③ 修改配置文件跳过权限验证(skip-grant-tables)

④ 登录mysql客户端修改密码
  • 总结:遇到报错不要慌,拷贝报错信息,然后百度搜索

系统服务的制作

1.bin目录添加到环境变量

image

image
image
清空之前打开所有的cmd窗口 一定要把之前的cmd启动的服务端关闭,快捷键(ctrl+c)

2.将mysql添加到系统服务

  • 如何查看系统服务
    第一种方法:打开设置,搜索任务管理器,点击服务即可查看
    image
    第二种方法:cmd输入services.msc回车即可查看
    image
  • 以管理员身份打开cmd窗口
    image

3.首次添加不会自动启动 需要人为操作一下

  • 方式1:鼠标右键点击启动
  • 方式2:命令行启动
    输入:net start mysql
    image

如果想卸载重新安装

cmd窗口
1.先关闭服务端
net stop mysql
2.移除系统服务
mysqld --remove

密码相关操作

修改密码

  • 方式1:mysqladmin
    先输入下列指令:
    mysqladmin -u用户名 -p原密码 password 新密码
  • 方式2:直接修改存储用户数据的表
    select * from mysql.user\G
    这种方式需要先登录才能修改
    \G读取的内容出现格式错乱,跟上\G后可以一行行展示文件内容
  • 方式3:冷门操作 有些版本可能还不支持
    set password=password('新密码')

忘记密码

  • 方式1:卸载重新装

  • 方式2:把data目录删除 拷贝他人的目录

  • 方式3:小把戏操作
    关闭正常的服务端
    net stop mysql
    image
    以跳过授权表的方式重启服务端(不校验密码)
    mysqld --skip-grant-table
    image
    重新开一个cmd窗口
    以管理员身份进入然后修改mysql.user表数据即可
    mysql -uroot -p
    image

    update mysql.user set password=password('123') where Host='localhost' and User='root';
    最后一行的代码的作用是设置root账号的密码为123
    image
    关闭服务端 然后正常方式启动即可

SQL与NoSQL

  • 数据库服务端是可以服务多种类型的客户端,客户端可以是自己开发的,也可以是python代码编写,也可以是java代码编写,但是这样就导致了数据库服务端操作会变得复杂。

  • SQL和NoSQL就相当于是数据库服务端规定了客户端操作服务端的数据时需要使用的语言。

SQL(操作关系型数据库的语言)

  • SQL结构化查询语言是一种数据库操作的非过程式编程语言,用于存取数据以及查询、更新和管理关系型数据库系统,一般脚本文件后缀为.sql

NoSQL(操作非关系型数据库的语言)

  • NoSQL泛指非关系型数据库,主要用于针对超大规模和高并发的社交SNS类型网站的解决方案

    ps:要想跟数据库交互就必须使用数据库指定的语言。

  • 总结:SQL有时候也指代关系型数据库

    NoSQL有时候也指代非关系型数据库

数据库重要概念

什么是数据库服务器

  • 运行有DBMS服务端的计算机,该计算机对内存和硬盘要求都相对较高

什么是数据库管理系统

管理数据的套接字软件,CS架构

记录 数据
文件夹 文件 文件夹里面的文件中一行行代码 事物的状态

验证指令

查看所有的库名称 查看所有的表名称 查看所有的记录
show databases; show tables; select * from mysql.user;

基本SQL语句

注意事项

  • sql语句必须以分号结尾
  • sql语句编写错误之后不用担心 可以直接执行报错即可

基于库的增删改查指令

创建库 查看库 编辑库 删除库
create database 库名; show databases; 查看所有的库名称 alter database 库名 charset='utf8'; drop database 库名;
show create database 库名; 查看指定库信息

基于表的增删改查

​ 操作表之前需要先确定库
​ create database db1;
​ 切换操作库
​ use db1;

  • 创建表
    create table 表名(字段名 字段类型,字段名 字段类型);
  • 查看表
    show tables; 查看库下所有的表名称
    show create table 表名; 查看指定表信息
    describe 表名; 查看表结构
    desc 表名;
    ps:如果想跨库操作其他表 只需要在表名前加库名即可
    desc mysql.user;
  • 编辑表
    alter table 表名 rename 新表名;
  • 删除表
    drop table 表名

基于记录的增删改查

插入数据 查询数据 编辑数据 删除数据
insert into 表名 values(数据值1,数据值2); select * from 表名; 查询表中所有的数据 update 表名 set 字段名=新数据 where 筛选条件; delete from 表名;
delete from 表名 where id=2;
posted @   吴仁耀  阅读(169)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
  1. 1 原来你也在这里 周笔畅
  2. 2 世间美好与你环环相扣 柏松
  3. 3 起风了 吴青峰
  4. 4 极恶都市 夏日入侵企划
极恶都市 - 夏日入侵企划
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 王星

作曲 : 灰鸿啊/皮皮

编曲 : 夏日入侵企画

制作人 : 邢硕

节奏吉他 : 肯尼

主音吉他 : 张伟楠

贝斯 : 皮皮

鼓 : 海鑫

和声 : 邢硕

音效制作 : 邢硕

录音 : 邢硕/夏国兴

混音 : 于昊

特别鸣谢 : 张伟楠

这城市的车流和这地表的颤抖

像一颗石子落入地心之后泛起的温柔

暗涌

河水流过转角她的楼

被梦魇

轻声呓语唤醒身后的幼兽

失效感官焦灼只剩下

麻木愚钝无从感受

共同支撑全都瓦解

只是我们现在都

已忘记到底是

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去陈旧的还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

眼看这情节开始变旧

所有的城池已失守

最终无法占有

无眠辗转

伴着人间破碎的旧梦

像繁星

退却后只剩下混沌的夜空

炙热

掩盖风声鹤唳的担忧

把所有失落无助反手推入

无尽的白昼

失效感官焦灼只剩下

麻木愚钝无从感受

共同支撑全都瓦解

只是我们现在都已经忘记到底是

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

眼看这情节开始变旧

所有的城池早已失守

惶恐难以接受

缠绵往复不肯放手

最终无法占有

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁 灭 即 拯 救

谁掠夺春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

明知城池已失守

缠绵往复不肯放手

最终无法占有

点击右上角即可分享
微信分享提示