数据库简介、安装以及基本sql语句
数据存取演变史
-
文本文件
文件路径不一致:C:\a.txt D:\aaa\b.txt E:\ccc.txt
数据格式不一致:jason|123 tony$123 kevin@123
-
软件开发目录规范
规定了数据文件的大致存储位置:db文件夹
针对数据格式还是没完全统一:比如统一json文件但是内部键值对不同
-
数据库服务
统一了存取位置,也统一了数据格式(完全统一)
数据库软件应用史
-
单机游戏
不同计算机上的相同程序,数据无法共享。数据库服务全部在本地完成
-
网络游戏
不同计算机上的相同程序,数据可以共享。数据库服务单独在网络架设(远程数据库服务)
-
补充
远程数据库服务中,数据库集群基本解决了数据库安全性问题、服务器负载问题(让多台服务器运行相同的数据库服务)
数据库的本质
数据库在不同的角度下描述的意思不一样
-
站在底层原理的角度
数据库指的是专门用于操作数据的过程
eg:运行在内存中的代码
-
站在现实应用的角度
数据库指的是拥有操作界面的应用程序
eg:用于操作进程的界面
我们不做特殊说明的情况下提数据库其实都是在指数据库软件,也可以称数据库软件的本质是一款cs架构的应用程序,言外之意所有的程序员理论上都可以编写。市面上已经有很多数据库软件
数据库的分类
关系型数据库
-
数据的组织方式有明确的表结构
id name password
关系型数据库的存取数据的方式可以看成是表格
-
表与表之间可以建立数据库层面的关系
即两张表或多张表可以通过外键等关系进行关联查询
用户表 房屋表---->可以根据用户表的用户查找房屋表中用户的房屋信息
只要获取到用户表的一条数据,就可以获取到与之相关的其他表的数据
常见的关系型数据库有:MySQL、PostgreSQL、MariaDB、Oracle、sqlite、db2、sql server
- MySQL:开源、使用最为广泛、数据库学习必学
- PostgreSQL:开源、支持二次开发
- MariaDB:开源、与MySQL是同一个作者、用法也极其相似
- Oracle:收费、安全性极高、主要用于银行及各大重要机关
- sqlite:小型数据库、主要用于本地测试(django框架自带该数据库)
非关系型数据库
-
数据的组织方式没有明确的表结构,是以k:v键值对的形式组织的
{'name':'jason'}
{'username':'jerry','pwd':123}
-
数据之间无法直接建立数据库层面的关系
NoSQL
常见的非关系型数据库有:redis、mongoDB、memcache
- redis:目前最火、使用频率最高的缓存型数据库(数据在加载在内存中进行查询,速度极快)
- mongoDB:稳定型数据库、最像关系型的非关系型、主要用于爬虫、大数据
- memcache:已经被redis淘汰
MySQL简介
虽然数据库软件很多,但是底层操作几乎一致,学会一个其他的都可以快速上手。学会了MySQL基本就可以快速上手所有的关系型数据库甚至非关系型数据库
-
MySQL版本问题
5.6X:前几年使用频率最高的版本
5.7X:最近尝试迁移的版本(频率+)
8.0X:最新版、功能很强大、但是线上环境几乎不同(本地自己用非常好用)
虽然版本有区别,但是操作上几乎没有区别、主要体现在底层运作
-
下载与安装
- 访问官网
- 点击DOWNLOADS
- 点击GPL
- 点击community server
- 点击archives
- 点击download
-
解压安装
上诉方式下载的压缩包里还有服务端和客户端,支持本地操作
-
主要文件介绍
bin文件夹:mysqld.exe服务端 mysql.exe(客户端)
data文件夹:存取数据
My-default.ini:默认配置文件
基本使用(windows)
-
先启动服务端
可能会报错,拷贝关键信息去百度
-
查找mysqld文件位置
mysqld:cmd窗口就是服务端,不要关闭
-
再次开启新的cmd窗口
mysql:直接回车会以 游客模式进入,功能很少
-
用户名密码登录
mysql -u用户名 -p密码:mysql默认管理员账号,用户名是root,密码是空 # 首次启动情况下
-
退出
exit quit
系统服务制作
如何解决每次都需要切换路径查找文件的缺陷: 添加环境变量
将mysql服务端制作成系统服务(随着计算机的开启而启动,关闭而结束)
1.以管理员身份打开cmd窗口
2.执行系统服务命令
# 执行系统服务命令
mysqld --install
# 启动服务端(两种)
# 1.右键直接点击启动
# 2.命令启动
net start mysql
# 查看系统服务的命令
services.msc
# 关闭mysql服务端
net stop mysql
# 移除系统服务
1.先确保服务已经关闭
2.执行移除命令
mysqld --remove
密码相关操作
修改密码
mysqladmin
命令
# 通用方式 直接在cmd中写
mysqladmin -u用户名 -p原密码 password 新密码
# 第一次修改
mysqladmin -u root -p password 123
# 第二次修改
mysqladmin -u root -p123 password 321
# 偏门方式(有些版本无法使用): 需要先登录
set password=PASSWORD(新密码);
忘记密码
解决方式1:直接重装、拷贝对应文件
解决方式2:先关闭服务端,然后以不需要校验用户身份的方式启动、在修改、最后再安全正常方式启动
# 关闭服务端
net stop mysql
# 以不需要校验用户的方式启动mysql
mysqld --skip-grant-tables
# 无密码就可以登录
mysql -uroot -p
# 在mysql库的user用户表中修改密码即可
update mysql.user set password=password(123) where Host='localhsot' and User='root'
# 重启mysql
net stop mysql
net start mysql
SQL与NoSQL
数据库的服务端支持各种语言充当客户端
以mysql服务端为例:mysql客户端、python代码编写的客户端、java编写的客户端
为了能够兼容所有类型的客户端,有两种策略
- 服务端兼容:不合理、消耗数据库服务端资源
- 指定统一标准:SQL语句、NoSQL语句
SQL与NoSQL
- SQL语句的意思是操作关系型数据库的语法
- NoSQL语句的意思是操作非关系型数据库的语法
SQL有些时候也用来表示关系型数据库,NoSQL也用来表示非关系型数据库
数据库重要概念
下述概念仅仅是诶了小白更快的理解,并不是完全的准确
库 ---> 文件夹
表 ---> 文件夹里面的文件
记录 ---> 文件里一行行的数据
show databases; -- 查看所有的数据库
show tables; -- 查看库下所有的表
select * from mysql.user; -- 查看mysql库下user表中的所有的记录
补充
- SQL语句结束符是分号:
;
- 取消SQL语句的执行:
\c
针对库的基本SQL语句
-- 增
create database 库名;
-- 查
show databases;
show create database 库名;
-- 改
alter database 库名 charset='gbk';
-- 删
arop database 库名;
针对表的基本SQL语句
-- 查看当前所在的库名
select database(); -- 如果没有进入库,那么就是NULL, use 库名;
-- 增
create table 表名(字段名 字段类型,字段名 字段类型...);
-- 查
show tables; -- 查询当前所在库的所有表名
show create table 表名; -- 查询建表语句
describe/desc 表名; -- 查询表结构
-- 改
alter table 旧表名 rename 新表名; -- 改表明
-- 删
drop table 表名;
针对记录的基本SQL语句
-- 增
insert into 表名 values(数据,数据);
insert into 表名 values(数据,数据),(数据,数据),(数据,数据),(数据,数据);
-- 查
select * from 表名; -- 查看表的所有数据
select 字段1,字段2 from 表名; -- 查看表中字段1,字段2的数据
-- 改
update 表名 set 字段名=新数据 where 筛选条件;
-- 删
delete from 表名; -- 删除整张表
delete from 表名 where 筛选条件 -- 按照筛选条件删除数据