MySQL 全面学习文档
一、数据库基础知识
1. 数据库的概念
数据库(DB) 是一种存储数据的仓库,具有以下特性:
- 按数据结构组织、存储和管理数据
- 能长期、高效地管理和存储数据
- 核心目的是实现数据的存储(写)和提供(读)
2. 数据库分类
(1)关系型数据库
- 核心:将复杂数据结构归结为二维表格形式(二维表)
- 四层结构:数据库管理系统(DBMS)→ 数据库(DB)→ 数据表(Table)→ 数据字段(Field)
- 常见产品:大型(Oracle)、中型(MySQL、SQL Server)、小型(Sybase、Access)
- 特点:注重数据存储的持久性
(2)非关系型数据库
- 简称 NoSQL(Not Only SQL),无具体模型的数据结构
- 常见产品:MongoDB、Redis、Memcached
- 特点:注重数据读取的效率
3. SQL 介绍
SQL(Structured Query Language):结构化查询语言,是关系型数据库的标准化编程语言。
按操作类型分类:
- DQL(Data Query Language):数据查询语言(查询和检索数据)
- DML(Data Manipulation Language):数据操作语言(增删改数据)
- DDL(Data Definition Language):数据定义语言(创建数据结构)
- DCL(Data Control Language):数据控制语言(用户权限管理)
- TPL(Transaction Process Language):事务处理语言(辅助DML进行事务操作)
补充:SQL是关系型数据库通用语言,不同数据库产品在指令上略有差异,逻辑部分通常由其他编程语言实现。
4. MySQL 介绍
- 是知名的关系型数据库产品,由瑞典MySQL AB公司开发,现属Oracle旗下
- 开源免费,2008年被Sun公司收购,2009年随Sun被Oracle收购
- 访问原理(C/S结构):
- 客户端通过主机(host)+端口号(port)连接服务端
- 输入用户名(username)和密码(password)验证身份
- 连接成功后,通过SQL指令操作数据
二、MySQL 安装与配置
1. Windows 系统安装
(1)下载
- 下载地址:https://dev.mysql.com/downloads/mysql/
- 选择zip版本,点击"No thanks, just start my download"开始下载
(2)解压
- 将压缩包解压到目标目录(例如:E:\mysql\mysql-8.0.30-winx64)
(3)创建配置文件
在解压目录下新建my.ini文件,内容如下:
ini
[mysqld]
# 设置3306端口
port=3306
# 自定义安装目录
basedir=E:\\mysql\\mysql-8.0.30-winx64
# 自定义数据存放目录
datadir=E:\\mysql\\mysql-8.0.30-winx64\\data
# 最大连接数
max_connections=200
# 允许连接失败次数
max_connect_errors=10
# 服务端字符集
character-set-server=utf8
# 默认存储引擎
default-storage-engine=INNODB
# 默认认证插件
default_authentication_plugin=mysql_native_password
[mysql]
# 客户端默认字符集
default-character-set=utf8
[client]
port=3306
default-character-set=utf8(4)安装步骤
以管理员身份运行cmd,进入安装目录的bin目录:
cmdE: cd E:\mysql\mysql-8.0.30-winx64\bin初始化MySQL(记录临时密码):
cmdmysqld --initialize --user=mysql --console安装MySQL服务:
cmdmysqld –install mysql启动/停止服务:
cmdnet start mysql # 启动 net stop mysql # 停止
(5)登录与修改密码
登录(使用初始化时的临时密码):
cmdmysql -uroot -p修改密码:
sqlALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';修改root用户权限:
sqlcreate user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';刷新权限:
sqlflush privileges;
2. Mac 系统安装
(1)下载与安装
- 下载地址:https://dev.mysql.com/downloads/mysql/
- 选择对应版本安装包,按向导完成安装
(2)配置环境变量
打开
~/.bash_profile文件,添加:bash# mysql export PATH=${PATH}:/usr/local/mysql/bin # 快速启动/停止服务 alias mysqlstart='sudo /usr/local/mysql/support-files/mysql.server start' alias mysqlstop='sudo /usr/local/mysql/support-files/mysql.server stop'使配置生效:
bashsource ~/.bash_profile解决终端重启后配置失效问题: 打开
~/.zshrc,添加:bashsource ~/.bash_profile
(3)登录
bash
mysql -u root -p三、Navicat Premium 使用
1. 新建连接
- 打开软件,选择「文件-新建连接-mysql」
- 配置连接信息(主机、端口、用户名、密码),完成本地数据库连接创建
2. 新建数据库与表
- 选中连接,右键「新建数据库」,设置数据库名称和字符集
- 选中数据库,右键「新建表」,添加字段(设置字段名、类型、属性等)
- 保存表结构,插入数据(直接在表格视图中输入或通过SQL指令)
3. 导入SQL文件
- 选中目标数据库,右键「运行SQL文件」,选择本地SQL文件导入
四、MySQL 基本操作
1. SQL 语法规则
- 结束符:默认
;,也可使用\g(等效;)或\G(纵向显示结果) - 反引号
`:包裹关键字或保留字,避免系统识别错误
2. 数据库(DB)操作
(1)创建数据库
sql
# 基础创建
create database 数据库名称;
# 指定字符集
create database 数据库名称 charset utf8MB4;
# 指定字符集和校对集
create database 数据库名称 charset utf8MB4 collate utf8mb4_general_ci;- 命名规范:数字、字母、下划线组成;不区分大小写;不以数字开头;建议用下划线法(如
db_qianguyihao)
(2)查看数据库
sql
# 显示所有数据库
show databases;
# 查看指定数据库的创建指令
show create database 数据库名称;(3)使用数据库
sql
use 数据库名称; # 进入指定数据库(4)修改数据库
sql
# 修改字符集
alter database 数据库名称 charset gbk;
# 修改字符集和校对集
alter database 数据库名称 charset gbk collate gbk_chinese_ci;(5)删除数据库
sql
drop database 数据库名称; # 谨慎操作,会删除所有表和数据3. 数据表(Table)操作
(1)创建数据表
sql
# 在当前数据库创建表
create table 表名 (
字段名1 字段类型,
字段名2 字段类型
) 表选项; # 如engine Innodb charset utf8MB4
# 示例(含主键)
CREATE TABLE table_qiangu1 (
id int NOT NULL AUTO_INCREMENT PRIMARY KEY
);
# 在指定数据库创建表
create table 数据库名.表名(
字段名 字段类型
);(2)复制数据表
sql
# 复制表结构(不含数据)
create table 新表名 like 数据库名.原表名;(3)查看数据表
sql
# 显示当前数据库所有表
show tables;
# 显示指定数据库所有表
show tables from 数据库名;
# 查看表创建指令
show create table 表名;
# 按名称模糊查询表
show tables like '%关键字%'; # %匹配任意多个字符
show tables like '前缀___'; # _匹配一个字符(示例:前缀后接3个字符)(4)查看表结构
sql
desc 表名; # 方式1
describe 表名; # 方式2
show columns from 表名; # 方式3(5)修改数据表
sql
# 修改表名
rename table 原表名 to 新表名;
rename table 数据库名.原表名 to 数据库名.新表名;
# 修改表选项(如字符集)
alter table 表名 charset gbk;(6)删除数据表
sql
drop table 表名; # 谨慎操作,会删除所有字段和数据4. 字段(Field)操作
(1)新增字段
sql
# 基础新增(默认在最后)
alter table 表名 add 字段名 字段类型 [字段属性];
# 指定位置新增
alter table 表名 add 字段名 字段类型 first; # 最前面
alter table 表名 add 字段名 字段类型 after 已有字段名; # 某字段后(2)修改字段名
sql
alter table 表名 change 原字段名 新字段名 字段类型 [字段属性] [位置];(3)修改字段类型/属性/位置
sql
alter table 表名 modify 字段名 字段类型 [字段属性] [位置];(4)修改字段默认值
sql
# 删除默认值
alter table 表名 alter column 字段名 drop default;
# 设置默认值
alter table 表名 alter column 字段名 set default 默认值;(5)删除字段
sql
alter table 表名 drop 字段名; # 谨慎操作,会删除字段数据5. 数据操作
(1)新增数据
sql
# 全字段插入(值顺序与字段顺序一致)
insert into 表名 values(值1, 值2, ...);
# 部分字段插入(值顺序与指定字段顺序一致)
insert into 表名 (字段1, 字段2) values(值1, 值2);(2)查询数据
sql
# 查询所有字段数据
select * from 表名;
# 查询指定字段数据
select 字段1, 字段2 from 表名;
# 按条件查询
select * from 表名 where 条件;(3)修改数据
sql
# 按条件修改(无where则修改所有记录)
update 表名 set 字段1=新值1, 字段2=新值2 where 条件;(4)删除数据
sql
# 按条件删除(无where则删除所有记录)
delete from 表名 where 条件;五、MySQL 字段数据类型
1. 整数类型
| 类型 | 字节数 | 说明 |
|---|---|---|
| tinyint | 1 | 迷你整型,范围-128~127(无符号0~255) |
| smallint | 2 | 短整型 |
| mediumint | 3 | 中整型 |
| int | 4 | 标准整型(最常用) |
| bigint | 8 | 大整型 |
- 特点:默认有符号,
unsigned修饰为无符号(仅正整数) - 显示宽度:如
int(3)表示最少显示3位,需配合zerofill实现零填充(仅对无符号有效)
2. 小数类型
- 浮点型:
- float:4字节,精度6-7位有效数字
- double:8字节,精度14-15位有效数字
- 特点:超过精度范围会自动四舍五入
3. 字符串类型
(文档未详细说明,补充常见类型):
- char:固定长度字符串,适合短字符串(如手机号)
- varchar:可变长度字符串,适合长字符串(如姓名、描述)
- text:大文本数据
4. 时间日期类型
(文档未详细说明,补充常见类型):
- date:日期(年-月-日)
- time:时间(时:分:秒)
- datetime:日期时间(年-月-日 时:分:秒)
- timestamp:时间戳(自动记录数据修改时间)
六、MySQL 常用查询命令
1. 基础查询命令
sql
# 以root身份进入命令行
mysql -u root -p
# 查看数据库
show databases;
# 进入数据库
use 数据库名;
# 查看表
show tables;
# 查询表所有数据
SELECT * FROM 表名;
# 删除表
drop table 表名;
# 删除数据库
drop database 数据库名;
# 创建数据库
create database 数据库名;2. where 条件查询
sql
SELECT * FROM 表名 where 条件;(1)比较运算符
=(等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、!=(不等于)- 示例:
SELECT * FROM 表名 WHERE age > 20;
(2)逻辑运算符
- AND、OR、NOT
- 示例:
SELECT * FROM 表名 WHERE age > 20 AND sex = '男';
(3)范围查询
in(非连续范围):SELECT * FROM 表名 WHERE name IN ['张三', '李四'];between ... and ...(连续范围):SELECT * FROM 表名 WHERE age BETWEEN 20 AND 30;
(4)模糊查询(like)
%:匹配任意多个字符- 示例:
select * from 表名 where title like "%前端%";(包含“前端”)
- 示例:
_:匹配一个字符- 示例:
SELECT * FROM 表名 WHERE title LIKE "千古___";(“千古”后接3个字符)
- 示例:
(5)NULL判断
is null(为空)、is not null(非空)- 示例:
select * from 表名 where name is not NULL;
3. 联表查询
(1)类型
inner join:只显示两表匹配的行left join:显示左表所有行,右表无匹配则用null填充right join:显示右表所有行,左表无匹配则用null填充
(2)示例
sql
# inner join(等价于两表逗号连接+where条件)
SELECT * FROM 表A INNER JOIN 表B ON 表A.字段 = 表B.字段;
# left join
SELECT * FROM 表A LEFT JOIN 表B ON 表A.字段 = 表B.字段;
# right join
SELECT * FROM 表A RIGHT JOIN 表B ON 表A.字段 = 表B.字段;4. 自关联查询
- 适用场景:涉及层级关系的数据(如部门与子部门)
- 原理:将表自身作为另一张表进行关联查询
5. 子查询
- 定义:一个查询结果作为另一个查询的条件
- 示例:
SELECT * FROM 表A WHERE 字段 IN (SELECT 字段 FROM 表B WHERE 条件);
七、事务操作
- 开启事务:
begin - 提交事务:
commit(确认所有操作) - 回滚事务:
rollback(取消所有操作,恢复到开启前状态)
八、数据恢复(使用SQL文件)
- 创建目标数据库:
create database 数据库名称; - 进入数据库:
use 数据库名称; - 导入SQL文件:
source sql文件路径;
九、MySQL 设计三大范式
1. 第一范式(1NF):原子性
- 表的每一列必须具有原子性,不可再分
2. 第二范式:唯一性
- 建立在第一范式基础上
- 所有非主键字段必须完全依赖主键,不能部分依赖
3. 第三范式
- 建立在第二范式基础上
- 不存在传递依赖(非主键字段不依赖其他非主键字段)