一:存储数据的演变过程
随意地存到一个文件中、数据格式也是千差万别的,完全取决于我们自己
# 小李
jason | 123 | NB
# 小王
egon - 123 - DSB
# 小红
tank ~ 123 ~ hecha
软件开发目录规范
(限制了存储数据的具体位置)
- api 存放接口文件,接口主要用于为业务逻辑提供数据操作
- bin 整个项目的启动文件放置在这个文件夹中
- conf 整个项目的配置文件放置在这个文件夹
- core 整个项目的核心文件
- db 用于存放数据文件与操作数据的代码文件
- interface 用于存放用户接口
- lib 项目的第三方包,共享的一些库
- log 用于存放项目的日志文件
- README.TXT 整个项目的说明文件,项目需求和大致流程,相当于产品说明书
假设基于上述是一个单机游戏,那么每个人的游戏记录只会在自己的计算机上面保存,注册登录的账号也只能在自己的计算机上有效
如何将单机变成连网
-将数据库保存部分全部统一起来
-所有人操作数据都在一个地方操作
本质其实就是一款基于网络通信的应用程序
那其实每个人都可以开发一款数据库软件
因为它仅仅是一个基于网络通信的应用程序
也就意味着数据库软件其实有很多很多:
关系型数据库:
MySQL、Oracle、db2、Access、SQL Server
非关系型数据库:
Redis、MongoDB、Memcache
# 关系型
1.数据之间彼此有关系或者约束
男生表 - 前女友表
2.存储数据的表现形式 通常是以表格存储
name password hobby
jason 123 sleep
egon 123 eat
tank 123 run
每个字段还会有存储类型的显示
比如姓名只能存字符串....
# 非关系型
存储数据通常都是以k,v键值对的形式
二:MySQL
任何基于网络通信的应用程序 底层用的都是socket
- 服务端
- 基于socket通信
- 收发消息
- SQL语句
- 客户端
- 基于socket通信
- 收发消息
- SQL语句
MySQL不单单支持MySQL自己的客户端APP 还支持其他编程语言来充当客户端操作
如何解决语言沟通的障碍
# 1.让服务端兼容所有的语言(一个人精通多国语言)
# 2.采用统一的语言(SQL语句)
三:重要概念介绍
库 ---> 文件夹
表 ---> 文件
记录 ---> 文件内一行行的数据
name password hobby
jason 123 sleep
egon 123 eat
tank 123 run
表头 ---> 表格的第一行字段
字段 ---> name、password、hobby
四:MySQL的安装
1.MySQL服务端与客户端
服务端:
mysqld.exe
客户端:
mysql.exe
注意:
在前期配置MySQL的时候,cmd终端尽量以管理员的身份打开
Windows+R 输出 cmd 进入的是普通用户的cmd,有一些命令是无法执行的
搜索 cmd右键 - 以管理员身份运行
直接在桌面,按住shift,鼠标右键,在此处打开power shell,就是管理员
常见软件端口号:
MySQL:3306
Redis:6379
MongoDB:27017
Django:8000
Tomcat:8080
MySQL第一次以管理员身份进入是没有密码的,直接回车即可
客户端连接服务端完整命令:
mysql -h 127.0.0.1 -P 3306 -uroot -p
五:SQL语句初识
1.MySQL中的SQL语句是以分号;作为结束的标志
2.基本命令
show databases; 查看所有数据库名
3.连接服务端的命令可以简写
mysql -uroot -p
4.当你的命令输入不对,又不想让服务端执行并返回报错信息,可以\c取消
错误命令 \c
5.客户端退出 退出命令加不加分号都能执行
quit
exit
6.当你在连接服务器的时候 发现只输入一个mysql也能连接
这时候是游客模式 访问有限制
1.环境变量配置及系统服务制作
环境变量配置
# 小知识点补充:
1.如何查看当前具体进程
tasklist
tasklist |finder mysqld
2.如何杀死具体进程(只有在管理员cmd窗口下才能成功)
taskkill /F /PID PID号
# 查看当前计算机的运行进程数
services.msc
# 将mysql制作成系统服务
mysqld --install
# 移除mysql系统服务
mysqld --remove
设置密码
mysqladmin -uroot -p原密码 password 新密码
改命令直接在终端输入即可 无序进入客户端
mysqladmin -uroot -p123 password 123456
破解密码
你可以将mysql获取用户名和密码校验的功能看成是一个装饰器
装饰在了客户端请求访问的功能上
我们如果将该装饰器移除 那么mysql服务端就不会校验用户名和密码了
# 1 先关闭当前mysql服务端
命令行的方式启动(让mysql跳过用户名密码验证功能)
mysqld --skip-grant-tables
# 2 直接以无密码的方式连接
mysql -uroot -p 直接回车
# 3 修改当前用户的密码
update mysql.user set password=password(123456) where user='root' and host='localhost';
# 4 立刻将修改数据刷到硬盘
flush privileges;
# 5 关闭当前服务端 然后以正常校验授权表的形式启动
2.统一编码
mysql> \s 查看信息
mysql默认的配置文件
"""
my-default.ini
ini结尾的一般都是配置文件
程序启动会先加载配置文件中的配置之后才真正的启动
"""
[mysqld] # 一旦服务端启动立刻加载下面的配置
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysql] # 一旦客户端启动立刻加载下面的配置
...
[client] # 其他客户端
...
# 需要你自己新建一个my.ini的配置文件
# 验证配置是否真的是自动加载
[mysql]
print('hello world')
# 修改配置文件后一定要重启服务才能生效
# 统一编码的配置 无需掌握 直接拷贝即可
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
修改前:
Server characterset: latin1
Db characterset: latin1
Client characterset: gbk
Conn. characterset: gbk
修改后重启服务端连接客户端\s查看:
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
# 偷懒 将管理员的用户名和密码也添加到配置文件中
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
user="root"
password=123456
default-character-set=utf8
六:基本SQL语句
针对库的增删改查(文件夹)
# 增
create database db1;
create database db2 charset='gbk';
# 查
show databases; # 查所有数据库
show create database db1; # 查单个数据库
# 改
alter database db2 charset='utf-8';
# 删
drop database db2;
针对表的增删改查(文件)
在操作表(文件)的时候,需要指定所在的库(文件夹)
# 查看当前所在的库(数据库)的名字
select database();
# 选择数据库
use db1;
# 增
create table t1(id int, name char(4));
# 查
show tables; # 查看当前库下面所有的表名
show create table t1; # 查单个表
describe t1; # 查看详情信息,支持简写 desc t1;
# 改
alter table t1 modify name char(16);
# 删
drop table t1;
# 绝对路径的形式操作
# 在db1下创建db2的t1表
create table db2.t1(id int)
针对数据的增删改查(一行行的数据)
一定先要有库 有表 再有记录
# 增
insert into t1 values(1, 'jason');
insert into t1 values(2, 'eogn');
insert into t1 values(3, 'tank')
insert into t1 values(1, 'jason'),(2, 'eogn'),(3, 'tank');
# 查
select * from t1; # 该命令 当数据量特别大的时候 不建议使用
select id,name from t1; # 查看t1的id和name
# 改
update t1 set name = 'dsb' where id > 1;
# 删
delete from t1 where id > 1;
delete from t1 where name='jason';
# 将表中所有数据清空
delete from t1;