首页 兴趣热爱 正文
  • 本文约3630字,阅读需18分钟
  • 521
  • 0

MySQL从入门到放弃?不妨看看这个~

一、MySQL 基础概念

1.1 什么是 MySQL

关系型数据库管理系统(RDBMS),基于 SQL(结构化查询语言) 进行数据操作

开源、轻量、高效,广泛应用于 Web 开发(如 LAMP/LEMP 架构)

1.2 核心术语

 

术语 说明
数据库(DB) 存储数据的容器,如 employeesecommerce
表(Table) 数据库中的二维表格,由行(记录)和列(字段)组成
字段(Field) 表中的列,定义数据类型(如 INTVARCHARDATE
记录(Row) 表中的一行,包含多个字段的具体值
主键(PK) 唯一标识一条记录的字段,不允许重复和为空(如 user_id
外键(FK) 用于建立表间关联的字段,指向另一张表的主键(如 dept_id 关联部门表)

二、安装与配置(以 Windows 为例)

2.1 下载安装

官网下载 MySQL Installer(https://dev.mysql.com/downloads/mysql/

选择 Custom 自定义安装,勾选:

MySQL Server(数据库服务)

MySQL Workbench(图形化管理工具)

按向导完成安装,设置 root 用户密码(需牢记)

2.2 配置环境变量

将 MySQL 安装目录下的 bin 路径(如 C:\Program Files\MySQL\MySQL Server 8.0\bin)添加到系统环境变量 PATH

2.3 启动服务

命令行执行:net start mysql(停止服务:net stop mysql

或通过 服务管理器services.msc)设置为自动启动

三、SQL 核心语法

3.1 数据定义语言(DDL)

3.1.1 数据库操作

 

\-- 创建数据库(若不存在则创建,字符集设为 UTF8)

CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8mb4;

\-- 使用数据库

USE mydb;

\-- 删除数据库

DROP DATABASE IF EXISTS mydb;

3.1.2 表操作

 

\-- 创建用户表

CREATE TABLE IF NOT EXISTS users (

;   user\_id INT PRIMARY KEY AUTO\_INCREMENT, -- 自增主键

;   username VARCHAR(50) NOT NULL UNIQUE,   -- 用户名(非空、唯一)

;   email VARCHAR(100) NOT NULL,

;   age TINYINT,

;   create\_time DATETIME DEFAULT CURRENT\_TIMESTAMP -- 默认值为当前时间

);

\-- 修改表结构

ALTER TABLE users;

ADD COLUMN phone VARCHAR(20),         -- 添加字段

MODIFY COLUMN age SMALLINT,           -- 修改字段类型

DROP COLUMN phone,                     -- 删除字段

RENAME COLUMN email TO user\_email;     -- 重命名字段

\-- 删除表

DROP TABLE IF EXISTS users;

3.2 数据操作语言(DML)

3.2.1 插入数据

 

\-- 全字段插入

INSERT INTO users (username, email, age);

VALUES ('john\_doe', 'john@example.com', 28);

\-- 自动填充默认值(如 create\_time)

INSERT INTO users (username, email);

VALUES ('alice\_smith', 'alice@example.com');

3.2.2 更新数据

 

\-- 更新单个字段

UPDATE users;

SET age = 30;

WHERE username = 'john\_doe';

\-- 批量更新

UPDATE users;

SET age = age + 1;

WHERE age < 30;

3.2.3 删除数据

 

\-- 删除单条记录

DELETE FROM users;

WHERE username = 'alice\_smith';

\-- 清空表(不可恢复,速度更快)

TRUNCATE TABLE users;

3.3 数据查询语言(DQL)

3.3.1 基础查询

 

\-- 查询所有字段

SELECT \* FROM users;

\-- 查询指定字段(去重)

SELECT DISTINCT age FROM users;

\-- 别名用法

SELECT username AS "用户名", age AS "年龄" FROM users;

3.3.2 条件过滤(WHERE)

 

\-- 查询年龄大于 25 且邮箱包含 @example.com 的用户

SELECT \* FROM users;

WHERE age > 25 AND email LIKE '%@example.com';

\-- 模糊查询(% 匹配任意字符,\_ 匹配单个字符)

SELECT \* FROM users;

WHERE username LIKE 'j%'; -- 以 j 开头的用户名

3.3.3 排序与分页

 

\-- 按年龄降序排列,年龄相同则按用户名升序

SELECT \* FROM users;

ORDER BY age DESC, username ASC;

\-- 分页查询(LIMIT 偏移量, 每页数量;MySQL 从 0 开始计数)

SELECT \* FROM users;

LIMIT 0, 10; -- 第 1 页(10 条记录)

3.3.4 聚合函数与分组

 

\-- 统计用户总数

SELECT COUNT(\*) AS total\_users FROM users;

\-- 按年龄分组,统计各组人数及平均邮箱长度

SELECT age,;

; COUNT(\*) AS count,;

; AVG(LENGTH(email)) AS avg\_email\_length;

FROM users;

GROUP BY age;

HAVING count > 1; -- 对分组结果过滤(不能用 WHERE)

四、表关系与多表查询

4.1 表关系类型

一对一(1:1):如用户与个人详情表(用主键关联)

一对多(1:N):如部门与员工表(部门表主键为员工表外键)

多对多(M:N):如学生与课程表(需中间表存储关联关系)

4.2 多表查询示例

 

\-- 假设存在三张表:

\-- employees(员工表,emp\_id, emp\_name, dept\_id)

\-- departments(部门表,dept\_id, dept\_name)

\-- emp\_courses(员工课程表,emp\_id, course\_id)

\-- courses(课程表,course\_id, course\_name)

\-- 1. 内连接(查询员工及其所属部门)

SELECT e.emp\_name, d.dept\_name

FROM employees e

INNER JOIN departments d ON e.dept\_id = d.dept\_id;

\-- 2. 左连接(查询所有员工,包括无部门的)

SELECT e.emp\_name, d.dept\_name

FROM employees e

LEFT JOIN departments d ON e.dept\_id = d.dept\_id;

\-- 3. 多表连接(查询员工选修的课程)

SELECT e.emp\_name, c.course\_name

FROM employees e

JOIN emp\_courses ec ON e.emp\_id = ec.emp\_id

JOIN courses c ON ec.course\_id = c.course\_id;

五、索引与优化

5.1 索引作用

加快数据查询速度,类似书籍目录

代价:占用存储空间,影响写入性能(INSERT/UPDATE/DELETE)

5.2 创建索引

 

\-- 在 username 字段创建普通索引

CREATE INDEX idx\_username ON users (username);

\-- 在 email 字段创建唯一索引

CREATE UNIQUE INDEX idx\_email ON users (email);

\-- 在多字段组合上创建索引

CREATE INDEX idx\_name\_age ON users (username, age);

5.3 查看执行计划

 

\-- 分析查询语句的执行效率

EXPLAIN SELECT \* FROM users WHERE username = 'john\_doe';

六、常用工具

6.1 MySQL Workbench

图形化界面,支持 SQL 编辑、可视化建表、数据库迁移等功能

6.2 命令行客户端

 

\-- 登录 MySQL(替换为实际密码)

mysql -u root -p

6.3 其他工具

Navicat:功能强大的数据库管理工具(需付费)

phpMyAdmin:基于 Web 的 MySQL 管理工具(适合 PHP 环境)

七、常见错误与解决

 

错误信息 可能原因 解决方法
Access denied for user 'root'@'localhost' 密码错误 重置 root 密码(参考官方文档)
Table 'mydb.users' doesn't exist 表不存在 确认数据库和表名是否正确,使用 CREATE TABLE
Duplicate entry 'xxx' for key 'unique_key' 唯一索引冲突 检查插入数据是否重复
Out of memory 内存不足 调整 MySQL 配置文件(my.cnf/my.ini)中的内存参数

 

标签:学术
收藏

扫描二维码,在手机上阅读
评论