1. 数据库相关概念
- 持久化: 数据保存到可掉电式存储设备中以供以后使用。数据持久化以为着将内存中的胡数据保存到硬盘上加以固化,持久化的实现过程大多是通过各种关系型数据库来完成。
- DB:数据库(DataBase),存储数据的仓库,本质是一个文件系统,保存了一系列的有组织的数据。
- DBMS:数据库管理系统(DataBase Management System),是一种操控和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制。
- SQL:结构化查询语言(Structured Query Language),专门用来与数据库通信的语言。
数据库与数据库管理系统的关系
2. 关系型数据库和非关系型数据库
从排名中可以看出,关系型数据库仍然是目前DBMS的主流,其中使用的最多的DBMS是Oracle、MySQL、SQL Serve,这些都是关系型数据库(RDBMS)。
- 关系型数据库主要通过行和列的形式存储数据,以便于用户理解。这一系列的行和列被称为表(table),一组表就形成了一个数据库(database),表与表之间存在的一定的关系,因此称为关系型数据库。
- 优点
- 复杂查询可以用SQL语句实现在一个表以及多个表之间做非常复杂的数据查询
- 事务支持使得对于安全性能很高的数据访问要求得以实现
- 优点
- 非关系型数据库
- 键值型数据库 Redis
- 文档型数据库 MongoDB
- 搜索引擎数据库 Elasticsearch
- 列式数据库 HBasehttps://downloads.mysql.com/archives/installer/
- 图形数据库 Neo4j
3. MySQL的环境搭建
8.0版本下载地址:
https://dev.mysql.com/downloads/windows/installer/8.0.html
其他版本下载地址:
https://downloads.mysql.com/archives/installer/
备用百度网盘下载方式
链接:https://pan.baidu.com/s/1oG9sQ-7tcaOjibWDM5_9EQ?pwd=ym8l
提取码:ym8l
windows
安装
-
选择自定义方式,可以自定义安装组件以及相关配置。
-
选装安装组件以及安装位置
-
MySQL配置,可以配置端口号和configType,这个configType后面也可以自己修改配置来实现。
8.0和5.0的第一个区别,密码加密区别
设置root用户密码
设置服务名,并且设置是否开机启动
注意:安装多个MySQL的时候需要在安装页面选择不升级,端口号和之前的MySQL端口号不同
取消升级
添加新的数据库
端口号设置不一致
卸载
-
利用控制面板中卸载程序进行卸载
卸载后需要手动删除安装目录以及数据目录
-
通过安装包提供的卸载功能进行卸载
点击next确认卸载
勾选是否删除数据目录(如果勾选,数据目录会被删除,所有数据都会清空)
执行卸载
卸载完成后需要完成一下两件事情
- 残余文件清理(包括安装目录和数据目录)
- 清楚环境变量的配置
环境配置
-
启动服务:按照上面的安装方式已经配置了MySQL服务开机自启动,但是也可以手动启动服务
# 这里需要管理员权限运行命令行窗口 net start MYSQL80
-
关闭服务
# 这里需要管理员权限运行命令行窗口 net stop MYSQL80
这里的启动服务和关闭服务也可以用windows控制面板中的服务页面关闭打开
-
连接服务器
# 明文密码链接服务器(密码为123456),这里不配置端口号默认采用环境变量对应的端口号 mysql -uroot -p123456 # 明文密码指定ip端口号,默认端口号是3306 mysql -uroot -p123456 -hlocal -P3306 # 输入隐藏密码,指定ip端口号 mysql -uroot -hlocal -P3306 -p
linux
待补充
4. MySQL的基本使用
- 查看所有数据库
- information_schema保存了MySQL数据库服务器的系统信息,例如数据库的名称、数据库的表名、字段名称、存储权限、数据文件,所在的文件夹和系统使用的文件夹等
- performance_schema用来监控MySQL的各类性能指标
- sys数据库主要作用是以一种更容易被理解的方式展示 MySQL 数据 库服务器的各类性能指标,帮助系统管理员和开发人员监控 MySQL 的技术性能。
- mysql数据库库保存了 MySQL 数据库服务器运行时需要的系统信息,比如数据文件夹、当前使用的 字符集、约束检查信息,等等
# 查看所有数据库
show databases;
# 可以看到四个数据库
#+--------------------+
#| Database |
#+--------------------+
#| information_schema |
#| mysql |
#| performance_schema |
#| sys |
#+--------------------+
-
创建数据库
create database 数据库名; # 数据库名不能和数据库中已有数据库名相同 create database demo;
-
使用数据库
user 数据库名; use demo;
-
查看所使用的数据库所有表格
show tables from 数据库名;
-
创建新的表格
create table 表名称( 字段名 数据类型, 字段名 数据类型 ) # 创建学生表 create table student( id int, name varchar(20) # 名字最长20个字符 )
-
查看一个表的数据
select * from 数据库表名; # 查看学生表的数据 select * from student;
-
添加一条数据
insert into 表名称 values(值列表); # 添加两条记录到student表中 insert into student values(1, '张三'); insert into student values(1, '李四');
如果是mysql5这里会因为字符集的问题报错
mysql> insert into student values(1,'张三'); ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'name' at row 1 mysql> insert into student values(2,'李四'); ERROR 1366 (HY000): Incorrect string value: '\xC0\xEE\xCB\xC4' for column 'name' at row 1 mysql> show create table student;
-
查看表的创建信息
show create table student; /* +---------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +---------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ | student | CREATE TABLE `student` ( `id` int DEFAULT NULL, `name` varchar(20) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci | +---------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) */ # 或者这种方式也可以 show create table student\G # 不带分号 /* *************************** 1. row *************************** Table: student Create Table: CREATE TABLE `student` ( `id` int DEFAULT NULL, `name` varchar(20) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 row in set (0.00 sec) */
这里是mysql8字符集默认是utf8mb4支持中文,但是在mysql5中这里是latin1,不支持中文
-
删除表格
drop table 表名; # 删除student表名 drop table student;
-
删除数据库
drop database 数据库名; # 删除demo数据库 drop database demo;
5. MySQL的编码设置
问题背景:
MySQL5.x中,会出现命令行插入中文,操作sql乱码问题,这是因为MySQL5.x中是默认Latin1,MySQL8.0之后默认是编码改为了utf8mb4,因此不会出现编码导致的插入问题。
insert into student values(1,'张三');
/*
ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'name' at row 1
*/
问题解决:
-
查看编码命令
show variables like 'character_%'; /* +--------------------------+-------------------------------------------------+ | Variable_name | Value | +--------------------------+-------------------------------------------------+ | character_set_client | gbk | | character_set_connection | gbk | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | gbk | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | D:\tools\MySQL\MySQL Server 5.7\share\charsets\ | +--------------------------+-------------------------------------------------+ */ show variables like 'collation_%'; /* +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | gbk_chinese_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+ */
可以看到最终的字符集编码是latin1
-
修改mysql的数据目录下的my.ini配置文件
[mysqld] ...... character-set-server=utf8 collation-server=utf8_general_ci ......
-
修改配置后重新启动服务
net stop mysql57 net start mysql57
-
查看编码latin1变为了utf8
show variables like 'character_%'; /* +--------------------------+-------------------------------------------------+ | Variable_name | Value | +--------------------------+-------------------------------------------------+ | character_set_client | gbk | | character_set_connection | gbk | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | gbk | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | D:\tools\MySQL\MySQL Server 5.7\share\charsets\ | +--------------------------+-------------------------------------------------+ */ show variables like 'collation_%'; /* +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | gbk_chinese_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | +----------------------+-----------------+ */