数据演变史
# 1. 单独的文本文件
没有固定的存放位置和格式
文件名:user.txt userinfo.txt data.txt
数据格式:qq|123 zz~123
"""程序彼此之间无法兼容"""
# 2. 软件开发目录规范
规范了文件名和存储位置
"""文件的查找变的简单了 并没有解决核心问题"""
# 3. 数据库阶段
规定了文件的存储位置和数据格式
"""目前正在使用的阶段 解决了核心问题"""
数据存储发展史
# 1. 单机游戏阶段
数据各自保存在各自的计算机上 无法实现共享
# 2. 多机游戏阶段
数据统一保存在某个固定的服务器上(计算机) 实现数据共享
前提:必须有网络
"""为了数据的安全 会采用集群策略开分担风险"""
数据库服务器、数据管理系统、数据库、表与记录的关系
记录:1 朱葛 13234567890 22(多个字段的信息组成一条记录,即文件中的一行内容)
表:userinfo,studentinfo,courseinfo(即文件)
数据库:db(即文件夹)
数据库管理系统:如mysql(是一个软件)
数据库服务器:一台计算机(对内存要求比较高)
总结:
数据库服务器-:运行数据库管理软件
数据库管理软件:管理-数据库
数据库:即文件夹,用来组织文件/表
表:即文件,用来存放多行内容/多条记录
为什么要用数据库:
第一,将文件和程序存在一台机器上是不合理的;
第二,操作文件是一件很麻烦的事
数据库的本质
# 本质也是一款cs架构的软件
既然数据库本质是一款cs架构的软件 意味着每个人都可以编写一个数据库软件
"""
数据库在协议层面上来说
指的是处理数据的底层程序
数据库在广义层面上来说
指的是操作这些底层程序的便捷应用软件
"""
数据库的优势:
1.程序稳定性 :这样任意一台服务所在的机器崩溃了都不会影响数据和另外的服务。
2.数据一致性 :所有的数据都存储在一起,所有的程序操作的数据都是统一的,就不会出现数据不一致的现象
3.并发 :数据库可以良好的支持并发,所有的程序操作数据库都是通过网络,而数据库本身支持并发的网络操作,不需要我们自己写socket
4.效率 :使用数据库对数据进行增删改查的效率要高出我们自己处理文件很多
数据库的分类
1. 关系型数据库
MySQL、Oracle、PostgreSQL、MariaDB、sqlite、sql server、db2
MySQL:开源免费 使用非常规范
Oracle:收费 维护成本高 大型公司可能会使用
PostgreSQL:支持二次开发
MariaDB:MySQL的替代产品(并且有自己的特性)
splite:小型数据库(django框架自带该数据库)
2.非关系型数据库
Redis、mongoDB、memcache
Redis:目前最火的缓存数据库 具有很多数据结构 功能强大
mongoDB:文档型数据库 可以用在大数据和爬虫领域
memcache:已经被Redis淘汰
"""
1. 两类数据库的区别
关系型数据库
拥有固定的表结构 并且表与表之间可以建立代码层面的关系
非关系型数据库
没有固定的表结构 数据存储采用的是k:v键值对的形式
2. 这么多数据库如何学习
两大类数据库操作逻辑基本一致
关系型学MySQL
非关系型学redis、mongodb
"""
SQL与NoSQL的由来
数据库的服务端为了能够兼容不容类型的客户端实现数据交互
所以规定了统一的交互方式
关系型数据库:SQL语句
非关系型数据库:NoSQL语句
# NoSQL有时候也表示 非关系型数据库
MySQL下载
1.主要版本
5.6:使用频率较高的版本
5.7:目前正在过渡的版本
8.0:目前最新的版本
"""不同的版本主要区别在于底层的逻辑 SQL语句几乎是一模一样的"""
2.软件下载
访问官网:https://www.mysql.com/
具体步骤:
DOWNLOADS
MySQL Community (GPL) Downloads
MySQL Community server
Archives
选择版本下载压缩包(客户端 服务端)
目录介绍
bin文件夹
mysqld.exe 服务端
mysql.exe 客户端
data文件夹
存储使用过程中需要保存的数据
my-default.ini
配置文件
redadme
说明文件
基本使用
# 一定要先启动服务端在启动客户端
1.环境变量的配置
2.直接输入mysql启动服务端(当前cmd窗口不要关闭)
3.开设一个新的cmd窗口操作客户端
mysql # 游客模式登录
mysql -u用户名 -p密码 # 账号登录(本地使用)
mysql -hIP地址 -p端口号 -u用户名 -p密码 # 完整命令
"""第一次登录 root用户没有密码 直接连续回车即可"""
初识sql语句
mysql的账号操作
#进入mysql客户端
$mysql
mysql> select user(); #查看当前用户
mysql> exit # 也可以用\q quit退出
# 默认用户登陆之后并没有实际操作的权限
# 需要使用管理员root用户登陆
$ mysql -uroot -p # mysql5.6默认是没有密码的
#遇到password直接按回车键
mysql> set password = password('root'); # 给当前数据库设置密码
# 创建账号
mysql> create user 'eva'@'192.168.10.%' IDENTIFIED BY '123';# 指示网段
mysql> create user 'eva'@'192.168.10.5' # 指示某机器可以连接
mysql> create user 'eva'@'%' #指示所有机器都可以连接
mysql> show grants for 'eva'@'192.168.10.5';查看某个用户的权限
# 远程登陆
$ mysql -uroot -p123 -h 192.168.10.3
# 给账号授权
mysql> grant all on *.* to 'eva'@'%';
mysql> flush privileges; # 刷新使授权立即生效
# 创建账号并授权
mysql> grant all on *.* to 'eva'@'%' identified by '123'
系统服务
# 将MySQL的服务端制作成系统服务 开机自启动 关机自关闭
1.先关闭之前的服务端
2.查看当前计算机系统服务列表
services.msc
3.以管理员身份运行cmd并制作系统服务
mysqld --install # 仅仅是添加到了系统服务 第一次需要手动启动
4.启动服务
方式1:鼠标右键选择启动即可
方式2:命令行方式启动
net start mysql
"""
停止服务
net stop mysql
移除系统服务
mysqld --remove
"""
密码相关
# 针对管理员用户需要设置密码
方式1:直接在cmd窗口内使用mysqladmin命令
mysqladmin -uroot -p原密码 password 新密码
eg:
mysqladmin -uroot -p password 123
mysqladmin -uroot -p123 password 666
方式2:直接在登录状态下修改当前登录用户的密码
set password=PASSWORD('密码')
# 忘记密码如何解决
方式1:前期数据库里面没有数据,干脆重来!!!
方式2:了解
1.关闭服务器
2.以跳过授权表的方式重新启动服务端
只需要提供用户名就可以登录
mysql --skip-grant-tables
3.以管理员身份登录
mysql -uroot -p
4.修改管理员用户密码
update mysql.user set password=password(123) where user='root' and host='localhost';
5.关闭服务端再正常启动
ctrl + c
net start mysql
6.使用修改之后的密码登录
重要概念介绍
库 文件夹
表 文件夹里面的文件
记录 文件夹里面的文件里面的一行行内容
基本SQL语句
"""SQL语句的结束必须使用分号"""
# 1. 如何查看所有的数据库名称
show databases; '''会有一个临时产生在内存的库:in...sc'''
# 2.如何查看所有的表名称
use 库名; '''切换库(类似于双击文件夹)'''
show tables; # 表对应的是文件名字
# 3.如何查看所有的记录
select * from 表名;
如果内容较多展示补全出现错乱的情况,可以在表名语句后面加\G
针对库的SQL语句
# 增
create database 数据库名;
create database db1;
# 查
show databases; # 查看所有的库名
show create database 数据库名; # 定向查看某个库
# 改
alter database 数据库名 charset='gbk';
# 删
drop database 数据库名;
drop database db1;
针对表的SQL语句
"""
要想操作表必须得先有库
1.先创建库
create database db1;
2.查看当前所在的库名
select database();
3.切换库(文件夹)
use db1;
"""
# 增
create table 表名(字段名1 字段类型1,字段2 字段类型2);
create table t1(id int);
# 查
show tables; # 查看当前库下面所有的表名
show create table 表名; # 查看指定的表信息
describe 表名; # 查看表的具体信息(常用) 简写 desc 表名;
describe t1;
# 改
alter table t1 rename ttt; # 修改表名
alter table ttt change id nid int; # 修改字段名和类型
alter table ttt modify nid char(4); # 修改字段类型
# 删
drop table 表名;
drop table t1;
针对记录的操作
"""
要先确定库和表
"""
# 增
insert into 表名 values(数据,数据,数据); '''单条数据'''
insert into t1 values(1,'qq',10);
insert into 表名 values(),(),(); '''多条数据'''
insert into t1 values(1,'qq1'),(2,'qq2'),(3,'qq3');
# 查
select * from 表名; '''查询表中所有的数据'''
select * from t1;
# 改
update 表名 set 字段名=‘新数据’ where 筛选条件;
update t1 set name='sb' where id=2;
# 删
delete from 表名 where 筛选条件;
delete from t1 where name='qq';
字段编码问题
# 查看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] # MySQL自带的
default-character-set=utf8
3.重启MySQL服务端
cmd窗口 执行:
net stop mysql
net start mysql