数据库简介
什么是数据库
# 什么是数据库 1、顾名思义,数据库(DB,database)是按照数据结构来组织、存储和管理数据的“仓库”。 2、数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度的特点的、与应用程序彼此独立的数据集合。 3、数据库可以通过统一的一些指令对数据进行增、删、改、查(Create,Retrive,Updata,Delete)等操作。 4,看作是冰箱,可以存取物品的地方
数据库作用
# 实现数据共享: 数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库,并提供数据共享。 # 减少数据的冗余度: 同文件系统相比,由于数据库实现了数据共享,从而避免了用户各自建立应用文件。减少了大量重复数据,减少了数据冗余,维护了数据的一致性。 # 保持数据的独立性: 数据的独立性包括逻辑独立性(数据库中数据库的逻辑结构和应用程序相互独立)和物理独立性(数据物理结构的变化不影响数据的逻辑结构)。 # 数据实现集中控制: 文件管理方式中,数据处于一种分散的状态,不同的用户或同一用户在不同处理中其文件之间毫无关系。利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。 # 数据一致性和可维护性: 以确保数据的安全性和可靠性:主要包括:安全性控制、完整性控制、并发控制,使在同一时间周期内,允许对数据实现多路存取,又能防止用户之间的不正常交互作用。 # 故障恢复: 由数据库管理系统提供一套方法,可及时发现故障和修复故障,从而防止数据被破坏。数据库系统能尽快恢复数据库系统运行时出现的故障,可能是物理上或是逻辑上的错误。比如对系统的误操作造成的数据错误等
数据演变史
# 1.单独的文本文件 没有固定的存放位置:C:\a.txt D:\aaa\c.txt F:\bbb\b.txt 没有固定的数据格式:jason|123 tony$123 kevin~123 '''程序彼此无法兼容 没有统一的标准''' # 2.软件开发目录规范 按照文件功能的不同规定了相应的位置 '''文件查找变得统一 但是没有解决格式问题(核心问题)''' # 3.数据库应用 解决了存放位置和数据格式问题 '''将数据处理部分统一了起来 完成数据之间的格式与存储位置统一'''
数据库应用发展史
单机模式
'只保存本地自己数据,彼此不共享(单机模式)' 优点:不需要链接网络 缺点:限制于在一台计算机玩,如果你计算机坏掉了,在换一台,那这些记录都没有。换一台电脑登录是没有记录的,还是初始化状态
联机模式
# 数据存储全部统一在相同的地方完成 不在本地保存数据。所有人基于网络把自己的数据存储到相同的位置,数据存储的格式都相同,访问的格式也相同,所以不管在那台计算机上,登录账号密码就可以访问到我们存储在数据库的信息,这样就实现了兼容问题。
集群
集群一般由两个或两个以上的服务器组建而成,每个服务器被称为一个集群节点,集群节点之间可以相互通信 集群中,同样的服务可以由多个服务实体提供。因此,当一个节点出现故障时,集群的另一个节点,可以自动接管故障节点的资源,从而保证服务持久、不间断地运行。因而集群具有故障 自动转移功能。 一个集群系统必须拥有共享的数据存储,因为集群对外提供的服务是一致的,任何一个集群节点运行一个应用时,应用的数据集中存储在节点共享空间内,而每个节点的操作系统上仅运行应用的服务,同时存储应用程序文件 '''如果所有的数据全部存储到一台远程服务器上 那么数据的安全性降低 服务器的压力上升 所以增加远程服务器的数量 数据同步保存 任务均匀分担 具有相同功能的多个服务器组合到一起 就可以称之为是集群'''
数据库的本质
数据库在微观层面上来说 运行在计算机上专门处理数据的进程(程序) eg:内存中的typora代码 数据库在宏观层面上来说 提供给操作者一个简单快捷的操作进程的软件 eg:屏幕上typora界面 我们平时在说数据库的时候大部分指的是操作数据库的应用软件 # 数据库软件的本质其实也是一款CS架构的软件 既然数据库本质是一款CS架构的软件 也就意味着我们每个会网络编程的程序员理论上来说都可以编写出一款数据库软件 在目前地球上有很多牛逼的程序员 他们都具备编写数据库软件的能力 所以现在市面上其实存在很多数据库软件
数据库的分类
关系型数据库
# 常见数据库名称: MySQL、Oracle、PostgreSQL、MariaDB、sqlite、sql server ''' 1.有固定的表结构(最主要的特征) eg:有固定字段的excel表格 id name gender 2.并且表与表之间可以建立代码层面的关系 eg:用户表与房屋表 用户买房 那么用户数据和房屋数据就应该有关系 ''' # sql server 微软公司的产品,主要应用于大中型企业,如联想、方正等。 老牌数据库软件 目前主流不用 # oracle 收费 维护成本高 大型公司可能会使用 主要用于银行、铁路、飞机场等。该数据库功能强大,软件费用高。 也是甲骨文公司的产品。 # MySQL 开源免费 使用非常规范 主要用于大型门户,例如搜狗、新浪等,它主要的优势就是开放源代码 因为开放源代码这个数据库是免费的,他现在是甲骨文公司的产品 # MariaDB MySQL的替代产品(并且有自己的特性) SUN被甲骨文收购后,MySQL 的原创人员有拉出另外一个分支, 命名MariaDB 。该数据库被维基百科,Facebook 甚至 Google 等技术巨头使用。 MariaDB 是一种可为 MySQL 提供插件替换功能的 数据库服务器。开发人员的首要关注点是安全性,在每个版本发布时, 开发人员还会合并所有 MySQL 的安全修补程序, 并在需要时对其进行增强。 # PostgreSQL 支持二次开发(自己嫁接、扩展功能) # sqlite 小型数据库(django框架自带该数据库) 携带方便但功能较少 主要用于本地测试使用
非关系型数据库
''' 1.没有固定的表结构 数据存取采用K:V键值对的形式(最主要的特征) {'name':'jason'} {'username':'jason','pwd':123} 2.并且表与表之间无法建立代码层面的关系 数据存储采用K:V键值对的形式 ''' # 常见数据库名称: Redis:目前最火的非关系型数据库 数据类型丰富 功能强大 MongoDB:最像关系型数据库的非关系型数据库 主要用于爬虫和大数据 Memcache:被redis取代了(多用来作为缓存)
SQL与NoSQL
数据库服务端支持很多客户端来链接使用 数据库自带的客户端 python代码编写的 java代码编写的 ... 如何让服务端兼容诸多客户端 实现正常交互 方式1:让服务端识别并自动切换对应语言 方式2:统一沟通标准 相较之下方式2更加合理:SQL语句与NoSQL语句 SQL语句 与关系型数据库交互的语言 NoSQL语句 与非关系型数据库交互的语言
MySQL简介
# MySQL介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一 # 版本问题 5.6X:使用最为广泛的稳定版本 5.7X:目前正在逐步过渡使用的版本 8.0X:最新版本 暂时不投入正常生产环境使用(其实很好用!!!) 版本问题不会影响我们的学习 因为SQL语句是一样的 只不过底层有变化 目前不用考虑 # 下载使用 官网:https://www.mysql.com/ 1.点击步骤: 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文件 说明书 # MySQL的特点与优势 1.MySQL 是开放源代码的数据库 2.MySQL 的跨平台性 3.功能强大且使用方便
基本使用
必须要先启动服务端 再启动客户端链接 以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启动报错'错误代码'
修改密码
# 直接输入mysql登录 默认是游客模式 没有太多操作的权限 #使用用户名和密码的方式登录 学习阶段不用考虑用户管理 直接使用root用户(管理员账号) mysql -u用户名 -p密码 ' # 管理员账号登录(第一次登录 没有密码 直接回车即可)' mysql -uroot -p 直接回车 提示输入密码 # 修改管理员密码 方式1:在cmd窗口下直接修改(不要登录进去) mysqladmin -u用户名 -p原密码 password 新密码 '''第一次无密码修改 -p后面不写即可''' mysqladmin -uroot -padmin123 password jason123 方式2:登录状态下修改当前用户密码(先登录) set password=PASSWORD('新密码'); # 最新版不支持 如何区分当前是否是游客模式 可以执行show database; 结果如果是两条 表示是游客 结果如果是四条及以上 表示是用户
忘记密码操作流程
1.关闭mysql服务 net stop mysql # 管理员身份运行 2.以跳过授权表的方式重新启动(表就是存储用户的密码) mysqld --skip-grant-tables 3.重新打开一个cmd(重新开启新cmd) mysql -uroot -p # 验证密码直接回车 查看当前数据库(存储密码表) select * from mysql.user\G; 3.修改指定用户的密码(重置密码) update mysql.user set password=password(123) where user=root and host=localhost; # 修改对应用户的密码 4.退出客户端并且以正常的方式重新启动服务端(当前数据库不校验所有人密码) exit; 5.密码修改成功以正常方式启动 net start mysql # 管理员启动
操作库的基本SQL语句
# 查 show databases; # 查看所有的库名称 show create database 库名; # 指定查看某个库的信息 # 增 create database 库名; # 改 alter database 库名 charset='gbk'; # 修改字符编码 # 删 drop database 库名; '''以后进入公司 每个账号都会有权限管理 不可能轻易做到'''
操作表的基本SQL语句
表是存放于库下面的 所以操作表之前 应该先确定库 如何查看当前在哪个库下 select database(); 结果如果是NULL表示当前没有切换到任何库下 如何切换到指定库下 use 库名; 强调我们在操作库、表、记录的时候 MySQL默认自带的都不要动 create database 库名; use 库名; # 查 show tables; # 查看当前库下所有的表名称 show crate table 表名; # 指定查看某个表的信息 describe 表名; # 指定查看表的字段信息 简写 desc 表名; # 增 create table 表名( 字段名称1 字段类型1, 字段名称2 字段类型2 ); # 改 alter table 表名 rename 新表名; # 修改表名 # 删 drop table 表名;
操作记录的基本SQL语句
要想操作记录 肯定得先有库和表 # 查 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的数据删除''' 如果不加筛选条件就是删除所有的数据