Mysql学习——sql语言以及常见数据库
字数 3153 2025-10-29 23:25:25

MySQL与SQL语言全面学习指南

第一部分:数据库基础概念

1.1 什么是数据库?

  • 数据库(DataBase,DB):长期存储在计算机内、有组织的、可共享的大量数据的集合。它是一个数据存储的“仓库”。
  • 数据库管理系统(DBMS):操作和管理数据库的大型软件,用于建立、使用和维护数据库。MySQL就是一种DBMS。
  • 关系型数据库(RDBMS):建立在关系模型基础上的数据库。它由多张相互连接的二维表(Table)组成。
    • 特点
      1. 使用表存储数据,格式统一,便于维护。
      2. 使用标准的SQL语言进行操作,简单易用,可以进行非常复杂的查询。
      3. 数据完整性高,支持事务(ACID特性)。

1.2 什么是SQL?

  • SQL(Structured Query Language):结构化查询语言,是用于操作关系型数据库的编程语言。
  • 特点
    • 是一种标准化的语言,几乎所有关系型数据库(如MySQL, Oracle, SQL Server, PostgreSQL)都支持。
    • 通过简单的英语关键字(如SELECT, INSERT, UPDATE)来执行复杂的数据库操作。
  • SQL分类:根据其功能,主要分为三类(文章中提到了两类,此处补充完整):
    1. DDL(Data Definition Language,数据定义语言):用于定义和修改数据库对象(如数据库、表、索引)。例如:CREATE, ALTER, DROP
    2. DML(Data Manipulation Language,数据操作语言):用于对表中的数据进行增、删、改。例如:INSERT, UPDATE, DELETE
    3. DQL(Data Query Language,数据查询语言):用于查询表中的数据。虽然只有一个关键字SELECT,但它是SQL中最核心、最复杂的部分。
    4. DCL(Data Control Language,数据控制语言):用于控制数据库的访问权限。例如:GRANT, REVOKE

1.3 MySQL的数据模型

  • 在MySQL中,创建一个数据库,本质上是在服务器的某个目录(如mysql/data/)下创建一个同名的文件夹。
  • 在数据库中创建表,则是在该数据库文件夹下创建对应的文件(如.frm表结构文件,.ibd数据文件等)。

第二部分:MySQL安装与连接

2.1 MySQL安装

  • 官方下载地址https://downloads.mysql.com/archives/community/(此处链接指向历史版本存档,适合寻找特定版本)。
  • 安装后重要步骤:将MySQL的bin目录(如C:\Program Files\MySQL\MySQL Server 8.0\bin)添加到系统的环境变量(PATH) 中。这样可以在任何命令行窗口直接使用mysql等命令。

2.2 连接MySQL服务器

  • 命令格式
    mysql [-h 主机IP地址] [-P 端口号] -u 用户名 -p
    
  • 参数解释
    • -h:指定要连接的MySQL服务器的主机名或IP地址。如果连接本机(localhost),可以省略此参数。
    • -P:指定MySQL服务的端口号,默认为3306。如果使用默认端口,可以省略此参数。
    • -u:指定连接数据库的用户名,例如-u root
    • -p:表示需要输入密码。为了安全,密码不在命令中直接写出,回车后会提示你输入。
  • 示例
    • 连接本机的MySQL:mysql -u root -p
    • 连接远程服务器的MySQL:mysql -h 192.168.1.100 -P 3306 -u root -p

2.3 数据库管理工具

  • 除了命令行,强烈推荐使用图形化界面(GUI)工具来管理数据库,它们更直观、高效。
  • 常见工具
    • MySQL Workbench(官方工具)
    • Navicat(商业软件,功能强大)
    • DBeaver(免费开源,支持多种数据库)
    • phpMyAdmin(Web版,常用于虚拟主机环境)

第三部分:SQL语句详解

3.1 DDL - 数据定义语言

1. 数据库操作

-- 1. 查询所有数据库
SHOW DATABASES;

-- 2. 查询当前正在使用的数据库
SELECT DATABASE();

-- 3. 创建数据库
-- [if not exists] 判断数据库是否已存在,避免报错。
-- [default charset utf8mb4] 设置数据库的默认字符集,推荐使用utf8mb4以支持存储Emoji等4字节字符。
CREATE DATABASE [IF NOT EXISTS] database_name [DEFAULT CHARSET utf8mb4];

-- 示例:创建一个名为`myblog`的数据库
CREATE DATABASE IF NOT EXISTS myblog DEFAULT CHARSET utf8mb4;

-- 4. 删除数据库
DROP DATABASE [IF EXISTS] database_name;

-- 5. 使用/切换数据库
USE database_name;

注意DATABASESCHEMA 在MySQL中可以互换使用,例如 SHOW DATABASES; 等价于 SHOW SCHEMAS;

2. 表操作

  • 创建表语法

    CREATE TABLE table_name (
        字段1 字段类型 [约束] [COMMENT '字段注释'],
        字段2 字段类型 [约束] [COMMENT '字段注释'],
        ...
    ) [COMMENT '表注释'];
    
  • 示例(根据文章片段扩展):

    CREATE TABLE user (
        id INT COMMENT '用户ID, 主键', -- 文章中原有字段
        username VARCHAR(50) COMMENT '用户名', -- 文章中原有字段
        age INT COMMENT '用户年龄', -- 文章中原有字段
        email VARCHAR(100),
        created_time DATETIME DEFAULT CURRENT_TIMESTAMP -- 默认值为当前时间
    ) COMMENT '用户信息表';
    
  • 常见字段类型

    • 整数类型INT, BIGINT, TINYINT
    • 小数类型DECIMAL(M, D)(如DECIMAL(5,2)表示总位数5,小数点后2位),FLOAT, DOUBLE
    • 字符串类型
      • CHAR(n):定长字符串,性能高,适合长度固定的字段(如身份证号)。
      • VARCHAR(n):变长字符串,节省空间,适合长度变化的字段(如用户名、地址)。n代表最大字符数。
      • TEXT:长文本数据。
    • 日期时间类型DATE(日期),TIME(时间),DATETIME(日期时间),TIMESTAMP(时间戳,范围较小但有时区特性)。
  • 常见约束

    • 主键约束(PRIMARY KEY):唯一标识一条记录,不允许为空。id INT PRIMARY KEY
    • 唯一约束(UNIQUE):保证该字段的值唯一,可以为空。email VARCHAR(100) UNIQUE
    • 非空约束(NOT NULL):该字段的值不能为空。username VARCHAR(50) NOT NULL
    • 默认值(DEFAULT):如果插入数据时未指定该字段的值,则使用默认值。status TINYINT DEFAULT 1
    • 外键约束(FOREIGN KEY):建立表与表之间的关联(文章未提及,但非常重要)。
  • 其他DDL语句

    -- 查询当前数据库的所有表
    SHOW TABLES;
    
    -- 查询表结构
    DESC table_name;
    
    -- 查询建表语句
    SHOW CREATE TABLE table_name;
    
    -- 添加字段
    ALTER TABLE table_name ADD column_name column_type [约束];
    
    -- 修改字段类型
    ALTER TABLE table_name MODIFY column_name new_column_type;
    
    -- 修改字段名和类型
    ALTER TABLE table_name CHANGE old_column_name new_column_name new_column_type;
    
    -- 删除字段
    ALTER TABLE table_name DROP column_name;
    
    -- 删除表
    DROP TABLE [IF EXISTS] table_name;
    

3.2 DML - 数据操作语言

1. 添加数据(INSERT)

-- 向指定列插入数据(推荐)
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);

-- 向所有列插入数据(值的顺序必须与表结构字段顺序完全一致)
INSERT INTO table_name VALUES (value1, value2, value3, ...);

-- 批量插入
INSERT INTO table_name (column1, column2) VALUES (value1, value2), (value3, value4), ...;

-- 示例:向user表插入数据
INSERT INTO user (id, username, age, email) VALUES (1, '张三', 25, 'zhangsan@example.com');

2. 更新数据(UPDATE)

-- 更新数据,WHERE条件指定要更新哪些行。如果不加WHERE,会更新整张表!务必小心。
UPDATE table_name SET column1 = value1, column2 = value2, ... [WHERE condition];

-- 示例:将id为1的用户的年龄改为26
UPDATE user SET age = 26 WHERE id = 1;

3. 删除数据(DELETE)

-- 删除数据,WHERE条件指定要删除哪些行。如果不加WHERE,会清空整张表!务必小心。
DELETE FROM table_name [WHERE condition];

-- 示例:删除用户名为'张三'的记录
DELETE FROM user WHERE username = '张三';

3.3 DQL - 数据查询语言(核心)

基础语法结构

SELECT
    字段列表
FROM
    表名列表
WHERE
    条件列表
GROUP BY
    分组字段列表
HAVING
    分组后条件列表
ORDER BY
    排序字段列表
LIMIT
    分页参数;

1. 基础查询(SELECT ... FROM ...)

-- 查询多个字段
SELECT column1, column2, ... FROM table_name;
-- 查询所有字段(在开发中慎用,可能导致性能问题)
SELECT * FROM table_name;
-- 设置字段别名(AS可以省略)
SELECT column1 AS alias_name FROM table_name;
SELECT column1 alias_name FROM table_name;
-- 去除重复记录(DISTINCT)
SELECT DISTINCT column1 FROM table_name;

2. 条件查询(WHERE)

-- 语法
SELECT 字段列表 FROM table_name WHERE 条件列表;

-- 常用条件运算符:
-- >, >=, <, <=, =, <> 或 != (不等于)
SELECT * FROM user WHERE age > 18;
-- BETWEEN ... AND ... (在某个范围之内,闭区间)
SELECT * FROM user WHERE age BETWEEN 20 AND 30;
-- IN(...) (在in之后的列表中的值,多选一)
SELECT * FROM user WHERE age IN(18, 22, 25);
-- LIKE 占位符 (模糊匹配,_匹配单个字符,%匹配任意个字符)
SELECT * FROM user WHERE username LIKE '张%'; -- 查询姓张的用户
-- IS NULL / IS NOT NULL (判断是否为NULL)
SELECT * FROM user WHERE email IS NULL;
-- AND 或 && (并且)
-- OR 或 || (或者)
-- NOT 或 ! (非)
SELECT * FROM user WHERE age > 18 AND age < 30;

3. 聚合函数
将一列数据作为一个整体,进行纵向计算。

  • COUNT():统计数量。
  • MAX():最大值。
  • MIN():最小值。
  • AVG():平均值。
  • SUM():求和。
-- 语法:SELECT 聚合函数(字段列表) FROM 表名;
-- 注意:NULL值不参与所有聚合函数运算。

-- 示例:统计用户总数
SELECT COUNT(*) FROM user;
-- 统计有邮箱的用户数量
SELECT COUNT(email) FROM user;
-- 查询最大年龄
SELECT MAX(age) FROM user;

4. 分组查询(GROUP BY)
将查询结果按一个或多个字段进行分组,字段值相同的为一组。通常与聚合函数一起使用。

-- 语法:SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];

-- 示例:根据性别分组,统计男女人数
SELECT gender, COUNT(*) FROM user GROUP BY gender;

-- 查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的地址
-- WHERE在分组前进行过滤,不满足WHERE条件的不参与分组。
-- HAVING在分组后对结果进行过滤。
SELECT work_address, COUNT(*) address_count
FROM employee
WHERE age < 45
GROUP BY work_address
HAVING address_count >= 3;

5. 排序查询(ORDER BY)

-- 语法:SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;
-- 排序方式:ASC(升序,默认),DESC(降序)
-- 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

-- 示例:根据年龄升序排序,年龄相同再根据入职时间降序排序
SELECT * FROM employee ORDER BY age ASC, entrydate DESC;

6. 分页查询(LIMIT)

-- 语法:SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
-- 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数。
-- 如果查询的是第一页数据,起始索引可以省略,简写为 LIMIT 查询记录数。

-- 示例:查询第1页数据,每页显示10条记录
SELECT * FROM user LIMIT 0, 10;
-- 等价于
SELECT * FROM user LIMIT 10;

-- 查询第2页数据,每页10条(起始索引 = (2-1)*10 = 10)
SELECT * FROM user LIMIT 10, 10;

第四部分:安全警告与最佳实践

  1. 生产环境操作:在执行UPDATEDELETE语句时,务必先写WHERE条件,并在执行前最好先用SELECT语句验证条件是否正确,以防误操作导致数据丢失。
  2. 密码安全:连接数据库时,使用-p参数并在提示后输入密码,避免在命令中明文书写密码(如-p123456)。
  3. 字符集选择:创建数据库和表时,建议使用utf8mb4字符集,以完全兼容UTF-8,支持存储所有Unicode字符,包括Emoji表情。
  4. SQL注入:文章标签提到了# SQL注入,这是一个至关重要的安全概念。永远不要直接将用户输入拼接到SQL语句中,而应使用参数化查询(Prepared Statements) 来从根本上防止SQL注入攻击。

这份文档涵盖了从数据库基础概念到SQL核心语法的完整学习路径。要真正掌握MySQL,建议您在安装好MySQL环境后,按照文档中的示例进行大量的实践练习。

MySQL与SQL语言全面学习指南 第一部分:数据库基础概念 1.1 什么是数据库? 数据库(DataBase,DB) :长期存储在计算机内、有组织的、可共享的大量数据的集合。它是一个数据存储的“仓库”。 数据库管理系统(DBMS) :操作和管理数据库的大型软件,用于建立、使用和维护数据库。MySQL就是一种DBMS。 关系型数据库(RDBMS) :建立在关系模型基础上的数据库。它由多张相互连接的 二维表 (Table)组成。 特点 : 使用表存储数据,格式统一,便于维护。 使用标准的 SQL语言 进行操作,简单易用,可以进行非常复杂的查询。 数据完整性高,支持事务(ACID特性)。 1.2 什么是SQL? SQL(Structured Query Language) :结构化查询语言,是用于操作关系型数据库的编程语言。 特点 : 是一种标准化的语言,几乎所有关系型数据库(如MySQL, Oracle, SQL Server, PostgreSQL)都支持。 通过简单的英语关键字(如 SELECT , INSERT , UPDATE )来执行复杂的数据库操作。 SQL分类 :根据其功能,主要分为三类(文章中提到了两类,此处补充完整): DDL(Data Definition Language,数据定义语言) :用于定义和修改数据库对象(如数据库、表、索引)。例如: CREATE , ALTER , DROP 。 DML(Data Manipulation Language,数据操作语言) :用于对表中的 数据 进行增、删、改。例如: INSERT , UPDATE , DELETE 。 DQL(Data Query Language,数据查询语言) :用于查询表中的数据。虽然只有一个关键字 SELECT ,但它是SQL中最核心、最复杂的部分。 DCL(Data Control Language,数据控制语言) :用于控制数据库的访问权限。例如: GRANT , REVOKE 。 1.3 MySQL的数据模型 在MySQL中,创建一个数据库,本质上是在服务器的某个目录(如 mysql/data/ )下创建一个同名的文件夹。 在数据库中创建表,则是在该数据库文件夹下创建对应的文件(如 .frm 表结构文件, .ibd 数据文件等)。 第二部分:MySQL安装与连接 2.1 MySQL安装 官方下载地址 : https://downloads.mysql.com/archives/community/ (此处链接指向历史版本存档,适合寻找特定版本)。 安装后重要步骤 :将MySQL的 bin 目录(如 C:\Program Files\MySQL\MySQL Server 8.0\bin )添加到系统的 环境变量(PATH) 中。这样可以在任何命令行窗口直接使用 mysql 等命令。 2.2 连接MySQL服务器 命令格式 : 参数解释 : -h :指定要连接的MySQL服务器的主机名或IP地址。如果连接本机(localhost),可以省略此参数。 -P :指定MySQL服务的端口号,默认为 3306 。如果使用默认端口,可以省略此参数。 -u :指定连接数据库的用户名,例如 -u root 。 -p :表示需要输入密码。为了安全,密码不在命令中直接写出,回车后会提示你输入。 示例 : 连接本机的MySQL: mysql -u root -p 连接远程服务器的MySQL: mysql -h 192.168.1.100 -P 3306 -u root -p 2.3 数据库管理工具 除了命令行,强烈推荐使用图形化界面(GUI)工具来管理数据库,它们更直观、高效。 常见工具 : MySQL Workbench (官方工具) Navicat (商业软件,功能强大) DBeaver (免费开源,支持多种数据库) phpMyAdmin (Web版,常用于虚拟主机环境) 第三部分:SQL语句详解 3.1 DDL - 数据定义语言 1. 数据库操作 注意 : DATABASE 和 SCHEMA 在MySQL中可以互换使用,例如 SHOW DATABASES; 等价于 SHOW SCHEMAS; 。 2. 表操作 创建表语法 : 示例 (根据文章片段扩展): 常见字段类型 : 整数类型 : INT , BIGINT , TINYINT 小数类型 : DECIMAL(M, D) (如 DECIMAL(5,2) 表示总位数5,小数点后2位), FLOAT , DOUBLE 字符串类型 : CHAR(n) :定长字符串,性能高,适合长度固定的字段(如身份证号)。 VARCHAR(n) :变长字符串,节省空间,适合长度变化的字段(如用户名、地址)。 n 代表最大字符数。 TEXT :长文本数据。 日期时间类型 : DATE (日期), TIME (时间), DATETIME (日期时间), TIMESTAMP (时间戳,范围较小但有时区特性)。 常见约束 : 主键约束(PRIMARY KEY) :唯一标识一条记录,不允许为空。 id INT PRIMARY KEY 。 唯一约束(UNIQUE) :保证该字段的值唯一,可以为空。 email VARCHAR(100) UNIQUE 。 非空约束(NOT NULL) :该字段的值不能为空。 username VARCHAR(50) NOT NULL 。 默认值(DEFAULT) :如果插入数据时未指定该字段的值,则使用默认值。 status TINYINT DEFAULT 1 。 外键约束(FOREIGN KEY) :建立表与表之间的关联(文章未提及,但非常重要)。 其他DDL语句 : 3.2 DML - 数据操作语言 1. 添加数据(INSERT) 2. 更新数据(UPDATE) 3. 删除数据(DELETE) 3.3 DQL - 数据查询语言(核心) 基础语法结构 : 1. 基础查询(SELECT ... FROM ...) 2. 条件查询(WHERE) 3. 聚合函数 将一列数据作为一个整体,进行纵向计算。 COUNT() :统计数量。 MAX() :最大值。 MIN() :最小值。 AVG() :平均值。 SUM() :求和。 4. 分组查询(GROUP BY) 将查询结果按一个或多个字段进行分组,字段值相同的为一组。通常与聚合函数一起使用。 5. 排序查询(ORDER BY) 6. 分页查询(LIMIT) 第四部分:安全警告与最佳实践 生产环境操作 :在执行 UPDATE 和 DELETE 语句时, 务必 先写 WHERE 条件,并在执行前最好先用 SELECT 语句验证条件是否正确,以防误操作导致数据丢失。 密码安全 :连接数据库时,使用 -p 参数并在提示后输入密码,避免在命令中明文书写密码(如 -p123456 )。 字符集选择 :创建数据库和表时,建议使用 utf8mb4 字符集,以完全兼容UTF-8,支持存储所有Unicode字符,包括Emoji表情。 SQL注入 :文章标签提到了 # SQL注入 ,这是一个至关重要的安全概念。永远不要直接将用户输入拼接到SQL语句中,而应使用 参数化查询(Prepared Statements) 来从根本上防止SQL注入攻击。 这份文档涵盖了从数据库基础概念到SQL核心语法的完整学习路径。要真正掌握MySQL,建议您在安装好MySQL环境后,按照文档中的示例进行大量的实践练习。