存储数据的演变过程
数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上。
如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,并没有问题。
很不幸,这些假设都是你自己意淫出来的,数据格式也是千差万别的完全取决于我们自己
小李
jason|123|NB
小王
egon-123-DBJ
小红
tank~123~hecha
软件的开发目录规范
限制了存储数据的具体位置
bin 启动文件
conf 配置文件
core 核心逻辑代码
db 数据文件
lib 公共类
log 日志文件
readme 使用说明
假设上述是一个单机游戏
那么每个人的游戏记录只会在自己的计算机上面保存
注册登录的账号也只能在自己的计算机上有效
如何将单机变成连网:将数据库保存部分全部统一起来,所有人操作数据都来一个地方操作
数据库的本质
本质其实就是一款基于网络通信的应用程序
那其实每个人都可以开发一款数据库软件 因为它仅仅就是一个基于网络通信的应用程序
也就意味着数据库软件其实有很多很多
关系型数据库
MySQL、oracle、db2、access、sql server
非关系型数据库
redis、mongodb、memcache
关系型
1 数据之间彼此有关系或者约束
男生表和前女友表
2 存储数据的表现形式通常是以表格存储
name password hobby
jason 123 学习
egon 123 女教练
tank 123 吃生蚝
每个字段还会有存储类型的限制
比如姓名只能存字符串...
非关系型
存储数据通常都是以k,v键值对的形式
MySQL
任何基于网络通信的应用程序底层用的都是socket
-服务端
-基于socket通信
-收发消息
-SQL语句
-客户端
-基于socket通信
-收发消息
-SQL语句
MySQL不单单支持MySQL自己的客户端app还支持其他编程语言来充当客户端操作
如何解决语言沟通的障碍?
1 让服务端兼容所有的语言(一个人精通多国语言)
2 采用统一的语言(SQL语句)
重要概念介绍
库 -------> 文件夹
表 -------> 文件
记录 -------> 文件内一行行的数据
name password hobby
jason 123 学习
egon 123 女教练
tank 123 吃生蚝
表头 表格的第一行字段
字段 name、password、hobby
sql语句初识
1 MySQL中的sql语句是以分号作为结束的标志
2 基本命令
show databases; 查看所有的库名
3 连接服务端的命令可以简写
mysql -uroot -p
4 当你输入的命令不对 又不想让服务端执行并返回报错信息 可以用c取消
错误命令 c
5 客户端退出 退出命令加不加分号都可以执行
quit
exit
6 当你在连接服务端的时候 发现只输入mysql也能连接
但是你不是管理员身份 而只是一个游客模式
小知识点补充
1 如何查看当前具体进程
tasklist
tasklist |findstr mysqld
2 如何杀死具体进程(只有在管理员cmd窗口下才能成功)
taskkill /F /PID PID号
基本sql语句
PS:大部分程序的业务逻辑其实都是增删改查
**针对库的增删改查(文件夹)**
# 增
create database db1;
create database db2 charset='gbk';
# 查
show databases; # 查所有
show create database db1; # 查单个
# 改
alter database db2 charset='utf8';
# 删
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;
create table db2.t1(id int); 也可以用绝对路径的形式操作不同的库
**针对数据的增删改查(一行行数据)**
一定要先有库 有表 最后才能操作记录
# 增
insert into t1 values(1,'jason');
insert into t1 values(1,'jason'),(2,'egon'),(3,'tank');
# 查
select * from t1; # 该命令当数据量特别大的时候不建议使用
select name from t1;
# 改
update t1 set name='DSB' where id > 1;
# 删
delete from t1 where id > 1;
delete from t1 where name='jason';
# 将表所有的数据清空
delete from t1;