Skip to content

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结构):
    1. 客户端通过主机(host)+端口号(port)连接服务端
    2. 输入用户名(username)和密码(password)验证身份
    3. 连接成功后,通过SQL指令操作数据

二、MySQL 安装与配置

1. Windows 系统安装

(1)下载

(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)安装步骤

  1. 以管理员身份运行cmd,进入安装目录的bin目录:

    cmd
    E:
    cd E:\mysql\mysql-8.0.30-winx64\bin
  2. 初始化MySQL(记录临时密码):

    cmd
    mysqld --initialize --user=mysql --console
  3. 安装MySQL服务:

    cmd
    mysqld –install mysql
  4. 启动/停止服务:

    cmd
    net start mysql  # 启动
    net stop mysql   # 停止

(5)登录与修改密码

  1. 登录(使用初始化时的临时密码):

    cmd
    mysql -uroot -p
  2. 修改密码:

    sql
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
  3. 修改root用户权限:

    sql
    create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
  4. 刷新权限:

    sql
    flush privileges;

2. Mac 系统安装

(1)下载与安装

(2)配置环境变量

  1. 打开~/.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'
  2. 使配置生效:

    bash
    source ~/.bash_profile
  3. 解决终端重启后配置失效问题: 打开~/.zshrc,添加:

    bash
    source ~/.bash_profile

(3)登录

bash
mysql -u root -p

三、Navicat Premium 使用

1. 新建连接

  • 打开软件,选择「文件-新建连接-mysql」
  • 配置连接信息(主机、端口、用户名、密码),完成本地数据库连接创建

2. 新建数据库与表

  1. 选中连接,右键「新建数据库」,设置数据库名称和字符集
  2. 选中数据库,右键「新建表」,添加字段(设置字段名、类型、属性等)
  3. 保存表结构,插入数据(直接在表格视图中输入或通过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. 整数类型

类型字节数说明
tinyint1迷你整型,范围-128~127(无符号0~255)
smallint2短整型
mediumint3中整型
int4标准整型(最常用)
bigint8大整型
  • 特点:默认有符号,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文件)

  1. 创建目标数据库:create database 数据库名称;
  2. 进入数据库:use 数据库名称;
  3. 导入SQL文件:source sql文件路径;

九、MySQL 设计三大范式

1. 第一范式(1NF):原子性

  • 表的每一列必须具有原子性,不可再分

2. 第二范式:唯一性

  • 建立在第一范式基础上
  • 所有非主键字段必须完全依赖主键,不能部分依赖

3. 第三范式

  • 建立在第二范式基础上
  • 不存在传递依赖(非主键字段不依赖其他非主键字段)

Released under the MIT License.