1.入门与基础概念
1.1MySQL 的基本概念
mysql 与 mysqld 的区别
- mysql:是客户端程序,用来连接、操作数据库。
- mysqld:是服务端程序,后台运行,负责管理磁盘上的数据库文件。
- 两者的关系:程序员通过 mysql 客户端,向 mysqld 服务端发送指令,服务端再操作磁盘上的数据。
数据库的本质
- 数据库服务:是一套提供数据存取的网络程序,基于 C(mysql)/S(mysqld)(客户端 / 服务器)模式。
- 数据库:本质上就是 Linux 系统里的目录和文件,比如:
- 建立数据库 → 本质是在系统里创建一个目录
- 建立表 → 本质是在该目录下创建对应的文件
- 程序员不直接操作这些文件,而是通过 mysqld 服务来间接操作,以此保证数据的安全与高效。
为什么要用数据库?
普通文件虽然能存数据,但没有良好的数据管理能力;而数据库服务可以帮我们处理复杂的数据存储、查询、管理需求,直接给我们想要的结果,程序员只需要写 SQL 指令即可。
1.2什么是数据库
- 文件的安全性问题
- 文件不利于数据查询和管理
- 文件不利于存储海量数据
- 文件在程序中控制不方便
- 磁盘
- 内存
1.3MySQL 的工作流程
- mysqld服务在后台监听 3306 端口(图中LISTEN状态),等待客户端连接。
- 程序员通过 mysql 客户端发送 SQL 指令(如登录、查询、修改)。
- mysqld 服务接收到指令后,去磁盘上的数据库文件中执行对应的操作。
- 结果再通过网络返回给 mysql 客户端,呈现给程序员
1.4主流数据库
2.数据库的基本使用
2.1连接服务器
输入:
mysql -h 127.0.0.1 -P 3306 -u root -p注意:如果没有写-h 127.0.0.1默认是连接本地如果没有写-P 3306默认是连接3306端口号
2.2服务器,数据库,表关系
2.3使用案例
创建数据库
create database helloworld;使用数据库
use helloworld;创建数据库表
create table student( id int, name varchar(32), gender varchar(2) );表中插入数据
insert into student (id, name, gender) values (1, '张三', '男'); insert into student (id, name, gender) values (2, '李四', '女'); insert into student (id, name, gender) values (3, '王五', '男');查询表中的数据
select * from student;演示:
数据逻辑存储
3.MySQL架构
Client Connectors(客户端连接器)
支持各种语言:JDBC(Java)、ODBC(.NET)、PHP、Python、Perl、C API
作用:让应用程序能连接到 MySQL
核心层:MySQL Server(服务核心)
这是 MySQL 的 “大脑”,干这些事:
- 连接池:处理连接、验证账号密码
- SQL 接口:接收你的 SQL 命令(建表、插入、查询)
- 解析器:检查 SQL 语法对不对
- 优化器:选最快的方式执行 SQL
- 缓存:存常用结果,加速查询
- 工具服务:备份、安全、集群这些辅助功能
Pluggable Storage Engines(可插拔存储引擎)
这是 MySQL 的 “手脚”,负责和磁盘打交道,比如:
- InnoDB(默认,支持事务)
- MyISAM(老引擎,速度快但不支持事务) 不同引擎可以存不同表,各有各的用法。
最底层:文件系统与日志
数据最终存在磁盘文件里,同时还有各种日志(操作日志、错误日志、事务日志)保证数据安全、可恢复。
一句话总结:
客户端发请求 → MySQL Server 处理 → 存储引擎读写磁盘 → 返回结果。
4.SQL分类
管结构:建库、建表、删库、改表
管数据:增、删、改
管查询:只查不改
管权限、事务
超级好记口诀
- DDL = 盖房子(建表)
- DML = 搬家具(增删改数据)
- DQL = 看房子(查数据)
- DCL = 管钥匙(权限)
5.存储引擎
1.存储引擎
2.查看存储引擎
show engines;3.存储引擎对比
MySQL 里最常用、也是默认的存储引擎是InnoDB
6.库的操作
1.创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name2.创建数据库案例
create database db1;create database db2 charset=utf8;create database db3 charset=utf8 collate utf8_general_ci;3.字符集和校验规则
数据库编码集(字符集)
- 作用:规定数据如何存储,决定数据库里存的字符是什么样的。
- 比如:utf8/utf8mb4,决定了中文、特殊字符能不能正常存进去。
数据库校验集(排序 / 校对规则)
- 作用:规定数据如何比较、排序、读取,是基于字符集的一套规则。
比如:utf8_general_ci,决定了字符串比较时是否区分大小写、重音符号等。
总结:
数据库编码集负责存储数据,校验集负责比较数据(如WHERE、排序)。
两者必须匹配,否则操作会出错或乱码。
3.1查看系统默认字符集以及校验规则
show variables like 'character_set_database'; show variables like 'collation_database';3.2查看数据库支持的字符集
show charset;3.3查看数据库支持的字符集校验规则
show collation;3.4校验规则对数据库的影响
- 不区分大小写
create database test1 collate utf8_general_ci; use test1; create table person(name varchar(20)); insert into person values('a'); insert into person values('A'); insert into person values('b'); insert into person values('B');- 区分大小写
创建一个数据库,校验规则使用utf8_ bin[区分大小写]
create database test2 collate utf8_bin; use test2 create table person(name varchar(20)); insert into person values('a'); insert into person values('A'); insert into person values('b'); insert into person values('B');- 进行查询
不区分大小写的查询以及结果
区分大小写的查询以及结果
- 结果排序
区分大小写排序以及结果:
4.操纵数据库
4.1查看数据库
show databases;4.2显示创建语句
show create database 数据库名;- MySQL建议我们关键字使用大写,但是不是必须的。
- 数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字
- /*!40100 default.... */这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话
/*!
80016 ...*/同理,表示版本大于 8.00.16 时执行(加密选项)
4.2修改数据库
ALTER DATABASE db_name [alter_spacification [,alter_spacification]...] alter_spacification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name- 对数据库的修改主要指的是修改数据库的字符集,校验规则
4.4数据库删除
DROP DATABASE [IF EXISTS] db_ name;- 数据库内部看不到对应的数据库
- 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
4.5备份和恢复--放在最后
1.备份
# mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径# mysqldump -P3306 -u root -p -B test1 > D:test1.sql2还原
3注意事项
- 如果备份的不是整个数据库,而是其中的一张表,怎么做?
# mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql- 同时备份多个数据库
# mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径- 如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。
show processlist