- 数据演变史
- 数据库应用发展史
- 数据库
- SQL与NoSQL
- MySQL
- 单独的文本文件
没有固定的存放位置:C:\a.txt D:\aaa\c.txt F:\bbb\b.txt
没有固定的数据格式:zhou|123 tony$123 kevin~123
程序彼此无法兼容,没有统一的标准
- 软件开发目录规范
按照文件功能的不同规定了相应的位置
文件查找变得统一,但是没有解决格式问题(核心问题)
- 数据库应用
解决了存放位置和数据格式问题,将数据处理部分统一了起来
数据库应用发展史- 单机游戏阶段
无需互联网
数据各自保存在各自的计算机上,无法实现远程共享
- 多机游戏阶段
必须要有互联网
数据统一基于网络保存到某个固定的服务器上,实现数据共享
集群如果所有的数据全部存储到一台远程服务器上,那么数据的安全性降低,服务器的压力上升
所以增加远程服务器的数量,数据同步保存,任务均匀分担,具有相同功能的多个服务器组合到一起,就可以称之为是集群
数据库 本质数据库软件的本质其实也是一款CS架构的软件,也就意味着我们每个会网络编程的程序员理论上来说都可以编写出一款数据库软件
在目前地球上有很多牛逼的程序员,他们都具备编写数据库软件的能力,所以现在市面上其实存在很多数据库软件
数据库在微观层面上来说:运行在计算机上专门处理数据的进程(程序)eg:内存中的typora代码
数据库在宏观层面上来说:提供给操作者一个简单快捷的操作进程的软件 eg:屏幕上typora界面
分类目前市面上有很多数据库软件,大致可以分为两类
- 关系型数据库
关系型:
有固定的表结构(相对于有固定字段的excel表格)
并且表与表之间可以建立代码层面的关系
常见数据库名称:
MySQL、Oracle、PostgreSQL、MariaDB、sqlite、sql server
MySQL:关系型数据库的代表,开源免费,使用频率极高
Oracle:安全性极高,但是使用和维护收费,使用成本高
PostgreSQL:支持二次开发(自己嫁接、扩展功能)
MariaDB:与MySQL是同一个作者,开发的初衷是作为MySQL的替代品
sqlite:小型数据库,携带方便但功能较少,主要用于本地测试使用
sql server:老牌数据库软件,目前主流不用
- 非关系型数据库
非关系型:
没有固定的表结构,数据存取采用K:V键值对的形式(最主要的特征)
并且表与表之间无法建立代码层面的关系
常见数据库名称:
Redis、MongoDB、Memcache
Redis:目前最火的非关系型数据库,数据类型丰富,功能强大
MongoDB:最像关系型数据库的非关系型数据库,主要用于爬虫和大数据
Memcache:被redis取代了
SQL与NoSQL数据库服务端支持很多客户端来链接使用,比如有数据库自带的客户端、python代码编写的、java代码编写的等等
如何让服务端兼容诸多客户端,实现正常交互
- 方式1:让服务端识别并自动切换对应语言
- 方式2:统一沟通标准:SQL语句与NoSQL语句
SQL语句:与关系型数据库交互的语言 NoSQL语句:与非关系型数据库交互的语言
SQL有时候用来标识关系型数据库,有时候表示SQL语句
NoSQL有时候用来标识非关系型数据库,有时候表示NoSQL语句
MySQL 版本问题5.6X:使用最为广泛的稳定版本 5.7X:目前正在逐步过渡使用的版本 8.0X:最新版本 暂时不投入正常生产环境使用(其实很好用!!!)
下载使用官网:https://www.mysql.com/
基本使用必须要先启动服务端,再启动客户端链接
以管理员身份运行cmd>>>启动服务端>>>启动客户端链接服务端
不带用户名和密码是游客模式(只能体验基本功能)
系统服务不想切换路径,直接输入命令
解决措施:添加环境变量
不想自己启动服务端,设置成开机自启动
解决措施:编写固定的指令
- 以管理员的身份打开cmd窗口:mysqld --install
- 初次启动需要人为干预:net start mysql
- 关闭所有的cmd 随意打开一个cmd窗口:输入mysql
- 移除系统服务
先停止服务端:net stop mysql(管理员身份运行cmd)
移除系统服务:mysqld --remove
修改密码直接输入mysql登录:默认是游客模式,没有太多操作的权限
使用用户名和密码的方式登录:不用考虑用户管理,直接使用root用户(管理员账号):mysql -u用户名 -p密码
管理员账号登录:第一次登录,没有密码,直接回车即可
mysql -uroot -p 直接回车,提示输入密码
修改管理员密码:
- 方式1:在cmd窗口下直接修改(不要登录进去)
mysqladmin -u用户名 -p原密码 password 新密码
第一次无密码修改,-p后面不写即可
- 方式2:登录状态下修改当前用户密码(先登录)
set password=PASSWORD('新密码')
如何区分当前是否是游客模式:show database
结果如果是两条 表示是游客
结果如果是四条及以上 表示是用户
重要概念库:文件夹
表:文件
记录:文件中一行数据
show databases:查看所有的库名称
类似于查看data文件夹内文件夹的名称
SQL语句使用分号作为结束符
操作库的基本SQL语句- 查
- show databases:查看所有的库名称
- show create database 库名:指定查看某个库的信息
- 增
- create database 库名
- 改
- alter database 库名 charset='gbk':修改字符编码
- 删
- drop database 库名
以后进入公司 每个账号都会有权限管理 不可能轻易做到
操作表的基本SQL语句表是存放于库下面的,所以操作表之前,应该先确定库
如何查看当前在哪个库下:select database()
结果如果是NULL表示当前没有切换到任何库下
如何切换到指定库下:use 库名
我们在操作库、表、记录的时候,MySQL默认自带的都不要动
- 查
- show tables:查看当前库下所有的表名称
- show crate table 表名:指定查看某个表的信息
- describe 表名:指定查看表的字段信息 ,简写 desc 表名
- 增
- create table 表名( 字段名称1 字段类型1, 字段名称2 字段类型2 );
- 改
- alter table 表名 rename 新表名;:修改表名
- 删
- drop table 表名;
要想操作记录,肯定得先有库和表
- 查
- select * from 表名;:查看表里面所有的数据
- select * from 库名.表名;:查看指定库下面的指定表里面的所有数据
- 有些表里面的字段太多,展示的时候会错乱,可以考虑逐行展示:select * from 库名.表名\G;
- select Host,User from mysql.user :查看指定字段
增
- insert into 表名 values(值1,值2);:单条数据
- insert into 表名 values(值1,值2),(值3,值4);:多条数据
改
- update 表名 set 字段=新值 where 筛选条件;
update t1 set name='jasonNB' where id=1;
将id是1的数据中name字段对应的值改成jasonNB
删
- delete from 表名 where 筛选条件;
delete from t1 where id=3;
将id是3的数据删除