MySQL 数据库入门与实战教程(一)
·
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 主流数据库
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/Linux、Windows、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分类
DDL【data definition language】 数据定义语言,用来维护存储数据的结构
代表指令: create, drop, alter
管结构:建库、建表、删库、改表
DML【data manipulation language】 数据操纵语言,用来对数据进行操作
代表指令: insert,delete,update
管数据:增、删、改
DML中又单独分了一个DQL,数据查询语言,代表指令: select
管查询:只查不改
DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务
代表指令: grant,revoke,commit
管权限、事务
超级好记口诀
- 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,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。
更多推荐




所有评论(0)