MySQL 语句

发布于:2025-03-31 ⋅ 阅读:(23) ⋅ 点赞:(0)

MySQL 语句教程博客 MySQL 是目前广泛应用的关系型数据库管理系统,本文将详细介绍 MySQL 中常用的 SQL 语句及其应用,内容主要涵盖以下部分:

DDL(数据定义语言)

DML(数据操作语言)

DQL(数据查询语言)

多表设计与关系建模

通过本教程,你将对 MySQL 的基本操作有全面深入的了解,从表的创建、修改,到数据的插入、更新,再到复杂查询和多表设计的最佳实践。

一、数据定义语言(DDL)

DDL 主要用于定义数据库对象(如数据库、表、索引、视图等)的结构。主要命令包括 CREATE、ALTER、DROP、TRUNCATE 等。

1.1 CREATE 命令

创建数据库:

CREATE DATABASE my_database;

创建数据表:

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    hire_date DATE,
    salary DECIMAL(10,2)
);

说明:

  • AUTO_INCREMENT 用于生成自动递增的主键值。

  • NOT NULL 表示该字段不能为空。

  • UNIQUE 限制确保数据唯一性。

1.2 ALTER 命令

添加字段:

ALTER TABLE employees ADD COLUMN phone VARCHAR(20);

修改字段数据类型或属性:

ALTER TABLE employees MODIFY COLUMN salary DECIMAL(12,2);

删除字段:

ALTER TABLE employees DROP COLUMN phone;

1.3 DROP 命令

删除表:

DROP TABLE employees;

删除数据库:

DROP DATABASE my_database;

1.4 TRUNCATE 命令

清空表数据,但保留表结构:

TRUNCATE TABLE employees;

注意:

  • 使用 TRUNCATE 命令时,表结构不会被删除,且操作通常比 DELETE 快,但不能回滚(取决于事务支持)。

二、数据操作语言(DML)

DML 主要用于操作表中的数据,常用命令包括 INSERT、UPDATE 和 DELETE。

2.1 INSERT 命令

插入单条记录:

INSERT INTO employees (first_name, last_name, email, hire_date, salary)
VALUES ('John', 'Doe', 'john.doe@example.com', '2025-03-01', 5000.00);

插入多条记录:

INSERT INTO employees (first_name, last_name, email, hire_date, salary)
VALUES
('Jane', 'Smith', 'jane.smith@example.com', '2025-02-15', 5500.00),
('Mike', 'Johnson', 'mike.johnson@example.com', '2025-01-20', 4800.00);

2.2 UPDATE 命令

更新单个字段:

UPDATE employees
SET salary = 6000.00
WHERE id = 1;

更新多个字段:

UPDATE employees
SET salary = 6200.00, email = 'john.new@example.com'
WHERE id = 1;

2.3 DELETE 命令

删除符合条件的记录:

DELETE FROM employees
WHERE id = 1;

删除所有记录(不删除表结构):

DELETE FROM employees;

注意:

  • 使用 DELETE 时一定要加 WHERE 条件,避免误删所有数据。

三、数据查询语言(DQL)

DQL 用于查询数据库中的数据,主要通过 SELECT 语句来实现,支持复杂查询、聚合计算、排序、分组、分页等功能。

3.1 基本查询

查询所有字段:

SELECT * FROM employees;

查询指定字段:

SELECT first_name, last_name, email FROM employees;

3.2 条件查询

使用 WHERE 子句:

SELECT * FROM employees
WHERE salary > 5000;

使用逻辑操作符:

SELECT * FROM employees
WHERE salary > 5000 AND hire_date >= '2025-01-01';

3.3 排序查询

ORDER BY 子句:

SELECT * FROM employees
ORDER BY hire_date DESC;

3.4 分组查询与聚合函数

GROUP BY 与聚合函数:

SELECT department, COUNT(*) AS num_employees, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;

3.5 分页查询

LIMIT 子句(MySQL 常用):

SELECT * FROM employees
ORDER BY id
LIMIT 10 OFFSET 20;

说明:

  • OFFSET 用于跳过前面的记录。

  • MySQL 也可以直接使用 LIMIT 20, 10 表示跳过 20 行,取 10 行数据


四、多表设计与关系建模

在实际应用中,一个数据库往往包含多个表,合理设计多表结构不仅能保证数据的完整性和一致性,还能提高查询效率。

4.1 数据库范式与规范化

  • 第一范式(1NF):
    表中的字段应为原子值,即不能包含多个值。

  • 第二范式(2NF):
    在满足 1NF 的基础上,非主属性必须完全依赖于主键。

  • 第三范式(3NF):
    在满足 2NF 的基础上,消除传递依赖,使非主属性不依赖于其他非主属性。

通过规范化设计,可以降低数据冗余和异常更新的风险。

4.2 表与表之间的关系

4.2.1 一对一关系
  • 描述:
    每个表中的记录在另一表中有且只有一条对应记录。

  • 实现方式:
    通常在其中一个表中设置唯一外键约束。

    CREATE TABLE user_profiles
     ( user_id INT PRIMARY KEY, bio TEXT, avatar VARCHAR(255), FOREIGN KEY (user_id) REFERENCES users(id) );
4.2.2 一对多关系
  • 描述:
    一个主表记录对应多条从表记录。

  • 实现方式:
    在从表中设置外键引用主表的主键。

    CREATE TABLE orders
     ( order_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, order_date DATE, total DECIMAL(10,2), FOREIGN KEY (user_id) REFERENCES users(id) );
4.2.3 多对多关系
  • 描述:
    两个表之间的记录可以相互关联多次。

  • 实现方式:
    通过创建关联表(中间表)来实现。

    CREATE TABLE students ( student_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) ); CREATE TABLE courses ( course_id INT AUTO_INCREMENT PRIMARY KEY, course_name VARCHAR(100) ); CREATE TABLE student_courses ( student_id INT, course_id INT, PRIMARY KEY (student_id, course_id), FOREIGN KEY (student_id) REFERENCES students(student_id), FOREIGN KEY (course_id) REFERENCES courses(course_id) );

说明:

  • 中间表 student_courses 的复合主键确保了学生和课程的组合唯一性。

  • 利用 JOIN 语句可以在查询时联结多个表的数据。

4.3 索引设计

合理使用索引可以大幅提升查询效率,但也会增加写操作的成本。常见的索引类型包括:

  • 普通索引: 提高查询速度,但不限制唯一性。

  • 唯一索引: 除了加快查询速度,还保证数据的唯一性。

  • 全文索引: 针对文本数据的快速搜索。

示例:

CREATE INDEX idx_lastname ON employees(last_name); CREATE UNIQUE INDEX idx_email ON employees(email);

4.4 外键约束

外键用于保证数据的一致性和完整性,防止孤立数据的产生。外键约束的使用需要注意:

  • 需要确保被引用的字段为主键或具有唯一约束。

  • 更新或删除数据时,需考虑级联操作(CASCADE、SET NULL、RESTRICT 等)。

CREATE TABLE orders ( order_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, order_date DATE, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE );

五、总结

本教程从基础到进阶,全面介绍了 MySQL 的 SQL 语句及多表设计的各个方面:

  • DDL 提供了创建、修改、删除数据库对象的能力。

  • DML 让我们能够灵活操作数据记录。

  • DQL 通过强大的查询功能帮助我们高效获取数据。

  • 多表设计 则为复杂应用的数据组织提供了结构支持,确保数据完整性与高效查询。