首页 > 技术文章 > MySQL 数据库

elijah-li 2022-02-17 20:04 原文

内容概要

  • 数据演变
  • 数据存储发展
  • 数据库类型
  • SQL与NoSQL的由来
  • 下载安装MySQL
  • MySQL文件目录
  • 系统服务
  • 密码相关
  • 8.0版本的小问题
  • 基本SQL语句
  • 数据库的增删改查
  • 表的增删改查
  • 数据的增删改查
  • 字符编码的问题

内容详细

数据演变

  • ​ 什么是数据?

用来记录事务的状态

  • 数据存放方式的演变

1、单独的文本文件

没有固定的存放位置和格式,各个程序无法按照统一的标准来获取彼此产生的数据,进行数据交互

文件名:user.txt userinfo.txt data.txt
数据格式:jason|123 tony~123 kevin$123

    """程序彼此之间无法兼容"""

2、软件开发目录规范

image

软件开发目录规定了文件名和存储位置,使得文件的查找变得简单了

但并没有解决核心问题

3、数据库阶段

数据有了统一的存储位置和存储格式

规定了文件的存储位置和数据格式

目前正在使用的阶段 解决了数据交互困难的问题

image

数据存储发展史

1、单机阶段

数据只能保存在各自的电脑上,无法实现基于网络的数据交互,不能共享

2、多机阶段

数据统一保存在某个固定的服务器上(计算机) ,能够基于网络 实现数据共享

为了数据的安全 还会采用集群策略来分担风险

数据库的本质

# 本质也是一款cs架构的软件
	既然数据库本质是一款cs架构的软件 也就意味着我们每个人都可以编写一个数据库软件
    在目前地球上有很多牛逼的程序员 他们都具备编写数据库软件的能力 并且目前市面上真的有很多款数据库软件
"""
数据库在狭义层面上来说
	指的是处理数据的底层程序
数据库在广义层面上来说
	指的是操作这些底层程序的便捷应用软件
其实学习数据库很多时候学习的是配套的数据库软件
"""

数据库类型

根据存储数据结构的不同与作用的不同,数据库分为关系型数据库和非关系型数据库

1、关系型数据库

关系型数据库有固定的数据格式,可以建立表与表之间的联系

主要有 : MySQL、Oracle、PostgreSQL、MariaDB、sqlite、sql server、db2

MySQL: 开源免费的数据库,而且使用非常规范,市场应用广泛,但被Oracle 公司收购了

Oracle: 功能强大,但费用非常昂贵,一般是银行等大机构会使用

**PostgreSQL: **支持二次开发

**MariaDB: **是原 MySQL的开发者开发,是MySQL的替代品

sqlite: 是Django框架自带的数据库,主要用于测试,容量小

2、非关系型数据库

非关系型数据库是以 K:V键值对的形式存储数据的

主要有: redis、mongoDB、memcache

**redis: **热门的缓存数据库

mongoDB: 文档型数据库,一般用于大数据与爬虫

**memcache: **被redis 取代了

注意:

1.两类数据库的区别
	关系型数据库
    	拥有固定的表结构,表与表之间可以建立代码层面上的关系
	非关系型数据库
    	没有固定的表结构,数据是采用 K:V 键值对的形式存储的

2.这么多数据库如何学习
	两大类数据库操作逻辑基本一致
		每一类学习一个基本就可以掌握所有
			关系型学MySQL
			非关系型学redis、mongodb

SQL与NoSQL的由来

现在使用广泛的数据库都是存在远程的服务器中,

可以有多种不同形式的客户端通过网络访问并操作数据库的服务端,所以必须要有一种统一的操作语法,方便不同客户端对数据进行操作

所以规定了统一的交互方式,兼容不同类型的客户端实现数据交互

  • 关系型数据库>>>:SQL语句
  • 非关系型数据库>>>:NoSQL语句

NoSQL有时候也表示 非关系型数据库

下载安装MySQL

1.主要版本

​ 5.6:使用频率较高的版本
​ 5.7:目前正在过渡的版本
​ 8.0:目前最新的版本

不同的版本主要区别在于底层的逻辑 SQL语句几乎是一模一样的

2.软件下载

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

参考安装博客: mac:https://www.cnblogs.com/Dominic-Ji/articles/15402755.html

具体步骤:
    DOWNLOADS
    MySQL Community (GPL) Downloads
    MySQL Community Server
    Archives
    选择版本下载压缩包(客服端 服务端)

MySQL文件目录

	bin文件夹
    	mysqld.exe		服务端
        mysql.exe		客服端
    data文件夹
    	存储使用过程中需要保存的数据
    my-default.ini
    	配置文件
    redadme
    	说明文件

基本使用

一定要先启动服务端再启动客户端

前期在操作的时候最好使用管理员cmd操作

1.环境变量的配置
2.直接输入mysqld启动服务端(当前cmd窗口不要关闭)
3.开设一个新的cmd窗口操作客户端
    mysql	# 游客模式登陆
    mysql -u用户名 -p密码  # 账号登录(本地使用)
    mysql -hIP地址 -P端口号 -u用户名 -p密码  # 完整命令
    """第一次登录 root用户没有密码 直接连续回车即可"""

系统服务

主要是设置mysql 服务端可以开机自启动

# 将MySQL的服务端制作成系统服务 开机自启动 关机自关闭
1.先关闭之前的服务端
2.查看当前计算机系统服务列表
	services.msc
3.以管理员身份运行cmd并制作系统服务
	mysqld --install  # 仅仅是添加到了系统服务 第一次需要手动启动
4.启动服务
	方式1:鼠标右键选择启动即可
    方式2:命令行方式启动
        	net start mysql
"""
停止服务
	net stop mysql
移除系统服务
	mysqld --remove
"""

密码相关

# 针对管理员用户需要设置密码
	方式1:直接在cmd窗口内使用mysqladmin命令
        mysqladmin -uroot -p原密码 password 新密码
        	eg:
                mysqladmin -uroot -p password 123
                mysqladmin -uroot -p123 password 666
    方式2:直接在登录状态下修改当前登录用户的密码
        set password=PASSWORD('密码')
            
# 忘记密码如何解决(注意)
	方式1:前期数据库里面也没有数据 干脆重来!!!
    方式2:稍作了解
        1.关闭服务端
        2.以跳过授权表的方式重新启动服务端
            只需要提供用户名就可以登录
            mysqld --console  --skip-grant-tables --shared-memory
        3.以管理员身份登录
        	mysql -uroot -p
        4.修改管理员用户密码
        	update mysql.user set password=password(123) where user="root" and host="localhost"; 
		5.关闭服务端再正常启动
        	ctrl  + C
           	net start mysql
         6.使用修改之后的密码登录  

注意:

库				文件夹

表				文件夹里面的文件

记录			    文件夹里面的文件里面的一行行内容

8.0版本的小问题

如果你下载的是新版本,启动完数据库的服务端之后,在客户端登进去时,可能会出现这样的错:

ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: ÕÒ²»µ½Ö¸¶¨µÄÄ£¿é¡£

这应该是MySQL新版本(8以上版本)的用户登录账户加密方式是【caching_sha2_password】,Navicat不支持这种用户登录账户加密方式。

解决:

1.关闭服务端
2.以跳过授权表的方式重新启动服务端
	只需要提供用户名就可以登录
	mysqld --console  --skip-grant-tables --shared-memory
3.新开一个命令提示符窗口,以管理员身份登录MySQL
	mysql -uroot -p

4.select host,user,plugin from mysql.user;

image

新建 my.ini 配置文件:

[mysql]
# 设置mysql客户端默认字符集
# user="root"
# password=123
default-character-set=utf8 
[mysqld]
default_authentication_plugin=mysql_native_password
#设置3306端口
port = 3306 
# 设置mysql的安装目录
basedir=D:\\mysql\\mysql-8.0.25-winx64
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
[client]
default-character-set=utf8

在 [mysqld] 模块下添加

default_authentication_plugin=mysql_native_password

基本SQL语句

"""SQL语句的结束必须使用分号"""
# 1.如何查看所有的数据库名称
	show databases;  '''会有一个临时产生在内存的库:in...sc'''
# 2.如何查看所有的表名称
	use 库名;  '''切换库(类似于双击了文件夹)'''
    show tables;
# 3.如何查看所有的记录
	select * from 表名;
    如果内容较多展示补全出现错乱的情况 可以在语句后面加\G

数据库的增删改查

"""辛辛苦苦一个月 换来的就是一条SQL语句"""
# 增
	create database 数据库名;
# 查
	show databases;  # 查看所有的库名
    show create database 数据库名;  # 定向查看某个库
# 改
	alter database 数据库名 charset='gbk';
# 删
	drop database 数据库名;

表的增删改查

"""
要想操作表必须得先有库
	1.先创建库
		create database db1;
	2.查看当前所在的库名
		select database();
	3.切换库
		use bd1;
"""
# 增
	create table 表名(字段名1 字段类型1,字段2 字段类型2);
# 查
	show tables;  # 查看当前库下面所有的表名
    show create table 表名;  # 查看指定的表信息
    describe 表名;  # 查看表的具体信息(常用)  简写 desc 表名;
# 改
	alter table t1 rename ttt;  # 修改表名
    alter table ttt change id nid int;  # 修改字段名和类型
    alter table ttt modify nid char(4);  # 修改字段类型
# 删
	drop table 表名;

数据的增删改查

"""
肯定得先确定库和表
"""
# 增
	insert into 表名 values(数据,数据,数据);  '''单条数据'''
    insert into 表名 values(),(),();  '''多条数据'''
# 查
	select * from 表名;  '''查询表中所有的数据'''
# 改
	update 表名 set 字段名='新数据' where 筛选条件;
# 删
	delete from 表名 where 筛选条件;

字符编码问题

# 查看MySQL内部默认的编码情况
	\s
 
"""MySQL默认的配置文件>>>:mydefault.ini"""
1.拷贝默认的配置文件并且重新命名为my.ini
2.拷贝固定的配置信息
	[mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
3.重启MySQL服务端

推荐阅读