# 1.文本文件 这个时候每个人的存取数据 路径不一致: C:\a.txt D:\aaa\b.txt E:\ccc.txt 数据格式不一致: jason|123 tony$123 kevin~123 # 2.软件开发目录规范 这个时候每个人的存取数据有了一定规范 规定了数据文件的大致存储位置:db文件夹 针对数据格式还是没有完全统一:比如统一json文件 但是里面的键值对不同 # 3.数据库服务 统一可存取位置 也统一了数据格式
# 单机游戏 单机游戏的服务端和客户端都在本地上 当你在自己的计算机玩游戏的数据保存下来时 想去其他人的计算机上完这款单机游戏是没有你的数据的 因为别人的计算机上的服务端没有你的游戏数据 所以不同的计算机相同的程序 数据无法共享 所以单机游戏就是把 服务端和客户端都下载到本地上 都在自己的计算机上 # 网络游戏 网络相当于游戏厂商只把客户端给我们下载 然后服务端还是在他们手上 然后我们的游戏数据就是存储到他们的服务端上 我们拿数据和存数据就从他们的服务端上操作 这样你的游戏账号在不同计算机上登入相同的游戏 数据都不会改变 所以不同的计算机相同的程序 数据就可以共享了 数据库服务单独在网络上架设(远程数据库服务) ''' 但是如果只有一个服务端的话有点不安全, 如果这个服务端突然着火、断电、外力损坏那么只有一个服务端的话 里面的数据就会全部丢失 还有一个服务端的负载时有限的 不能就只让一个服务端服务上万甚至上亿人 所以我们可以备份、多弄几个服务端 而多个服务端就会组成一个数据库集群 ''' """ 远程数据库服务、 数据库集群 1.数据安全性问题 2.服务器负载问题 让多台服务器运行相同的数据库服务 """
''' 数据库在三种不同角度下描述的意思是不一样的 1.站在底层原理的角度 数据库指的是专用用于操作数据的进程 eg:运行在内存中的代码 2.站在现实应用的角度 数据库指的是拥有操作界面的应用程序 eg:用于操作进程的界面 ''' 我们在不做特殊说明的情况下提数据库其实都是在指数据库软件 我们也可以称数据库软件本质是一款CS架构的应用软件 所以所有的程序员理论上都可以编写>>>现在市面上已经有很多的数据库软件
# 1.关系型数据库 1.数据的组织方式有明确的表结构 id name pwd ps:关系型数据库的存取数据方式可以看成是一个表格 2.表与表之间可以建立数据库层面的关系 eg: 用户表 房屋表 就是在房屋表中可以通过某个字段知道是哪个用户 ps:就是如果获取到用户表的一条数据 就可以获取到与之相关的其他表数据 关系型数据库的软件有: MySQL、PostgreSQL、MariaDB、Oracle、sqlite、db2、sqlserver MySQL:开源 使用最为广泛 学习数据库必学 PostgreSQL:开源 支持二次开发 MariaDB:开源 与MySQL是同一个作者 用法也极其相似 Oracle:收费 安全性极高 主要用于 银行级各大重要机关 sqlite:小型数据库 主要用于本地测试(django框架自带该数据库) # 2.非关系型数据库 1.数据的组织方式没有明确的表结构 是一K:V键值对的形式组织的 eg:{'name':'jason'} {'name':'jason','pwd':123} 2.数据直接无法直接建立数据库层面的关系 redis、mongoDB、memcache redis:目前最火 使用频率最高的缓存型数据库 mongoDB:稳定型数据库 最像关系型的非关系型 主要用于爬虫、大数据 memcache:已经被redis淘汰
虽然数据库有很多 但是但是底层原理几乎一致 学会一个其他也能很快上手
学了MySQL基本就可以很快上手关系型数据库甚至非关系型数据库
5.6X:前几年使用频率最高的版本
5.7X:最近尝试迁移的版本(频率+)
8.0X:最新版 功能很强大 但是线上环境几乎不用(本地自己用非常好用)
虽然版本有区别 但是操作上几乎没有区别 主要体现在底层运作
1.直接点击官网下载即可:
MySQL官网下载
2.然后点击Archrves选择版本下载即可
解压到自己喜欢的位置 上述下载的压缩包内含有服务端和客户端 支持本地操作
1.bin文件夹
mysqld.exe 服务端 mysql.exe 客户端
2.data文件夹
存储数据
3.my-default.ini
配置文件
接下来的操作都要在cmd窗口打开 一定要使用管理员方式打开
在终端上cd到bin文件夹下
然后输入mysqld 如果
出现msvcp100错误时 只需点击下面的链接下载即可
下载链接
mysqld
cmd窗口就是服务端 不要关闭
mysql
直接回车会以游客模式进入 功能很少
mysql -u用户名 -p密码
mysql默认管理员账号 用户名是root 密码是空
exit
quit
# 1.如何解决每次登入MySQL都需要先切到bin文件下才能登入的缺陷 把bin文件夹添加到环境变量即可 # 2.MySQL服务端每次都需要单独给他一个cmd窗口太麻烦了 如何解决 只需把MySQL服务端制作成系统服务即可 1.以管理员运行cmd窗口 2.只需系统服务命令 mysqld -- install 3.启动服务端 net start mysql ''' 1.查看系统服务命令 services.msc 2.关闭mysql服务端 net stop mysql 3.移除系统服务 1.确保服务已经关闭 2.然后执行移除命令 mysql -- remove '''
1.修改密码 mysqladmin命令 通用方式: # 直接在cmd中写 mysqladmin -u用户名 -p原密码 password 新密码 第一次修改 mysqladmin -uroot -p password 123 第二次修改 mysqladmin -uroot -p123 password 321 偏门方式(有些版本无法使用): # 需要先登录 set password=PASSWORD(新密码); 2.忘记密码 2.忘记密码 1.停止MySQL服务 然后以跳过授权表的方式重新启动MySQL net stop mysql 2.重新启动 mysqld --slip-grant-tables 3.无需密码直接登入 mysql -uroot -p 回车即可 4.重置指定用户的密码 update mysql.user set password=password('新密码') where User='root' and HOST='localhost' 5.退出客户端并以正常的方式重新启动服务端
''' 数据库的服务端可以支持很多的各种编程语言充当客户端 eg:以MySQL服务端为例: MySQL客户端、python客户端、java客户端 为了能够兼容兼容所有类型的客户端 有两种措施 1.服务端兼容 不合理 这样太消耗服务端的资源了 2.指定统一标准 既然服务端不能既然 那只能让各种客户端统一标准 只能使用服务端的语法 SQL语法、NoSQL语法 ''' ''' SQL与NoSQL SQL语句的意思是操作关系型数据库的语法 NoSQL语句的意思操作非关系型数据库的语法 ps:SQL有时候也用来表示关系型数据库 NoSQL也用来表示非关系型数据库 '''
下述概念仅仅是为了小白快速了解 并不是完全正确
其实就是文件夹
像下图中的一个一个文件夹就相当于一个一个库
其实就是文件夹下的一个一个文件
想下图中在mysql中的一个一个文件就相当于一个一个表
记录就是表中一行一行的数据
像下图中的表格中的数据就是一个一个记录
''' show databases; 查看所有的数据库 show tables; 查看所有的表 select * from mysql.user; 查看user下的所有的记录 1.SQL语句的结束符是分号 ; 2.取消SQL语句的执行 \c '''
1.增 create database 库名; # 创建一个库 2.查 show databases; # 查看所有库 show create database 库名; # 查看指定的库 3.改 alter database 库名 charset='gbk'; # 修改改库下的字符编码 gbk 4.删 shop database 库名 # 删除该库
''' 首先我们想要创建一个表的话我们需要知道当前我们在那个库下面 一位在终端中我们是没有试图的 根本不知道在哪 所以我们要搞清楚当前所在位置 select database(); 查看当前所在的库 如果没有切换指定的库 那么默认是NULL use 库名; 切换库 ''' 1.增 create table 表名(字段名 字段类型, 字段名 字段类型); # 创建一个表 2.查 show tables; # 查看所有的表 show create table 表名; # 查看指定的表 describe 表名; # 查看指定的表中所有的信息 desc 表名; # 是上面的缩写 3.改 alter table 旧表名 rename 新表名; # 修改表的名字 4.删 shop table 表名; # 删除表
''' 想要修改记录也是要有具体的库和表下修改 ''' 1.增 insert into 表名 value(数据,数据); # 按照创建表的的时候字段类型增加 insert into 表名 value(数据,数据),(数据,数据),(数据,数据); 2.查 select * from 表名; # 查看表中所有的数据 *号表示所有 select name from 表名; # 查看表中所有的name select id,name from 表名; # 查看表中所有的id和name 3.改 update 表名 set 字段名=新数据 where 筛选条件; 4.删 delect from 表名; # 删除表中所有的记录 delect from 表名 where 筛选条件; # 根据筛选条件删除记录