初始数据库

数据库

一、数据库管理软件的由来

基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上。

如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,并没有问题。

很不幸,这些假设都是你自己想象出来的,上述假设存在以下几个问题

1、程序所有的组件就不可能运行在一台机器上

因为这台机器一旦崩溃则意味着整个软件的崩溃,并且程序的执行效率依赖于承载它的硬件,而一台机器的性能总归是有限的,受限于目前的硬件水平,就一台机器的性能垂直进行扩展是有极限的。

于是我们只能通过水平扩展来增强我们系统的整体性能,这就需要我们将程序的各个组件分布于多台机器去执行。

2、数据安全问题

根据1.1中的描述,我们将程序的各个组件分布到各台机器,但需知各组件仍然是一个整体,言外之意,所有组件的数据还是要共享的。但每台机器上的组件都只能操作本机的文件,这就导致了数据必然不一致。

于是我们想到了将数据与应用程序分离:把文件存放于一台机器,然后将多台机器通过网络去访问这台机器上的文件(用socket实现),即共享这台机器上的文件,共享则意味着竞争,会发生数据不安全,需要加锁处理。

3、并发

根据上述的描述,我们必须写一个socket服务端来管理这台机器(数据库服务器)上的文件,然后写一个socket客户端,完成如下功能:

1.远程连接(支持并发)
2.打开文件
3.读写(加锁)
4.关闭文件

4、总结

我们在编写任何程序之前,都需要事先写好基于网络操作一台主机上文件的程序(socket服务端与客户端程序),于是有人将此类程序写成一个专门的处理软件,这就是MySQL等数据库管理软件的由来,但MySQL解决的不仅仅是数据共享的问题,还有查询效率,安全性等一系列问题,总之,把程序员从数据管理中解脱出来,专注于自己的程序逻辑的编写。

二、数据库概述

1、什么是数据库(Database,简称DB)

数据库即存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的

过去人们将数据存放在文件柜里,现在数据量庞大,已经不再适用。数据库是长期存放在计算机内、有组织、可共享的数据即可。

数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种 用户共享

2.数据库的演变史

我们以ATM为例

  1. 把数据存放在单个文件里面
    (1) 文件路径不固定,文件名不规范
    eg:C:\aaa.txt D:\bbb.txt
    (2) 数据格式也不规范
    eg:kevin|123 kevin$123 kevin*123

  2. 软件目录开发规范
    规定了数据应该保存在db目录下 >>> 路径偏向统一
    (1) 文件名不规范
    (2) 当数据量多的时候,会产生很多的文件,多次读取文件会占用大量的资源

  3. 数据库阶段
    把数据单独存放在一台计算机上
    统一路径 统一操作方式 统一数据格式
    数据库能解决以上你所有遇到的问题.

3.数据存储的发展史

  1. 单机游戏阶段
    数据各自保存在各自的电脑上,不能实现数据的共享

  2. 联网游戏
    数据存储于网络中,可以共享(数据库服务)
    把数据单独放在一个地方,数据库服务,C/S架构

    # 核心就是可以在计算机之间数据共享,数据库一定是基于网络的!!!
        
    '''以上所有遇到的问题核心都是基于数据的'''
    
    """
    数据库服务集群:提升数据的安全性
    	为了防止数据丢失,会做'备份'
    """
    

4.数据库的本质

数据库的本质其实就是cs架构的软件

cs架构的软件就必须有服务端和客户端,理论上来说,我们每个人都能写一款数据库出来,只不过是你写的数据库没人用,因此,市面上有很多牛逼的程序员,就写了很多的数据库软件,所以,你也会发现,现在市场上的确有很多的数据库

5.数据库的分类

  1. 关系型数据库

    特征1:拥有固定的表结构(字段名、字段类型),类似于excel表格形式
    表字段(表头):id name pwd
    特征2:表与表之间可以建立关系

    比如:MySQL、Oracle、SqlServer、PostgreSQL、sqlite、MariaDB、db2、access

    • MySQL:开源免费的,使用最广,性价比贼高
    • Oracle:不开源,收费,使用成本较高但是安全性也最高,大多用在银行系统中,Java用的较多
    • MariaDB:开源的,跟MySQL是一个作者,开源免费
    • PostgreSQL:开源免费,支持二次开发(能够按照你的想法增加),兼容性极高
    • sqlite:小型数据库,主要用于本地测试
  2. 非关系型数据库 (后面学习)
    特征1:没有固定的表结构,它是以K:V键值对的形式存储数据
    name------------------->kevin
    age-------------------->20
    特征2:数据之间无法建立数据库层面的关系。可以自己编写代码建立逻辑层面的关系

    比如:

    • Redis缓存数据库(新项目使用):目前最火,使用频率最高的非关系型数据库
      虽然缓存数据库是基于内存做数据存取但是拥有持久化的功能,速度非常快
    • memcahce缓存数据库(老项目有在用):已经被redis淘汰
    • MongoDB(爬虫):文档型数据库,最像关系型数据库的非关系型数据库
      主要用在爬虫以及大数据领域
"""
一个大型的软件,它都需要有关系型数据库和非关系型数据库搭配使用,关系型数据库用来做数据保存(持久化),非关系型数据库用来做数据查询。
"""

"""
虽然数据库软件有很多 但是操作方式大差不差 学会了一个几乎就可以学会所有,所有的数据库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 (管理员权限)

  1. 停止mysql服务
    方式1: 鼠标点击停止
    方式2: net stop mysql # (管理员权限)

  1. 如何卸载服务:把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的这行数据
posted @ 2023-04-04 13:39  星空看海  阅读(21)  评论(0编辑  收藏  举报