python学习-Day45-MySQL

目录

image

数据库

数据演变史

# 1.单独的文本文件 	没有固定的存放位置:C:\a.txt D:\aaa\c.txt F:\bbb\b.txt   没有固定的数据格式:jason|123 tony$123 kevin~123   '''程序彼此无法兼容 没有统一的标准'''  # 2.软件开发目录规范 	按照文件功能的不同规定了相应的位置   '''文件查找变得统一 但是没有解决格式问题(核心问题)'''    # 3.数据库应用 	解决了存放位置和数据格式问题   '''将数据处理部分统一了起来''' 

数据库应用发展史

# 1.单机游戏阶段 	数据各自保存在各自的计算机上 无法实现远程共享   '''无需互联网'''  # 2.多机游戏阶段 	数据统一基于网络保存到某个固定的服务器上 实现数据共享   '''必须要有互联网'''   集群 	如果所有的数据全部存储到一台远程服务器上  		那么数据的安全性降低 服务器的压力上升 	所以增加远程服务器的数量 数据同步保存 任务均匀分担 		具有相同功能的多个服务器组合到一起 就可以称之为是集群  

数据库本质

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。  每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。  
 数据库在微观层面上来说 	运行在计算机上专门处理数据的进程(程序) 		eg:内存中的typora代码 数据库在宏观层面上来说 	提供给操作者一个简单快捷的操作进程的软件 		eg:屏幕上typora界面 我们平时在说数据库的时候大部分指的是操作数据库的应用软件  # 数据库软件的本质其实也是一款CS架构的软件 	既然数据库本质是一款CS架构的软件 也就意味着我们每个会网络编程的程序员理论上来说都可以编写出一款数据库软件   在目前地球上有很多牛逼的程序员 他们都具备编写数据库软件的能力 所以现在市面上其实存在很多数据库软件 

image

数据库分类

目前市面上有很多数据库软件 大致可以分为两类

关系型数据库

RDBMS 即关系数据库管理系统(Relational Database Management System)

所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

特点

1.数据以表格的形式出现(固定的表结构) 2.每行为各种记录名称 3.每列为记录名称所对应的数据域 4.许多的行和列组成一张表单 5.若干的表单组成database 

常见数据库名称:

# MySQL、Oracle、PostgreSQL、MariaDB、SQLite、SQL Server  'MySQL':是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。('关系型数据库的代表' 开源免费 使用频率极高)      'Oracle':是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。'它是一种高效率的、可靠性好的、适应高吞吐量的数据库方案。'(安全性极高,但是使用和维护收费,使用成本高)      'PostgreSQL':是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。PostgreSQL 开发者把它念作 post-gress-Q-L。PostgreSQL 的 Slogan 是 世界上最先进的开源关系型数据库。支持二次开发(自己嫁接、扩展功能)      'MariaDB':MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。(与MySQL是同一个作者,开发的初衷是作为MySQL的替代品)      'SQLite': 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。'SQLite 是在世界上最广泛部署的 SQL 数据库引擎。'SQLite 源代码不受版权限制。(小型数据库,携带方便但功能较少,主要用于本地测试使用)      'SQL Server': 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越(从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2012 的大型多处理器的服务器等)多种平台使用。(老牌数据库软件,目前主流不用) 

非关系型数据库

非关系型数据库是分布式的、非关系型的、不保证遵循ACID原则的数据存储系统。

特点

1. 存储⾮结构化的数据,⽐如⽂本、图⽚、⾳频、视频 2. 表与表之间没有关联,可扩展性强。 3. 保证数据的最终⼀致性。遵循BASE理论。 4. ⽀持海量数据的存储和⾼并发的⾼效读写。 5. ⽀持分布式,能够对数据进⾏分⽚存储,扩缩容简单 

常见数据库名称:

# Redis、MongoDB、Memcache  'Redis': 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。(目前最火的非关系型数据库 数据类型丰富 功能强大)      'MongoDB': 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。(最像关系型数据库的非关系型数据库 主要用于爬虫和大数据)      'Memcache':是一个高性能的分布式的内存对象缓存系统,用于动态Web应用以减轻数据库负担。(被redis取代了) 

区别

# 关系型数据库 	1.有固定的表结构(最主要的特征)      	2.并且表与表之间可以建立代码层面的关系      # 非关系型数据库 	1.没有固定的表结构 数据存取采用K:V键值对的形式(最主要的特征) 		{'name':'jason'} {'username':'jason','pwd':123} 	2.并且表与表之间无法建立代码层面的关系	 

诸多数据库软件 如何学习?

 	两大类数据库的操作方式几乎一致 学完一个其他都很容易上手 		eg:学习了MySQL 那么学其他关系型数据库很简单 			 学习了redis 那么学其他非关系型数据也很简单  
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。 

SQL与NoSQL

 数据库服务端支持很多客户端来链接使用 	数据库自带的客户端 python代码编写的 java代码编写的 ... 如何让服务端兼容诸多客户端 实现正常交互 	方式1:让服务端识别并自动切换对应语言 	方式2:统一沟通标准 相较之下方式2更加合理:SQL语句与NoSQL语句  SQL语句 	与关系型数据库交互的语言 NoSQL语句 	与非关系型数据库交互的语言  SQL有时候用来标识关系型数据库 有时候表示SQL语句 NoSQL有时候用来标识非关系型数据库 有时候表示NoSQL语句 

image

MySQL

简介

MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 

版本问题

5.6X:使用最为广泛的稳定版本 5.7X:目前正在逐步过渡使用的版本 8.0X:最新版本 暂时不投入正常生产环境使用(其实很好用!!!) 

下载使用

官网 : https://www.mysql.com/

1.点击步骤: 	downloads --> (GPL) Downloads --> MySQL Community Server --> Archives --> 选择版本和系统(以5.6.44为例) --> 点击下载对应的zip压缩包即可  	     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文件	说明书 

基本使用

windows系统

必须要先启动服务端 再启动客户端链接

# 以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即可登录服务端        '''不带用户名和密码 是游客模式(只能体验基本功能)''' 

mac系统

首先需要在系统偏好设置中打开MySQL

image

然后输入cd /usr/local/mysql/bin,(未配环境变量情况下)  然后输入./mysql -uroot -p 就可以启动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 jojo123          	# 方式2:登录状态下修改当前用户密码(先登录) 		set password=PASSWORD('新密码');  # 最新版不支持  
# 如何区分当前是否是游客模式  可以执行show database; 	结果如果是两条 表示是游客 	结果如果是四条及以上 表示是用户  

重要概念

'库' --类似于--> '文件夹'  '表' --类似于--> '文件'  '记录' --类似于--> '文件中一行行数据'  # eg: show databases;	# 查看所有的库名称 	类似于查看data文件夹内文件夹的名称 

SQL语句使用分号作为结束符

操作库的基本SQL语句

show databases;  # 查看所有的库名称 

ec

show create database 库名;  # 指定查看某个库的信息 

create database 库名; 

alter database 库名 charset='gbk';  # 修改字符编码 

drop database 库名; 

在公司内,每个账号都会有权限管理,无法轻易做到

image

操作表的基本SQL语句

表是存放于库下面的 所以操作表之前 应该先确定库

# 如何查看当前在哪个库下 	select database(); 		结果如果是NULL表示当前没有切换到任何库下          # 如何切换到指定库下 	use 库名;  '我们在操作库、表、记录的时候,MySQL默认自带的都不要动' 

要想操作记录 肯定得先有库和表

create database 库名; use 库名; 

select * from 表名;  # 查看表里面所有的数据 select * from 库名.表名;  # 查看指定库下面的指定表里面的所有数据 

有些表里面的字段太多 展示的时候会错乱 可以考虑逐行展示

select * from 库名.表名\G;  # 查看指定字段 ' \G就是逐行展示,不加就会都凑在一起,会很乱,不便于查看 ' 

或者

show tables;  # 查看当前库下所有的表名称 show crate table 表名;  # 指定查看某个表的信息 describe 表名;  # 指定查看表的字段信息,简写: desc 表名; 

insert into 表名 values(值1,值2);  # 单条数据 insert into 表名 values(值1,值2),(值3,值4);  # 多条数据 
create table 表名(     					字段名称1 字段类型1,   						字段名称2 字段类型2   ); 

update 表名 set 字段=新值 where 筛选条件; 
alter table 表名 rename 新表名;  # 修改表名 
alter table 表名 character set UTF8;  #修改表的字符编码为UTF8  

delete from 表名 where 筛选条件; 
drop table 表名; 

如果不加筛选条件就是删除所有的数据

image