【Mysql】Mysql学习教程 新手入门超详细(建议保存)

Mysql学习教程 新手入门超详细(建议保存)

    • 一、MySQL 快速入门
      • 1. 安装与配置
      • 2. 连接数据库
    • 二、核心操作语法
      • 1. 数据库操作
      • 2. 数据表管理
      • 3. CRUD 基础操作
    • 三、高级查询技巧
      • 1. 复杂查询
      • 2. 窗口函数
      • 3. 通用表表达式(CTE)
    • ⚙️ 四、数据库管理
      • 1. 索引优化
      • 2. 事务控制
      • 3. 用户与权限
    • 五、实战案例
      • 电商场景 SQL 示例
    • 六、文档生成指南
      • 1. 自动导出数据库文档
      • 2. 常用维护命令速查
    • ️ 七、安全与备份
      • 1. 定时备份脚本
      • 2. 密码加密存储
    • 附:学习资源

一、MySQL 快速入门

1. 安装与配置

# Ubuntu 安装
sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql

# 初始化安全设置(设置 root 密码)
sudo mysql_secure_installation

2. 连接数据库

-- 登录本地MySQL(需输入密码)
mysql -u root -p

-- 显示所有数据库
SHOW DATABASES;

二、核心操作语法

1. 数据库操作

CREATE DATABASE shop;      -- 创建数据库
USE shop;                  -- 切换到 shop 数据库
DROP DATABASE test;        -- 删除数据库

2. 数据表管理

-- 创建表(含主键、自增、非空约束)
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 修改表结构
ALTER TABLE users ADD COLUMN age INT AFTER name;  -- 添加列
ALTER TABLE users MODIFY email VARCHAR(150);      -- 修改列类型

3. CRUD 基础操作

-- 插入数据
INSERT INTO users (name, email) 
VALUES ('张三', '[email protected]');

-- 查询数据
SELECT id, name AS 姓名 FROM users WHERE age > 18 ORDER BY id DESC LIMIT 10;

-- 更新数据(需启用 safe update 模式避免全表更新)
UPDATE users SET age = 20 WHERE id = 1;

-- 删除数据
DELETE FROM users WHERE email IS NULL;

三、高级查询技巧

1. 复杂查询

-- 多表连接(INNER JOIN)
SELECT o.order_id, u.name 
FROM orders o
INNER JOIN users u ON o.user_id = u.id;

-- 分组统计(GROUP BY + HAVING)
SELECT department, COUNT(*) AS num_employees 
FROM employees
GROUP BY department
HAVING num_employees > 5;

-- 子查询(EXISTS)
SELECT name FROM products 
WHERE EXISTS (
  SELECT 1 FROM orders WHERE product_id = products.id
);

2. 窗口函数

-- 计算销售排名(按部门分区)
SELECT 
  employee_id,
  sales,
  RANK() OVER (PARTITION BY department ORDER BY sales DESC) AS dept_rank
FROM sales_records;

3. 通用表表达式(CTE)

WITH dept_sales AS (
  SELECT department, SUM(sales) total 
  FROM orders 
  GROUP BY department
)
SELECT * FROM dept_sales WHERE total > 100000;

⚙️ 四、数据库管理

1. 索引优化

-- 创建索引
CREATE INDEX idx_name ON users(name);
CREATE UNIQUE INDEX idx_email ON users(email);  -- 唯一索引

-- 查看执行计划(排查慢查询)
EXPLAIN SELECT * FROM users WHERE name LIKE '张%';

2. 事务控制

START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- 回滚测试:ROLLBACK;
COMMIT;

3. 用户与权限

-- 创建用户
CREATE USER 'dev_user'@'localhost' IDENTIFIED BY 'Password123!';

-- 授权(精确到表级)
GRANT SELECT, INSERT ON shop.products TO 'dev_user'@'localhost';
FLUSH PRIVILEGES;

五、实战案例

电商场景 SQL 示例

-- 查询近一个月销售额 Top10 商品
SELECT
  p.product_name,
  SUM(oi.quantity * oi.unit_price) AS total_sales
FROM order_items oi
JOIN products p ON oi.product_id = p.id
JOIN orders o ON oi.order_id = o.id
WHERE o.order_date > CURDATE() - INTERVAL 1 MONTH
GROUP BY p.id
ORDER BY total_sales DESC
LIMIT 10;

六、文档生成指南

1. 自动导出数据库文档

# 使用 mysqldump 导出结构
mysqldump -u root -p --no-data shop > schema.sql

# 使用数据字典工具(推荐:phpMyAdmin 或 MySQL Workbench)
-- 查询生成数据字典
SELECT 
  TABLE_NAME AS `表名`,
  COLUMN_NAME AS `字段名`,
  DATA_TYPE AS `数据类型`,
  COLUMN_COMMENT AS `描述`
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'shop';

2. 常用维护命令速查

命令 作用
SHOW GLOBAL STATUS LIKE 'Threads_running'; 查看当前连接数
SHOW VARIABLES LIKE '%buffer%'; 检查内存缓冲区设置
ANALYZE TABLE users; 更新表统计信息

️ 七、安全与备份

1. 定时备份脚本

#!/bin/bash
DATE=$(date +%Y%m%d)
mysqldump -u root -p'your_password' --all-databases | gzip > /backups/mysql_$DATE.sql.gz
# 添加到 crontab:0 2 * * * /path/to/backup.sh

2. 密码加密存储

-- MySQL 8.0 使用 caching_sha2_password 插件
ALTER USER 'dev_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';

附:学习资源

  1. 官方文档
  2. 练习平台:SQLZoo, LeetCode SQL题库
  3. 书籍推荐:《高性能MySQL》、《MySQL技术内幕》

重点提示:实操时建议在测试环境练习高危操作(如DROP/ALTER),生产环境必须备份!


本教程遵循 MIT License 协议开源,代码可自由使用。建议配合 MySQL Docker 镜像 快速搭建练习环境。

你可能感兴趣的:(mysql,学习,数据库,java,springboot,后端,sql)