初始数据库
数据库
一、数据库管理软件的由来
基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上。
如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,并没有问题。
很不幸,这些假设都是你自己想象出来的,上述假设存在以下几个问题
1、程序所有的组件就不可能运行在一台机器上
因为这台机器一旦崩溃则意味着整个软件的崩溃,并且程序的执行效率依赖于承载它的硬件,而一台机器的性能总归是有限的,受限于目前的硬件水平,就一台机器的性能垂直进行扩展是有极限的。
于是我们只能通过水平扩展来增强我们系统的整体性能,这就需要我们将程序的各个组件分布于多台机器去执行。
2、数据安全问题
根据1.1中的描述,我们将程序的各个组件分布到各台机器,但需知各组件仍然是一个整体,言外之意,所有组件的数据还是要共享的。但每台机器上的组件都只能操作本机的文件,这就导致了数据必然不一致。
于是我们想到了将数据与应用程序分离:把文件存放于一台机器,然后将多台机器通过网络去访问这台机器上的文件(用socket实现),即共享这台机器上的文件,共享则意味着竞争,会发生数据不安全,需要加锁处理。
3、并发
根据上述的描述,我们必须写一个socket服务端来管理这台机器(数据库服务器)上的文件,然后写一个socket客户端,完成如下功能:
1.远程连接(支持并发)
2.打开文件
3.读写(加锁)
4.关闭文件
4、总结
我们在编写任何程序之前,都需要事先写好基于网络操作一台主机上文件的程序(socket服务端与客户端程序),于是有人将此类程序写成一个专门的处理软件,这就是MySQL等数据库管理软件的由来,但MySQL解决的不仅仅是数据共享的问题,还有查询效率,安全性等一系列问题,总之,把程序员从数据管理中解脱出来,专注于自己的程序逻辑的编写。
二、数据库概述
1、什么是数据库(Database,简称DB)
数据库即存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的
过去人们将数据存放在文件柜里,现在数据量庞大,已经不再适用。数据库是长期存放在计算机内、有组织、可共享的数据即可。
数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种 用户共享
2.数据库的演变史
我们以ATM为例
-
把数据存放在单个文件里面
(1) 文件路径不固定,文件名不规范
eg:C:\aaa.txt D:\bbb.txt
(2) 数据格式也不规范
eg:kevin|123 kevin$123 kevin*123 -
软件目录开发规范
规定了数据应该保存在db目录下 >>> 路径偏向统一
(1) 文件名不规范
(2) 当数据量多的时候,会产生很多的文件,多次读取文件会占用大量的资源 -
数据库阶段
把数据单独存放在一台计算机上
统一路径 统一操作方式 统一数据格式
数据库能解决以上你所有遇到的问题.
3.数据存储的发展史
-
单机游戏阶段
数据各自保存在各自的电脑上,不能实现数据的共享 -
联网游戏
数据存储于网络中,可以共享(数据库服务)
把数据单独放在一个地方,数据库服务,C/S架构# 核心就是可以在计算机之间数据共享,数据库一定是基于网络的!!! '''以上所有遇到的问题核心都是基于数据的''' """ 数据库服务集群:提升数据的安全性 为了防止数据丢失,会做'备份' """
4.数据库的本质
数据库的本质其实就是cs架构的软件
cs架构的软件就必须有服务端和客户端,理论上来说,我们每个人都能写一款数据库出来,只不过是你写的数据库没人用,因此,市面上有很多牛逼的程序员,就写了很多的数据库软件,所以,你也会发现,现在市场上的确有很多的数据库
5.数据库的分类
-
关系型数据库
特征1:拥有固定的表结构(字段名、字段类型),类似于excel表格形式
表字段(表头):id name pwd
特征2:表与表之间可以建立关系比如:MySQL、Oracle、SqlServer、PostgreSQL、sqlite、MariaDB、db2、access
- MySQL:开源免费的,使用最广,性价比贼高
- Oracle:不开源,收费,使用成本较高但是安全性也最高,大多用在银行系统中,Java用的较多
- MariaDB:开源的,跟MySQL是一个作者,开源免费
- PostgreSQL:开源免费,支持二次开发(能够按照你的想法增加),兼容性极高
- sqlite:小型数据库,主要用于本地测试
-
非关系型数据库 (后面学习)
特征1:没有固定的表结构,它是以K:V键值对的形式存储数据
name------------------->kevin
age-------------------->20
特征2:数据之间无法建立数据库层面的关系。可以自己编写代码建立逻辑层面的关系比如:
- Redis缓存数据库(新项目使用):目前最火,使用频率最高的非关系型数据库
虽然缓存数据库是基于内存做数据存取但是拥有持久化的功能,速度非常快 - memcahce缓存数据库(老项目有在用):已经被redis淘汰
- MongoDB(爬虫):文档型数据库,最像关系型数据库的非关系型数据库
主要用在爬虫以及大数据领域
- Redis缓存数据库(新项目使用):目前最火,使用频率最高的非关系型数据库
"""
一个大型的软件,它都需要有关系型数据库和非关系型数据库搭配使用,关系型数据库用来做数据保存(持久化),非关系型数据库用来做数据查询。
"""
"""
虽然数据库软件有很多 但是操作方式大差不差 学会了一个几乎就可以学会所有,所有的数据库SQL语句都差不多
其中以MySQL最为典型,
"""
5.SQL与NoSQL
数据库服务端是可以服务多种类型的客户端。
客户端可以是自己开发的,也可以是python代码编写的,也可以是java代码编写的
服务端为了兼容各个客户端的交互,统一规定了交互格式:
- SQL
操作关系型数据库的语言 - NoSQL
操作非关系型数据库的语言
ps:要想跟数据库交互就必须使用数据库指定的语言
"""
SQL有时候也指代关系型数据库
NoSQL有时候也指代非关系型数据库
"""
MySQL简介
一、MySQL介绍
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
# 版本问题
4.x之前的版本直接忽略,不够稳定
5.6:老项目用的多,是最稳定的版本,学习推荐使用
5.7: 新老项目都在用,使用频率较高
8.x:最新版本
'''在IT界,生产环境中尽量不要使用最新版本,测试环境中用哪个版本都可以'''
# 任何软件,生产环境中,都要使用稳定版本,而不是追求最新版本
# 教学使用5.6版本,如果你下载了其他版本也无所谓
'''如果你之前的电脑装过mysql,而卸载的方式又不对,就有可能存在很多的残留垃圾文件,如果不删除掉,就有可能导致新的mysql装不上,装上之后,有可能启动不起来,反正就是各种问题!!!'''
# 如果你的电脑中确实存在了残留文件,怎么办呢?
利用一些杀毒软件,去检测你电脑上的残留文件,然后把检测出来的垃圾文件全部删除即可
二、下载安装
1.安装
第一步:访问官网,纯英文:https://www.mysql.com/
第二步:点击DOWNLOADS并点击最下面MySQL Community (GPL) Downloads »
第三步:点击community server
第四步:点击Archives,往期版本
第五步:选择对应系统的对应版本下载即可(zip压缩包),5.6.44,下载64-bit
下载下来之后,是一个zip的压缩包,去解压文件。如果想要让MySQL安装在指定目录,那么就将解压后的文件夹移动到指定目录。
2.mysql目录介绍
# bin
存放启动文件
mysql.exe(这个是mysql自带的客户端)
mysqld.exe(这个是mysql的服务端)
# data
'''它是mysql的存储数据的地方'''
# my-defalut.ini
这个是mysql默认的配置文件
# README
是说明文件
3.MySQL启动
第一步:先启动服务端,要去到bin路径下找到mysqld.exe启动文件
管理员身份启动服务端
第二步:启动客户端(新建一个cmd窗口出来),链接服务端(服务端的cmd窗口不能关闭)
第三步:ctrl + c是停止服务的, 退出客户端: exit
第四步:把mysqld服务端所在的路径加入到环境变量中
每次输入都要切换到具体的路径中,我们可以把bin目录加到环境变量中去。
右键计算机 --> 属性 --> 高级系统设置 --> 高级 --> 环境变量 --> 在第二个内容框中找到,变量名为Path 的一行,双击 --> 将MySQL的bin目录路径添加上
第五步:制作系统服务
这样每次都需要开启服务端,并且服务端不能关闭。我们可以制作系统服务,达到开机自启动操作。
4.制作系统服务
目的:就是可以随时关闭mysql的服务端,达到开启自启动,自关闭
第一步:先关闭已经启动的服务端,一定要把之前用cmd启动的服务端关闭(ctrl+c)
第二步:以管理员身份打开cmd窗口:
mysqld --install::mysql添加到系统服务中
如果只是普通方式没有权限,会报错:Install/Remove of the Service Denied!
第一次安装成功之后,服务并直接没有启动,需要手动启动一次
第三步:启动mysql服务的方式:
方式1: 鼠标点击启动按钮
方式2: net start mysql (管理员权限)
- 停止mysql服务
方式1: 鼠标点击停止
方式2: net stop mysql # (管理员权限)
- 如何卸载服务:把mysql从服务中去掉
(1) 先关闭服务
(2) mysqld --remove
# 如何退出客户端: exit
'''
打开服务的方式:
1. 在底部任务栏右键选择任务管理器 >>>>> 服务
2. 此电脑右键 >>> 管理 >>> 服务和应用程序 >>> 服务
3. win + r >>> 输入:services.msc >>> 回车
'''
# 如果想卸载重新安装
1.先关闭服务端
net stop mysql
2.移除系统服务
mysqld --remove
5.修改管理员密码
1.修改密码
方式一:使用mysqladmin系统修改密码
# 直接进入cmd后输入:mysqladmin (需要先退出客户端)
mysqladmin -u用户名 -p旧密码 password 新密码
具体使用:
mysqladmin -u root -p password 123
方式二:使用mysql客户端
# 需要登录客户端后使用,修改当前登录用户的密码
set password=PASSWORD('密码')
具体使用:
set password=PASSWORD('123')
管理员密码改完之后,一定要使用管理员账号登录,
不要使用游客模式,游客模式只能查看,权限很低。
mysql -u root -p密码
# 直接输入mysql登录是游客模式
2.忘记密码
第一步:停止服务端
net stop mysql
# 或手动关闭
第二步:用跳过授权表的形式再次启动服务端
'跳过授权表'方式是,客户端在登录mysql的时候,只需要输入用户名即可,不再验证密码
mysqld --skip-grant-tables
第三步:用管理形式登录客户端之后,进行mysql.user表操作数据
mysql.user表:此表用于存储当前的服务信息数据
# 重开一个cmd窗口
update mysql.user set password=password('123') where Host='localhost' and User='root';
第四步:退出客户端,终止服务端
第五步:不要在使用跳过授权表了,正常启动服务
三、数据库重要概念
- 库 就相当于是 文件夹
- 表 就相当于是 文件夹里面的文件
- 记录 就相当于是 文件夹里面的文件中的一行行数据
SQL语句
一、基本SQL语句
1.查看所有的数据库名称(mysql的data下的文件夹)
show databases; # 查看所有数据库,一个名字就是一个库
2.查看当前库所有的表名称
show tables;
3.查看所有的记录
select * from mysql.user;
select * from user; # 如果在mysql库下,就直接写
select * from mysql.user/G; # 格式化展示,竖向形式
4. 查看当前在哪个库下
select database();
'''
sql语句必须以分号结尾
sql语句编写错误之后不用担心,
可以直接执行,直接报错
或者取消执行,在语句后面加\c
'''
二、针对库的sql语句
'''基于库的增删改查'''
# mysql自带的库,不要对其进行操作
1.创建库/增加库
create database 库名;
2.查看库
show databases; 查看所有库
show create database 库名; 查看指定库信息
3.编辑库/修改库 # 一般很少用,甚至于不用
alter database 库名 charset='gbk' 修改库的字符编码格式
4. 删除库
drop database 库名;
三、针对表的sql语句
'''基于表的增删改查'''
操作表之前需要先确定库
create database 库名;
切换操作库
use 库名;
1.创建表/增加表
create table 表名(字段名1 字段类型,字段名2 字段类型);
2. 查看表
show tables; 查看库下的所有表名称
show create table 表名; 查看指定表信息 # 使用频率不高
describe 表名; 查看表结构
简写:desc 表名;
ps:如果想跨库操作其他表 只需要在表名前加库名即可
desc mysql.user;
3. 编辑表/修改表
alter table 表名 rename 新表名; 修改表名
4. 删除表
drop table 表名;
四、针对记录的sql语句
'''基于记录的增删改查'''
1.添加数据/插入数据
insert into 表名 values(数据值1,数据值2); # 目前表内有几个字段就添加几个数据值
2.查询数据
select * from 表名; 查询表中所有的数据
select 字段 from 表名; 查询表中该字段的数据
select 字段1,字段2 from 表名;
3.编辑数据
update 表名 set 字段名=新数据 where 筛选条件;
4.删除数据
delete from 表名; 删除整个表的所有数据
delete from 表名 where id=2; 只删除id=2的这行数据