数据发展历史,及MySQL基本操作
数据演变史
单独的文本文件
没有固定的存放位置:C:\a.txt D:\aaa\c.txt F:\bbb\b.txt 没有固定的数据格式:jason|123 tony$123 kevin~123 '''程序彼此无法兼容 没有统一的标准'''
软件开发目录规范
按照文件功能的不同规定了相应的位置 # 缺点: 虽然存储目录相同了,但是每个人数据格式都不相同 程序之间无法兼容
数据库应用
解决了存放位置和数据格式问题 '''将数据处理部分统一了起来'''
数据库应用发展史
单机游戏阶段
数据各自保存在各自的计算机上 无法实现远程共享 '''无需互联网'''
多机游戏阶段
数据统一基于网络保存到某个固定的服务器上 实现数据共享 '''必须要有互联网'''
集群
如果所有的数据全部存储到一台远程服务器上 那么数据的安全性降低 服务器的压力上升 所以增加远程服务器的数量 数据同步保存 任务均匀分担 具有相同功能的多个服务器组合到一起 就可以称之为是集群
数据库本质
数据库在微观层面上来说 运行在计算机上专门处理数据的进程(程序) eg:内存中的typora代码 数据库在宏观层面上来说 提供给操作者一个简单快捷的操作进程的软件 eg:屏幕上typora界面 我们平时在说数据库的时候大部分指的是操作数据库的应用软件 # 数据库软件的本质其实也是一款CS架构的软件 既然数据库本质是一款CS架构的软件 也就意味着我们每个会网络编程的程序员理论上来说都可以编写出一款数据库软件 在目前地球上有很多牛逼的程序员 他们都具备编写数据库软件的能力 所以现在市面上其实存在很多数据库软件
数据库分类
关系型数据库
1.有固定的表结构(最主要的特征) eg:有固定字段的excel表格 id name gender 2.并且表与表之间可以建立代码层面的关系 eg:用户表与房屋表 用户买房 那么用户数据和房屋数据就应该有关系 # 常见数据库名称: 'MySQL、Oracle、PostgreSQL、MariaDB、sqlite、sql server' MySQL:关系型数据库的代表 开源免费 使用频率极高 Oracle:安全性极高 但是使用和维护收费 使用成本高 PostgreSQL:支持二次开发(自己嫁接、扩展功能) MariaDB:与MySQL是同一个作者 开发的初衷是作为MySQL的替代品 sqlite:小型数据库 携带方便但功能较少 主要用于本地测试使用 sql server:老牌数据库软件 目前主流不用
非关系型数据库
1.没有固定的表结构 数据存取采用K:V键值对的形式(最主要的特征) {'name':'jason'} {'username':'jason','pwd':123} 2.并且表与表之间无法建立代码层面的关系 常见数据库名称: 'Redis、MongoDB、Memcache' Redis:目前最火的非关系型数据库 数据类型丰富 功能强大 MongoDB:最像关系型数据库的非关系型数据库 主要用于爬虫和大数据 Memcache:被redis取代了!!!
SQL与NoSQL
数据库服务端支持很多客户端来链接使用 数据库自带的客户端 python代码编写的 java代码编写的 ... 如何让服务端兼容诸多客户端 实现正常交互 方式1:让服务端识别并自动切换对应语言 方式2:统一沟通标准 相较之下方式2更加合理:SQL语句与NoSQL语句 SQL语句 与关系型数据库交互的语言 NoSQL语句 与非关系型数据库交互的语言 SQL有时候用来标识关系型数据库 有时候表示SQL语句 NoSQL有时候用来标识非关系型数据库 有时候表示NoSQL语句
MySQL简介
版本问题
5.6X:使用最为广泛的稳定版本 5.7X:目前正在逐步过渡使用的版本 8.0X:最新版本 暂时不投入正常生产环境使用(其实很好用!!!) 版本问题不会影响我们的学习 因为SQL语句是一样的 只不过底层有变化 目前不用考虑
下载使用
官网:https://www.mysql.com/
# 点击步骤: downloads (GPL) Downloads MySQL Community Server Archives 选择版本和系统(以5.6.44为例) 点击下载对应的zip压缩包即可 讲解以windows为基准 mac和linux参考下列博客 linux:https://www.cnblogs.com/Dominic-Ji/p/15124625.html mac:https://www.cnblogs.com/Dominic-Ji/articles/15402755.html 2.解压处理 建议压缩到D或者E、F盘的根目录方便查找 mysql-5.6.44-winx64.zip mysql-5.6.44-winx64
目录结构
bin文件夹 mysqld.exe 服务端 mysql.exe 客户端 '''学习阶段服务端在本地启动即可''' data文件夹 存放数据 my-default.ini文件 默认配置文件 README文件 说明书
基本使用
必须要先启动服务端 再启动客户端链接 以D:\mysql-5.6.44-winx64为例 1.以管理员身份运行cmd 切换到bin路径下 D: cd mysql-5.6.44-winx64\bin 2.启动服务端 mysqld # 维持cmd窗口不要关闭 重新打开一个新的cmd窗口 3.启动客户端链接服务端 先切换到bin路径下 D: cd mysql-5.6.44-winx64\bin 然后直接输入mysql即可登录服务端 '''不带用户名和密码 是游客模式(只能体验基本功能)''' 启动服务端的时候 有些同学的电脑可能会报错 解决策略 拷贝报错信息 百度搜索 mysql启动报错'错误代码'
系统服务
1.我们不想切换路径 直接输入命令 2.我们不想自己启动服务端 设置成开机自启动(消耗的资源很少 不要担心) # 针对第一个点的解决措施就是添加环境变量 将D:\mysql-5.6.44-winx64\bin添加到系统环境变量 # 针对第二个点的解决措施就是编写固定的指令即可 1.先确保之前测试的服务端关闭(直接点击关闭即可) 2.重新以管理员的身份打开cmd窗口 mysqld --install # 结果大致显示: ... successfully 3.初次启动需要人为干预 net start mysql 4.关闭所有的cmd 随意打开一个cmd窗口 输入mysql即可链接到服务端 如果想要移除系统服务 1.先停止服务端 net stop mysql 管理员身份运行cmd 2.移除系统服务 mysqld --remove
修改密码
1.直接输入mysql登录 默认是游客模式 没有太多操作的权限 2.使用用户名和密码的方式登录 # 学习阶段不用考虑用户管理 直接使用root用户(管理员账号) mysql -u用户名 -p密码 # 管理员账号登录(第一次登录 没有密码 直接回车即可) mysql -uroot -p 直接回车 提示输入密码 3.修改管理员密码 方式1:在cmd窗口下直接修改(不要登录进去) mysqladmin -u用户名 -p原密码 password 新密码 '''第一次无密码修改 -p后面不写即可''' mysqladmin -uroot -padmin123 password jason123 方式2:登录状态下修改当前用户密码(先登录) set password=PASSWORD('新密码'); # 最新版不支持
区分当前是否是游客模式
show databases 如何区分当前是否是游客模式 可以执行show databases; 结果如果是两条 表示是游客 结果如果是四条及以上 表示是用户
重要概念
1.什么是数据(Data)? 事物的状态 2.什么是记录? 一组数据结构成一条记录,相当于文件中的一行内容,如1,tanke,male,18 3.什么是表? 文件 4.什么是库? 文件夹 show databases; 查看所有的库名称 类似于查看data文件夹内文件夹的名称
操作库的基本SQL语句
强调
SQL语句使用分号作为结束符
查
show databases; # 查看所有的库名称 show create database 库名; # 指定查看某个库的信息
增
create database 库名; # eg: 创建一个xiangcai的库: create database xiangcai; # 成功后提示信息 Query OK, 1 row affected (0.00 sec)
改
alter database 库名 charset='gbk'; # 修改字符编码 # eg: alter database xiangcai charset = 'gbk'; # 成功后提示信息 Query OK, 1 row affected (0.00 sec)
删
drop database 库名; 指谁删谁,我不演示,我还用xiangcai往下写了
操作表的基本SQL语句
如何查看当前在哪个库下
'表是存放于库下面的 所以操作表之前 应该先确定库' select database(); '结果如果是NULL表示当前没有切换到任何库下'
如何切换到指定库下
use 库名; # Database changed 就表示切换成功 强调:我们在操作库、表、记录的时候 MySQL默认自带的都不要动
查
show tables; # 查看当前库下所有的表名称 show create table 表名; # 指定查看某个表的信息 describe 表名; # 指定查看表的字段信息 简写 desc 表名;
增
create table 表名( 字段名称1 字段类型1, 字段名称2 字段类型2 ); # eg: 创建一个id,一个name,id为int类型,name为字符串类型 create table t1(id int,name varchar(32)); # 成功提示信息 Query OK, 0 rows affected (0.02 sec)
改
alter table 表名 rename 新表名; # 修改表名 # eg: alter table t1 rename eatxiangcai; Query OK, 0 rows affected (0.01 sec)
删
drop table 表名; # eg: drop table eatxiangcai; Query OK, 0 rows affected (0.01 sec)
操作记录的基本SQL语句
要想操作记录 肯定得先有库和表
查
select * from 表名; # 查看表里面所有的数据 select * from 库名.表名; # 查看指定库下面的指定表里面的 # *号表示所有 有些表里面的字段太多 展示的时候会错乱 可以考虑逐行展示 select * from 库名.表名\G; # 查看指定字段 select 字段名,字段名(多个用逗号隔开) from 库名.表名; # eg: select id,name from xiangcai.t1; # 查看指定字段
增
insert into 表名 values(值1,值2); # 单条数据 insert into 表名 values(值1,值2),(值3,值4); # 多条数据 # eg: insert into t1 values(1,'tuzi'); # Query OK, 1 row affected (0.00 sec) mysql> insert into t1 values(2,'jason'),(3,'kevin'); # Query OK, 2 rows affected (0.00 sec) # Records: 2 Duplicates: 0 Warnings: 0
改
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的数据删除''' 如果不加筛选条件就是删除所有的数据