1. 入门与基础概念

1.1MySQL 的基本概念

  1. mysql 与 mysqld 的区别

    • mysql:是客户端程序,用来连接、操作数据库。
    • mysqld:是服务端程序,后台运行,负责管理磁盘上的数据库文件。
    • 两者的关系:程序员通过 mysql 客户端,向 mysqld 服务端发送指令,服务端再操作磁盘上的数据。
  2. 数据库的本质

    • 数据库服务:是一套提供数据存取的网络程序,基于 C(mysql)/S(mysqld)(客户端 / 服务器)模式。
    • 数据库:本质上就是 Linux 系统里的目录和文件,比如:
      • 建立数据库 → 本质是在系统里创建一个目录
      • 建立表 → 本质是在该目录下创建对应的文件
    • 程序员不直接操作这些文件,而是通过 mysqld 服务来间接操作,以此保证数据的安全与高效。
  3. 为什么要用数据库?

普通文件虽然能存数据,但没有良好的数据管理能力;而数据库服务可以帮我们处理复杂的数据存储、查询、管理需求,直接给我们想要的结果,程序员只需要写 SQL 指令即可。

1.2 什么是数据库

存储数据用文件就可以了,为什么还要弄个数据库?
文件保存数据有以下几个缺点:
  • 文件的安全性问题
  • 文件不利于数据查询和管理
  • 文件不利于存储海量数据
  • 文件在程序中控制不方便
数据库存储介质:
  • 磁盘
  • 内存
为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标

1.3MySQL 的工作流程

  1. mysqld服务在后台监听 3306 端口(图中LISTEN状态),等待客户端连接。
  2. 程序员通过 mysql 客户端发送 SQL 指令(如登录、查询、修改)。
  3. mysqld 服务接收到指令后,去磁盘上的数据库文件中执行对应的操作。
  4. 结果再通过网络返回给 mysql 客户端,呈现给程序员

1.4 主流数据库

SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
Oracle 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL
MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电
商,SNS,论坛。对简单的SQL处理效果好。
PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研
究使用,可以免费使用,修改和分发。
SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库 中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

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架构

MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/LinuxWindows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 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分类

DDLdata definition language数据定义语言,用来维护存储数据的结构
代表指令: create, drop, alter
管结构:建库、建表、删库、改表 
DMLdata manipulation language数据操纵语言,用来对数据进行操作
代表指令: insertdeleteupdate
管数据:增、删、改
DML中又单独分了一个DQL,数据查询语言,代表指令: select

管查询:只查不改

DCLData Control Language数据控制语言,主要负责权限管理和事务
代表指令: grantrevokecommit
管权限、事务

超级好记口诀

  • DDL = 盖房子(建表)
  • DML = 搬家具(增删改数据)
  • DQL = 看房子(查数据)
  • DCL = 管钥匙(权限)

5.存储引擎

1.存储引擎

存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL的核心就是插件式存储引擎,支持多种存储引擎

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_name
说明:
大写的表示关键字
[] 是可选项
CHARACTER SET: 指定数据库采用的字符集
COLLATE: 指定数据库字符集的校验规则

2. 创建数据库案例

创建名为 db1 的数据库
create database db1;
说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则
是:utf8_ general_ ci
创建一个使用utf8字符集的 db2 数据库
create database db2 charset=utf8;
创建一个使用utf字符集,并带校对规则的 db3 数据库。
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;

字符集主要是控制用什么语言。比如utf8就可以使用中文。

3.3 查看数据库支持的字符集校验规则

show collation;

3.4 校验规则对数据库的影响

  • 不区分大小写
创建一个数据库,校验规则使用utf8_ general_ ci[不区分大小写]
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
说明:
  • 对数据库的修改主要指的是修改数据库的字符集,校验规则
实例: 将 db1 数据库字符集改成 gbk

4.4 数据库删除

DROP DATABASE [IF EXISTS] db_ name;
执行删除之后的结果:
  • 数据库内部看不到对应的数据库
  • 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
注意:不要随意删除数据库

4.5 备份和恢复 -- 放在最后

1.备份
语法:
# mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
示例:将test1库备份到文件(退出连接)
# mysqldump -P3306 -u root -p -B test1 > D:test1.sql

这时,可以打开看看 mytest.db1 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中。
2 还原
3 注意事项
  • 如果备份的不是整个数据库,而是其中的一张表,怎么做?
# mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql
  • 同时备份多个数据库
# mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
  • 如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。
4.6 查看连接情况
语法:
show processlist

可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐