数据库---MySQL
数据演变史
单独的文本文件
没有固定的存放位置,没有固定的数据格式,程序彼此无法兼容,没有统一的标准。
软件开发目录规范
按照文件功能的不同规定了相应的位置,文件查找变得统一,但是没有解决格式问题(核心问题)。
数据库应用
解决了存放位置和数据格式问题,将数据处理部分统一了起来。
数据库应用发展史
单机游戏阶段
数据各自保存在各自的计算机上,无法实现远程共享,无需互联网。
多机游戏阶段
数据统一基于网络保存到某个固定的服务器上,实现数据共享,必须要有互联网。
集群的概念
如果所有的数据全部存储到一台远程服务器上 ,那么数据的安全性降低,服务器的压力上升。所以增加远程服务器的数量,数据同步保存,任务均匀分担。具有相同功能的多个服务器组合到一起,就可以称之为是集群。
数据库本质
数据库在微观层面上:运行在计算机上专门处理数据的进程(程序),eg:内存中的typora代码。
数据库在宏观层面上:提供给操作者一个简单快捷的操作进程的软件,eg:屏幕上typora界面。
我们平时在说数据库的时候大部分指的是操作数据库的应用软件
数据库软件的本质其实也是一款CS架构的软件
既然数据库本质是一款CS架构的软件 也就意味着我们每个会网络编程的程序员理论上来说都可以编写出一款数据库软件 在目前地球上有很多牛逼的程序员 他们都具备编写数据库软件的能力 所以现在市面上其实存在很多数据库软件
数据库分类
关系型数据库
特点:1.有固定的表结构(最主要的特征);2.并且表与表之间可以建立代码层面的关系。
常见关系数据库名称:MySQL、Oracle、PostgreSQL、MariaDB、sqlite、sql server。
MySQL:关系型数据库的代表 开源免费 使用频率极高 Oracle:安全性极高 但是使用和维护收费 使用成本高 PostgreSQL:支持二次开发(自己嫁接、扩展功能) MariaDB:与MySQL是同一个作者 开发的初衷是作为MySQL的替代品 sqlite:小型数据库 携带方便但功能较少 主要用于本地测试使用 sql server:老牌数据库软件 目前主流不用
非关系型数据库
特点:1.没有固定的表结构 数据存取采用K:V键值对的形式(最主要的特征); 2.并且表与表之间无法建立代码层面的关系
常见非关系数据库名称:Redis、MongoDB、Memcache
Redis:目前最火的非关系型数据库 数据类型丰富 功能强大 MongoDB:最像关系型数据库的非关系型数据库 主要用于爬虫和大数据 Memcache:被redis取代了!!!
SQL与NoSQL
数据库服务端支持很多客户端来链接使用,比如说数据库自带的客户端,python代码编写的,java代码编写的等待。如何让服务端兼容诸多客户端实现正常交互?方式1:让服务端识别并自动切换对应语言;方式2:统一沟通标准。相较之下方式2更加合理,SQL语句与NoSQL语句。
SQL语句是与关系型数据库交互的语言。SQL有时候用来标识关系型数据库,有时候表示SQL语句。
NoSQL语句是与非关系型数据库交互的语言。NoSQL有时候用来标识非关系型数据库,有时候表示NoSQL语句。
MySQL
版本问题
5.6X:使用最为广泛的稳定版本 5.7X:目前正在逐步过渡使用的版本 8.0X:最新版本 暂时不投入正常生产环境使用(其实很好用!!!) 版本问题不会影响我们的学习 因为SQL语句是一样的 只不过底层有变化 目前不用考虑
下载使用
1.点击步骤:downloads(GPL) DownloadsMySQL Community ServerArchives选择版本和系统点击下载对应的zip压缩包即可。
讲解以windows为基准,mac和linux参考下列博客. linux:https://www.cnblogs.com/Dominic-Ji/p/15124625.html mac:https://www.cnblogs.com/Dominic-Ji/articles/15402755.html
2.解压处理
建议压缩到D或者E、F盘的根目录方便查找。mysql-5.6.44-winx64.zip mysql-5.6.44-winx64。
目录结构
bin文件夹 mysqld.exe 服务端 mysql.exe 客户端 '''学习阶段服务端在本地启动即可''' data文件夹 存放数据 my-default.ini文件 默认配置文件 README文件 说明书
基本使用
必须要先启动服务端,再启动客户端链接。以F:\Program Files\mysql-5.6.48-winx64\bin为例。
1.先启动服务端
以管理员身法运行cmd,切换的mysql文件所在目录里的bin路径下,F:\Program Files\mysql-5.6.48-winx64\bin,输入'mysqld'启动服务端。
出现类似以上图片的情况就是启动服务端成功了,维持cmd窗口不要关闭,重新打开一个新的cmd窗口,接下来启动客户端。
2.启动客户端
以管理员身法运行cmd,切换的mysql文件所在目录里的bin路径下,F:\Program Files\mysql-5.6.48-winx64\bin,输入'mysql'启动客户端(当前为游客模式,只能体验基本功能)。
一般电脑都是可以成功的,出现特殊情况的可以拷贝报错信息,百度搜索mysql启动报错'错误代码',查看出错原因和解决措施。
系统服务
我们可以直接添加mysql的bin目录到环境变量中,就可以直接输入mysql等命令。我们不想自己启动服务端,设置成开机自启动(消耗的资源很少 不要担心)。
1.先确保之前测试的服务端关闭(直接点击关闭即可) 2.重新以管理员的身份打开cmd窗口 mysqld --install # 结果大致显示: ... successfully 3.初次启动需要人为干预 net start mysql 4.关闭所有的cmd 随意打开一个cmd窗口 输入mysql即可链接到服务端 如果想要移除系统服务 1.先停止服务端 net stop mysql 管理员身份运行cmd 2.移除系统服务 mysqld --remove
修改密码
直接输入mysql登入的是默认的游客模式,没有太多的操作权限,我们可以使用用户名和密码的方式登录。
语法:mysql -u用户名 -p密码。学习阶段不用考虑用户管理 ,直接使用root用户(管理员账号)。管理员账号登录第一次登录,没有密码,提示输入密码也直接回车。
修改管理员密码:
方式1:在cmd窗口下直接修改(不要登录进去)
语法:mysqladmin -u用户名 -p原密码 password 新密码 mysqladmin -uroot -padmin123 password jason123
方式2:登录状态下修改当前用户密码(先登录)
set password=PASSWORD('新密码'); # 最新版不支持
如何区分当前是否是游客模式:可以执行show database;结果如果是两条,表示是游客。结果如果是四条及以上,表示是用户。
重要概念
库 类似于 文件夹 表 类似于 文件 记录 类似于 文件中一行行数据 ''' show databases; 查看所有的库名称 类似于查看data文件夹内文件夹的名称 '''
ps:SQL语句使用分号作为结束符
操作库的基本SQL语句
语句和类型 | 说明 |
---|---|
查 | |
show databases; | 查看所有的库名称 |
show create database 库名; | 指定查看某个库的信息 |
增 | |
create database 库名; | 创建一个库 |
改 | |
alter database 库名 charset='gbk'; | 修改字符编码 |
删 | |
drop database 库名; | 删除库 |
操作表的基本SQL语句
表是存放于库下面的,所以操作表之前,应该先确定库。
如何查看当前在哪个库下:select database(); 切换或进入库:use 库名;
语句和类型 | 说明 |
---|---|
查 | |
show tables; | 查看当前库下所有的表名称 |
show crate table 表名; | 指定查看某个表的信息 |
describe 表名; | 指定查看表的字段信息 简写 desc 表名; |
增 | |
create table 表名( 字段名称1 字段类型1, 字段名称2 字段类型2 ); | 创建一个表,表里含字段1和2 |
改 | |
alter table 表名 rename 新表名; | 修改表名 |
删 | |
drop table 表名; | 删除表 |
操作记录的基本SQL语句
要想操作记录 肯定得先有库和表
语句和类型 | 说明 |
---|---|
查 | |
select * from 表名; | 查看表里面所有的数据 |
select * from 库名.表名; | 查看指定库下面的指定表里面的所有数据 |
select * from 库名.表名\G; | 逐行展示字段 |
select Host,User from mysql.user | 查看指定字段 |
增 | |
insert into 表名 values(值1,值2); | 增加单条数据 |
insert into 表名 values(值1,值2),(值3,值4); | 增加多条数据 |
改 | |
update 表名 set 字段=新值 where 筛选条件; | 根据条件筛选数据并修改 |
删 | |
delete from 表名 where 筛选条件; | 根据统计删除数据 |