Mysql
数据库
SQL、DB、DBMS 分别是什么
- DB:DataBase – 数据库,数据库实际上在硬盘上以文件的形式存在
- DBMS:DataBase Management System – 数据库管理系统(本质上是 C/S 架构)
- SQL:结构化查询语言,是一门标准通用的语言,属于高级语言。标准的 SQL 适合于所有数据库产品。SQL 语句在执行的时候,实际上内部也会先进编译,然后再进行 SQL(SQL 语句的编译由 DBMS完成)
三者之间的关系
- DBMS 负责执行 SQL 语句,通过执行 SQL 语句来操作 DB 中的数据
DBMS -(执行)-> SQL -(操作)-> DB
存储数据的演变过程
-
with open 方法,随意存到一个文件中,数据格式也是千差万别的
-
软件开发目录规范
- bin --> 启动文件 - conf --> 配置文件 - lib --> 公共方法 - core --> 业务逻辑 - db --> 数据 - readme --> 产品说明书 - log --> 数据库 --> elasticsearch elk 全文搜索引擎 # 单机软件数据只会保存在本地文件,只在自己的计算机上有效
-
如何将单机变成联网
- 将数据保存部分全部统一起来
- 所有数据都放在一个地方操作
数据库的本质
- 基于网络通信的应用程序
数据库的分类
-
关系型数据库
1.数据之间彼此有关系或者约束 2.存储数据的表现形式通常是以表格存储,且每个字段还会有存储类型的限制 3.有固定的表结构,可以建立表与表之间的关系 """MySQL、Oracle、db2、access、sql server、SQLite""" 专门用以存储数据
-
非关系型数据库
1.没有固定的表结构,没有表结构 2.多以 key:value 键值对的形式存储数据 """redis(字符串、无需集合、有序集合、哈希类型、列表类型)--> 主要用于缓存、MongoDB(爬虫)、mecache(只支持字符串)""" 主要用作缓存,缓解数据库的压力
MySQL
- 任何基于网络通信的应用程序底层用的都是 socket
- 本质上是 C/S 架构
- 服务端
- 基于 socket 通信
- 收发消息
- 客户端
- 基于 socket 通信
- 收发消息
- MySQL 采用统一的语言(SQL 语句),以达到兼容各类计算机编程语言的目的
概念
-
库:相当于文件夹
-
表:相当于文件
-
记录:相当于文件内的一行行数据
-
字段:相当于关键字
常见软件的默认端口号
MySQL ----- 3306
redis ----- 6379
MongoDB ----- 27017
django ----- 8000
flask ----- 5000
tomcat ----- 8080
客户端链接服务端命令
# 完整版
mysql -h 127.0.0.1 -p 3306 -uroot -p
# 简写版
mysql -uroot -p
SQL 语句知识
- MySQL 中的 SQL 语句是以";"作为结束的标志
- SQL 语句不区分大小写
- SQL 语句字符串使用单引号标注
- mysqld 表示服务端
基本命令
1.show databases; ---- 查看所有的库名
2.mysql -uroot -p ---- 连接服务端命令
3.错误命令 \c(;) ---- 取消该命令,";"可省略
4.exit/quit(;) ---- 退出 MySQl,";"可省略
5.mysql ---- 可以直接连接服务端,但并非管理员用户,仅为游客模式
知识点补充
1.查看当前具体进程
tasklist
tasklist | findstr mysqld
2.杀死具体进程
taskkill /F /PID PID号
MySQL 的下载与安装
Windows 系统
1.官网下载压缩包
2.解压得到文件夹
3.进入到 bin 目录下
- mysql.exe mysql 的客户端
- mysqld.exe mysql 的服务端
4.先启动服务端,再启动客户端
5.进入到 bin 目录,执行 mysqld 启动服务端
6.启动服务端后,再另起一个 cmd 窗口,进入 bin 目录,执行 mysql.exe 客户端,连接 mysql
7.添加环境变量
- 把bin目录路径添加到环境变量中
8.制作系统服务
- 以管理员身份进入 cmd 中
- services.msc/任务管理器 --> 服务 # 查看当前计算机的服务及应用程序
- mysqld --install # 添加系统服务
- mysqld --remove # 移除系统服务
- 默认情况是未启动状态,需要手动启动,再在属性中将启动方式修改为自动即可
Mac 系统
1.官网下载 DMG Archive 文件
2.打开文件并安装,安装过程中设置登录密码即可
3.配置环境变量
- 首先,检查你的默认shell是什么,echo $SHELL。
- 打开终端,输入:sudo vim ~/.zshrc(执行root权限,当前用户的根目录下的.zshrc)
- 然后在里面输入:export PATH=$PATH:/usr/local/mysql/bin
- 按ESC,然后输入::wq
- source ~/.zshrc(重新加载)
- 通过 which 命令验证:which mysql 输出:/usr/local/mysql/bin/mysql 则配置成功
- 安装 MySQL 后,系统会自动将 MySQL 制作为系统服务
配置 MySQL 配置文件
my-default.ini
# ini结尾一般都是配置文件
# 程序启动会先加载配置文件中的配置后才真正启动
"""但不能直接在该文件内修改,需要新建一个 my.ini 的配置文件"""
# 只要改变了配置文件需要重启服务端
修改密码
Windows 系统
mysqladmin -uroot -p原密码 passwod 密码
# 该命令直接在终端输入即可,无需进入客户端
破解密码
- 本质上就是跳过 MySQL 的认证登录功能,相当于跳过认证功能装饰器
1.先关闭 mysql 服务端,并跳过认证功能
mysql --skip-grant-tables
2.直接无密码登录
mysql -uroot -p
3.修改当前用户密码
update mysql.user set password=password(密码) where user='root' and host='localhost';
"""
password(密码) --> password将括号中的密码转化为密文存储
where user='root' and host='localhos' --> 表示修改指定用户密码,若不加此命令即修改所有用户密码
"""
4.立刻将数据刷入硬盘
flush privileges;
5.关闭当前服务端 然后以正常校验授权表的形式启动
增删改查
- 大部分程序的业务逻辑其实都是增删改查
针对库的增删改查(文件夹)
# 增 -- 创建库
create database 库名;c
create database 库名 charset='gbk'; # 为数据库指定编码,配置文件后可省略
# 删 -- 删除库
drop database 库名;
# 改 -- 修改库的编码
alter databases 库名 charset='utf8';
# MySQL 由于数据安全考虑,在 5.1.23 之后的版本中不再支持库名的修改
# 查 -- 查看库
shows databases; # 查看所有数据库
show create database 库名; # 查单个指定数据库
针对表的增删改查(文件)
"""
在操作表的时候,需要指定所在的库
"""
# 查看当前库的名字
select database();
# 切换库
use 库名;
# 增
create table 表名(id int, name char(长度);
# 删
drop table 表名;
# 改
alter table 原表名 renmae 新表名; # 修改表名
alter table 表名 modify <字段名> char(4); # 修改字段类型
alter table 表名 modify <字段名> varchar(4); # 修改字段类型
"""
- char 代表固定长度数据,即使数据长度不足4个字节,依然占用4字节的空间
- varchar 是可变数据长度,即数据的最大长度为4个字节,若不足4个字节,以实际长度为准
- 一般情况下推荐使用 varchar,只有在确定数据长度且不会改变数据长度的情况下使用 char
"""
# 查
show tables(); # 查看当前库下面所有表名
show create table 表名; # 查看创建表的语句
describe/desc 表名; # 查看表结构
针对记录的增删改查(数据)
# 增
insert into 表名(id, name, age) values (1, 'egon', 18);
insert into 表名(id, name, age) values (1, 'egon', 18), (2, 'ly', 28), (3, 'jason', 20)
# 批量添加可以提高效率,每添加一条数据需要连接一次数据库,因此将多条数据拼接为一条数据添加即可提升效率
alter table <表名> add <新字段名><数据类型>[约束条件]; # 在表末尾添加字段
# 删
delete from <表名> where id=id号;
# 改
update `表名` set `name`='egon' where id=id号; # 必须添加 where 限制条件,否则即全表修改
# 查
select * from table; # 只适用于数据量较小的表,若数据量过大容易造成内存溢出
select id, name from table; # 在不确定表中数据量的时候,推荐此方法,数据提取更快
- 在字段、表名、库名标注反引号,增强可读性,且方便底层识别