MySQL入门指南:从安装到第一个查询

简介: 本文为MySQL数据库入门指南,内容涵盖从安装配置到基础操作与SQL语法的详细教程。文章首先介绍在Windows、macOS和Linux系统中安装MySQL的步骤,并指导进行初始配置和安全设置。随后讲解数据库和表的创建与管理,包括表结构设计、字段定义和约束设置。接着系统介绍SQL语句的基本操作,如插入、查询、更新和删除数据。此外,文章还涉及高级查询技巧,包括多表连接、聚合函数和子查询的应用。通过实战案例,帮助读者掌握复杂查询与数据修改。最后附有常见问题解答和实用技巧,如数据导入导出和常用函数使用。适合初学者快速入门MySQL数据库,助力数据库技能提升。

💡 摘要:你是否想学习数据库但不知从何开始?是否被SQL语句的复杂性吓到?是否想掌握当今最流行的开源数据库?

别担心,MySQL是世界上最流行的开源关系数据库,它强大、易用且完全免费。无论你是想开发Web应用、进行数据分析还是学习数据库技术,MySQL都是最佳选择。

本文将带你从MySQL的安装和配置开始,一步步教你搭建数据库环境。然后学习数据库和表的基本操作,掌握SQL语言的核心语法。最后通过实战案例完成你的第一个查询。从安装到配置,从创建表到复杂查询,让你轻松迈入数据库世界的大门。文末附常见问题解答和实用技巧,助你快速成为MySQL新手玩家。

一、MySQL安装与配置

1. 下载与安装

Windows系统安装

  1. 访问MySQL官网(https://dev.mysql.com/downloads/mysql/
  2. 选择MySQL Community Server
  3. 下载Windows (x86, 64-bit) MSI Installer
  4. 运行安装程序,选择"Developer Default"
  5. 设置root用户密码(牢记这个密码!)

macOS系统安装

bash

# 使用Homebrew安装

brew install mysql


# 或者下载DMG安装包

# 访问MySQL官网下载macOS版本

Linux系统安装

bash

# Ubuntu/Debian

sudo apt update

sudo apt install mysql-server


# CentOS/RHEL

sudo yum install mysql-server

sudo systemctl start mysqld

2. 初始配置

启动MySQL服务

bash

# Windows

# 服务会自动启动,可以在服务管理中查看


# macOS

brew services start mysql


# Linux

sudo systemctl start mysql

sudo systemctl enable mysql  # 设置开机启动

安全配置

bash

# 运行安全安装脚本

sudo mysql_secure_installation


# 你会被问到以下问题:

# 1. 设置root密码(如果尚未设置)

# 2. 移除匿名用户?[Y/n] y

# 3. 禁止root远程登录?[Y/n] y  

# 4. 移除测试数据库?[Y/n] y

# 5. 重新加载权限表?[Y/n] y

3. 连接MySQL

命令行连接

bash

# 使用root用户登录

mysql -u root -p


# 输入之前设置的root密码

# 成功后会看到MySQL提示符:mysql>

验证安装

sql

-- 查看MySQL版本

SELECT VERSION();


-- 显示当前时间

SELECT NOW();


-- 查看所有数据库

SHOW DATABASES;

二、数据库基本操作

1. 创建和管理数据库

创建数据库

sql

-- 创建数据库

CREATE DATABASE school;


-- 创建数据库并指定字符集

CREATE DATABASE school

CHARACTER SET utf8mb4

COLLATE utf8mb4_unicode_ci;


-- 查看所有数据库

SHOW DATABASES;


-- 选择使用数据库

USE school;


-- 删除数据库(谨慎操作!)

-- DROP DATABASE school;

2. 数据表操作

创建表

sql

-- 创建学生表

CREATE TABLE students (

   id INT PRIMARY KEY AUTO_INCREMENT,      -- 主键,自增长

   name VARCHAR(50) NOT NULL,              -- 学生姓名,不能为空

   age INT,                                -- 年龄

   gender ENUM('男', '女'),                -- 性别枚举

   email VARCHAR(100) UNIQUE,              -- 邮箱,唯一约束

   created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP  -- 创建时间

);


-- 创建课程表

CREATE TABLE courses (

   id INT PRIMARY KEY AUTO_INCREMENT,

   course_name VARCHAR(100) NOT NULL,

   teacher VARCHAR(50),

   credit INT DEFAULT 1

);


-- 创建选课关系表

CREATE TABLE student_courses (

   student_id INT,

   course_id INT,

   score DECIMAL(4,1),

   PRIMARY KEY (student_id, course_id),

   FOREIGN KEY (student_id) REFERENCES students(id),

   FOREIGN KEY (course_id) REFERENCES courses(id)

);

查看表结构

sql

-- 查看表结构

DESCRIBE students;


-- 查看建表语句

SHOW CREATE TABLE students;


-- 查看所有表

SHOW TABLES;

三、SQL基础语法

1. 数据操作语言(DML)

插入数据

sql

-- 插入学生数据

INSERT INTO students (name, age, gender, email) VALUES

('张三', 20, '男', 'zhangsan@email.com'),

('李四', 19, '女', 'lisi@email.com'),

('王五', 21, '男', 'wangwu@email.com'),

('赵六', 20, '女', 'zhaoliu@email.com');


-- 插入课程数据

INSERT INTO courses (course_name, teacher, credit) VALUES

('数学', '张老师', 4),

('英语', '李老师', 3),

('编程', '王老师', 5),

('物理', '赵老师', 4);


-- 插入选课数据

INSERT INTO student_courses (student_id, course_id, score) VALUES

(1, 1, 85.5),

(1, 2, 90.0),

(2, 1, 92.5),

(2, 3, 88.0),

(3, 2, 76.5),

(3, 4, 95.0),

(4, 1, 89.5),

(4, 3, 91.5);

查询数据

sql

-- 查询所有学生

SELECT * FROM students;


-- 查询指定列

SELECT name, age FROM students;


-- 条件查询

SELECT * FROM students WHERE age > 20;

SELECT * FROM students WHERE gender = '女';


-- 排序查询

SELECT * FROM students ORDER BY age DESC;

SELECT * FROM students ORDER BY created_at ASC;


-- 限制结果数量

SELECT * FROM students LIMIT 3;

SELECT * FROM students LIMIT 2, 3;  -- 从第2条开始,显示3条

更新数据

sql

-- 更新学生年龄

UPDATE students SET age = 22 WHERE name = '王五';


-- 更新多个字段

UPDATE students SET age = age + 1, email = 'new_email@example.com' WHERE id = 1;


-- 注意:一定要有WHERE条件,否则会更新所有记录!

删除数据

sql

-- 删除特定记录

DELETE FROM students WHERE name = '赵六';


-- 清空表(谨慎操作!)

-- TRUNCATE TABLE students;

2. 数据查询语言(DQL)

基本查询

sql

-- 去重查询

SELECT DISTINCT age FROM students;


-- 别名查询

SELECT name AS 姓名, age AS 年龄 FROM students;


-- 计算字段

SELECT name, age, age * 2 AS double_age FROM students;

条件查询

sql

-- 比较运算符

SELECT * FROM students WHERE age > 20;

SELECT * FROM students WHERE age BETWEEN 18 AND 21;


-- 逻辑运算符

SELECT * FROM students WHERE age > 19 AND gender = '男';

SELECT * FROM students WHERE age < 20 OR gender = '女';


-- IN操作符

SELECT * FROM students WHERE age IN (19, 20, 21);


-- LIKE模糊查询

SELECT * FROM students WHERE name LIKE '张%';  -- 张开头

SELECT * FROM students WHERE name LIKE '%五';  -- 五结尾

SELECT * FROM students WHERE name LIKE '%李%'; -- 包含李


-- NULL值检查

SELECT * FROM students WHERE email IS NULL;

SELECT * FROM students WHERE email IS NOT NULL;

四、高级查询技巧

1. 连接查询(JOIN)

内连接

sql

-- 查询学生选课信息

SELECT s.name, c.course_name, sc.score

FROM students s

INNER JOIN student_courses sc ON s.id = sc.student_id

INNER JOIN courses c ON c.id = sc.course_id;


-- 查询张三的所有课程

SELECT s.name, c.course_name, sc.score

FROM students s

INNER JOIN student_courses sc ON s.id = sc.student_id

INNER JOIN courses c ON c.id = sc.course_id

WHERE s.name = '张三';

左连接

sql

-- 查询所有学生及其选课情况(包括没选课的学生)

SELECT s.name, c.course_name, sc.score

FROM students s

LEFT JOIN student_courses sc ON s.id = sc.student_id

LEFT JOIN courses c ON c.id = sc.course_id;

2. 聚合函数

常用聚合函数

sql

-- 统计学生数量

SELECT COUNT(*) FROM students;


-- 统计女生数量

SELECT COUNT(*) FROM students WHERE gender = '女';


-- 计算平均年龄

SELECT AVG(age) FROM students;


-- 最大年龄和最小年龄

SELECT MAX(age), MIN(age) FROM students;


-- 年龄总和

SELECT SUM(age) FROM students;

分组查询

sql

-- 按性别分组统计

SELECT gender, COUNT(*), AVG(age)

FROM students

GROUP BY gender;


-- 按年龄分组

SELECT age, COUNT(*) as count

FROM students

GROUP BY age

ORDER BY count DESC;


-- HAVING子句(分组后过滤)

SELECT age, COUNT(*) as count

FROM students

GROUP BY age

HAVING count > 1;

3. 子查询

各种子查询

sql

-- 查询年龄最大的学生

SELECT * FROM students

WHERE age = (SELECT MAX(age) FROM students);


-- 查询没有选课的学生

SELECT * FROM students

WHERE id NOT IN (SELECT DISTINCT student_id FROM student_courses);


-- 查询每门课程的最高分

SELECT c.course_name,

      (SELECT MAX(score) FROM student_courses WHERE course_id = c.id) as max_score

FROM courses c;

五、实战案例:学生管理系统

1. 复杂查询示例

多表联合查询

sql

-- 查询每门课程的平均分

SELECT c.course_name, AVG(sc.score) as avg_score

FROM courses c

LEFT JOIN student_courses sc ON c.id = sc.course_id

GROUP BY c.id

ORDER BY avg_score DESC;


-- 查询每个学生的平均分

SELECT s.name, AVG(sc.score) as avg_score

FROM students s

LEFT JOIN student_courses sc ON s.id = sc.student_id

GROUP BY s.id

HAVING avg_score IS NOT NULL

ORDER BY avg_score DESC;


-- 查询分数超过90分的学生课程信息

SELECT s.name, c.course_name, sc.score

FROM students s

INNER JOIN student_courses sc ON s.id = sc.student_id

INNER JOIN courses c ON c.id = sc.course_id

WHERE sc.score > 90;

2. 数据修改操作

批量更新

sql

-- 给所有学生年龄加1

UPDATE students SET age = age + 1;


-- 将编程课程的学分改为6

UPDATE courses SET credit = 6 WHERE course_name = '编程';


-- 将数学成绩低于60分的改为60分

UPDATE student_courses SET score = 60

WHERE course_id = (SELECT id FROM courses WHERE course_name = '数学')

AND score < 60;

六、MySQL实用技巧

1. 导入导出数据

导出数据

bash

# 导出整个数据库

mysqldump -u root -p school > school_backup.sql


# 导出特定表

mysqldump -u root -p school students > students_backup.sql


# 只导出结构

mysqldump -u root -p -d school > school_structure.sql

导入数据

bash

# 导入数据库

mysql -u root -p school < school_backup.sql


# 在MySQL中导入

SOURCE /path/to/school_backup.sql;

2. 常用函数

字符串函数

sql

-- 字符串操作

SELECT CONCAT(name, '的年龄是', age) AS info FROM students;

SELECT UPPER(name), LOWER(email) FROM students;

SELECT LENGTH(name) AS name_length FROM students;

SELECT SUBSTRING(name, 1, 1) AS first_char FROM students;

日期函数

sql

-- 日期操作

SELECT NOW(), CURDATE(), CURTIME();

SELECT DATE_ADD(NOW(), INTERVAL 1 DAY);

SELECT DATEDIFF('2024-01-01', NOW());

SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日');

七、常见问题解答

1. 安装问题

Q: 忘记root密码怎么办?

bash

# 1. 停止MySQL服务

sudo systemctl stop mysql


# 2. 跳过权限验证启动

sudo mysqld_safe --skip-grant-tables &


# 3. 重置密码

mysql -u root

UPDATE mysql.user SET authentication_string=PASSWORD('新密码') WHERE User='root';

FLUSH PRIVILEGES;

Q: 连接被拒绝怎么办?

bash

# 检查MySQL服务是否启动

sudo systemctl status mysql


# 检查防火墙设置

sudo ufw allow mysql

2. 操作问题

Q: 如何查看当前使用的数据库?

sql

SELECT DATABASE();

Q: 如何查看表的大小?

sql

SELECT table_name AS `Table`,

      round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`

FROM information_schema.TABLES

WHERE table_schema = "school"

ORDER BY (data_length + index_length) DESC;

八、学习资源推荐

1. 下一步学习建议

深入学习

  • 📚 索引优化:学习如何创建和使用索引提高查询性能
  • 📚 事务处理:掌握ACID属性和事务控制
  • 📚 存储过程和函数:学习服务器端编程
  • 📚 性能调优:学习查询优化和服务器配置

实践项目

  • 🔨 个人博客系统
  • 🔨 电子商务网站
  • 🔨 学生信息管理系统
  • 🔨 库存管理系统
相关文章
|
17天前
|
人工智能 JavaScript 前端开发
实战使用 Qwen3-coder 低代码开发 HTML 个人网站
阿里巴巴开源的Qwen3-coder模型,凭借强大性能和低代码能力,助力用户快速搭建个人网站。本文详解环境配置、提示词设计与部署流程,适合编程新手快速上手,掌握AI辅助开发技能。
1103 8