1. 数据演变史
# 1. 单独的文本文件 -- 文件操作
没有固定的存放位置和格式
文件名:user.txt info.txt...不规范
数据格式: jack|123 tony-234
"""程序彼此之间无法兼容"""
# 2. 软件开发目录规范
规定了文件名和存储位置
"""
文件的查找变得简单了
但是并没有解决核心问题(程序兼容性问题)
"""
# 3. 数据库阶段
规定了文件的存储位置和数据格式
"""
目前正在使用的阶段
解决了核心问题
"""
2. 数据存储发展史
# 1. 单机游戏阶段 == 游戏演变史
数据各自保存在各自的计算机上,无法实现共享。
# 2. 多机游戏阶段
数据统一保存在某个固定的服务器上(计算机)实现数据共享。
# 前提是必须有网络!!!
"""为了数据的安全,还会采用集群的策略来分担风险"""
3. 数据库的本质
# 本质也是一款 C/S架构的软件
既然数据库本质是一款 C/S 架构的软件,
也就意味着每个人都可以编写一个数据库软件,
所有目前有很多nb的程序员,都具备编写数据库软件的能力,
并且确实目前市面上真的有很多款数据库软件
"""
数据库在狭义层面上来说
指的是处理数据的底层程序
数据库在广义层面上来说
指的是操作这些底层程序的便捷的应用软件
其实数据库很多时候学习的是配套的数据库软件。
"""
4. 数据库的分类(重点)
# 市面上有很多数据库软件,但是大致分为 两类。
1. 关系型数据库
MySQL # 目前开源免费,使用非常广泛
Oracle # 收费,维护成本高,大型公司可能会使用
PostgreSQL # 支持二次开发
# 它可以暴露给用户一个接口,在原本基础上添加更多功能
MariaDB # 与MySQL是一个作者,MySQL的替代产品,自身还在发展中(有自己的特性)
sqllite # 小型数据库(django框架自带数据库)
sql server
db2
2. 非关系型数据库
Redis
# 目前最火的缓存数据库,具有很多数据结构,功能强大两种持久化方式
mongoDB # 文档型数据库,可以应用在大数据和爬虫领域
memcache # 几乎没有了,已经被Redis淘汰
"""
1. 两类数据库的区别
关系型数据库
**拥有固定的表结构**,并且表与表之间可以建立代码层面的关系
可以看作一张表,并且拥有固定字段
非关系型数据库
没有固定的表结构,数据存储采用的是key:value键值对的形式
2. 这么多数据库,如何学习
两大类数据库操作逻辑基本一致
每一类学习一个,基本就可以掌握所有
关系型: MySQL
非关系型:redis,mongodb
"""
5. SQL 与 NoSQL的由来
关系型和非关系型
SQL各种客户端发给关系型数据库的统一语言
NoSQL是非关系型的
数据库的服务端,为了能够兼容不同类型的客户端实现数据交互,所以规定了统一的交互方式
关系型数据库: SQL语句
非关系型数据库:NoSQL语句
# NoSQL有时候也表示 非关系型数据库
6. MySQL
6.1 下载安装
# 1. 主要版本
5.6 当前市面上使用频率较高的
5.7 目前正在过渡的版本
8.x 目前最新的版本(功能强大)
"""不同的版本主要区别在于底层的逻辑,SQL语句几乎是一模一样"""
# 2. 下载
Windows:
访问官网 -- 下载 --
https://downloads.mysql.com/archives/community/
Mac:
Linux: ji置顶博客
# 3. 目录介绍
bin文件夹
mysqld.exe 服务端
mysql.exe 客户端
data文件夹
存储使用过程中需要保存的数据
my-default.ini
配置文件(自己可以配置)
readme
说明文件
# 4. 基本使用
一定要先启动服务端,在启动客户端
"前期操作的时候最好使用管理员cmd操作"
1. 环境变量的配置
2. 启动直接输入mysqld启动服务端(不要关闭)
3. 开设新的cmd窗口操作客户端
mysql # 游客模式登录
mysql -u root -p # 账户登录(本地使用)
mysql -h ip地址 -P 端口 -u 用户名 -p 密码
"第一次登录root用户无密码"
6.2 系统服务
# 将MySQL的服务端制作成系统服务,开机自启动,关机自关闭
1. 先关闭之前的服务端
2. 查看当前计算机系统服务列表
win r
services.msc
3. 以管理员身份运行cmd
mysqld --install # 仅仅是添加到系统服务中,第一次需要手动启动
4. 启动系统服务
方式1:鼠标右键 选择启动
方式2:命令行方式
net start mysql
"""
停止服务
net stop mysql
移除系统服务
mysqld --remove
"""
6.3 密码相关
# 针对管理员用户需要设置密码
方式1:直接在cmd窗口使用mysqladmin命令
mysqladmin -u root -p原密码 password 新密码
eg:由于第一次没有密码,则
mysqladmin -r root -p password 新密码
方式2:直接在登录状态下修改当前登录用户的密码
set password=PASSWORD('密码')
# 忘记密码如何解决(了解)
方式1:前期数据库里面没有数据,干脆重来!!!
方式2:稍作了解
1. 关闭服务端
2. 以跳过授权表的方式重新启动服务端
只需要提供用户名就可以登录
mysqld --skip-grant-tables
3. 以管理员身份登录
mysql -u root -p
4. 修改管理员用户密码
update mysql.user set password=password(123) where user="root" and host="localhost"; # 修改密码
5. 关闭服务端再正常启动
ctrl c
net start mysql
6. 使用修改账户的密码登录
6.5 重要概念介绍
"库" -- 文件夹
"表" -- 文件夹里面的文件
"记录" -- 文件夹里面的文件里面的每行的内容
6.6 基本SQL语句
"编写SQL语句的时候,有明确的结束符号 ;分号 "
# 1. 如何查看所有的数据库名称
show databases;
"会有一个临时产生在内存的库"
# information_schema
# 2. 如何查看所有的表名称
1. 切换库
use 数据库;
2. 查看表
show tables;
# 3. 如何查看所有的记录
select * from 表名;
如果内容较多展示不全,出现错乱的情况
可以在语句后面加 \G
6.7 针对库的 SQL 语句
# 增
create database 数据库名称;
# 查
show databases; # 查看所有的库名
show create database 数据库名; # 定向查看某个库
# 改
alter database db1 charset="utf-8";
# 删
drop database 数据库名称;
6.8 针对表的 SQL 语句
"要想操作表必须得先有库"
# 1.建库
create database db1;
# 2.查看当前所在库
select database();
# 3.切换库
use db1;
# 增
"在关系型数据库中创建表的时候一定要带有字段"
create table 表名(字段名1 字段类型1,字段2 字段类型2);
# 查
show tables; # 查看当前库下面所有的表名。
show create table 表名; # 查看指定的表信息。
describe 表名; # 提前预览表的字段(具体信息),使用频率高!
# 可简写:desc 表名;
# 改
alter table t1 rename tt; # 修改表名
alter table tt change id nid int; # 修改字段名和类型
alter table tt modify nid char(4); # 修改字段类型
# 删
drop table 表名;
6.9 针对记录的操作
"也是先建库和表"
create table t1(id int, name varchar(32), age int);
# 增
insert into 表名 values(数据,数据,数据);
insert into t1(1,'jack',22);
insert into 表名 values(第一条),(第二条),(第三条);
# 查
select * from 表名; # 查询表中所有的数据。
# 改
update 表名 set name="jack123" where id=1;
update 表名 set 字段名="新数据" where 筛选条件。
# 删
delete from 表名 where 筛选条件;
6.10 字符编码问题
# 查看MySQL内部默认的编码情况
\s
"MySQL默认的配置文件>>>:mydefault.ini"
1. 拷贝默认配置文件,并且重新命名为 my.ini
2. 拷贝固定的配置信息
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
3. 重启MySQL服务端