MySQL SQL 语法基础:DDL、DML 及常用查询详解

七月
七月
发布时间:2026-10-14| 2人浏览过
原创

本文深入解析 MySQL 核心 SQL 语法结构,从数据定义语言(DDL)的表结构与索引管理,到数据操作语言(DML)的数据增删改查,提供完整的代码示例与逻辑说明,帮助开发者建立规范的数据库操作习惯。

数据定义语言(DDL):构建数据库结构

DDL(Data Definition Language)主要用于定义数据库对象的结构,包括表格、字段类型及相互关系。这是创建数据库时最先规划的环节,决定了数据的存储形态与完整性约束。

第1步:创建数据表

目的:在数据库中建立新的数据存储容器,定义列名、数据类型及约束条件。

CREATE TABLE table_name (
  column1 datatype [NOT NULL] [NOT NULL PRIMARY KEY],
  column2 datatype [NOT NULL],
  ...);

参数说明: - datatype:指定字段的数据格式,需严格匹配后续写入的数据类型。 - NOT NULL:约束该字段不允许为空值。 - PRIMARY KEY:将字段设为主键,确保唯一标识性。

第2步:修改表结构

注意:标准 SQL 通常不支持直接删除已定义的列,主要操作为添加新列或调整主键约束。

添加新列:

ALTER TABLE table_name ADD COLUMN column_name datatype;

设置或删除主键:

ALTER TABLE table_name ADD PRIMARY KEY (column_name);
ALTER TABLE table_name DROP PRIMARY KEY;

第3步:建立与维护索引

目的:通过索引加速特定字段的查询速度,减少全表扫描开销。

CREATE INDEX index_name ON table_name (column_name);

若不再需要某索引,可使用 DROP INDEX index_name 删除。同时,使用 DROP TABLE table_name 可彻底删除表及其所有数据,操作前请确认重要数据已备份。

核心数据形态(Data Types)参考

选择合适的字段类型对性能至关重要。以下是 MySQL 中常用的数据类型及其特性:

  • SMALLINT:16 位整数,适用于较小范围的数值统计。
  • INTEGER:32 位整数,通用整型存储。
  • DECIMAL(p,s):精确十进制数。p 为总位数,s 为小数位数。若不指定,默认 p=5, s=0,常用于金额等需高精度的场景。
  • FLOAT / DOUBLE:分别为 32 位和 64 位实数,用于科学计算或近似值存储。
  • CHAR(n) / VARCHAR(n):定长与变长字符串。CHAR最大长度建议不超过 254 以保持效率;VARCHAR最大长度可达 4000,适合长度不确定的文本。
  • DATE / TIME / TIMESTAMP:分别记录日期、时间及带千分之一秒的时间戳。其中 GRAPHIC(n) 及 VARGRAPHIC(n) 等双字节类型主要用于特殊字符集支持。

数据操作语言(DML):数据增删改查

完成结构定义后,接下来是实际的数据操作,主要包括插入(Insert)、查询(Select)、更新(Update)和删除(Delete)。

第1步:增加数据(INSERT)

目的:向表中插入新记录。

指定列名插入(推荐,顺序明确):

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

若未指定列名,系统将按表定义顺序填入数据,但需确保数据类型严格吻合。此外,也可通过子查询将其他表的数据迁入当前表:

INSERT INTO table_name (column1, ...)
SELECT columnx, ...
FROM another_table;

第2步:查询数据(SELECT)

目的:从数据库中检索所需信息,是最复杂的操作场景。

基本查询与条件过滤

SELECT * FROM table_name WHERE condition;
-- 例如:select * from user where age > 18;

- * 表示返回所有列,生产环境中建议仅列出需要的具体字段以优化 IO。
- WHERE 后接条件表达式,支持 =, >, <, >=, <=, <> 及逻辑运算符 AND/OR。

排序与限制

SELECT column1, column2 
FROM table_name 
ORDER BY column2 DESC;

- ORDER BY 指定排序列。加 DESC 为降序,默认为 ASC 升序。

组合查询与聚合分析

当需要跨表获取数据或使用统计函数时:

-- 联合查询(内连接逻辑)
SELECT * FROM table1, table2 
WHERE table1.colum1 = table2.column1;

-- 聚合统计(计数、求和、平均等)
SELECT COUNT(*), SUM(column1), AVG(column2), MAX(col), MIN(col)
FROM table_name
GROUP BY column1
HAVING AVG(column2) > threshold;

- GROUP BY:按指定列分组,必须配合聚合函数使用。
- HAVING:对分组后的结果进行过滤,不同于 WHERE 先过滤行再分组,HAVING 用于过滤组。

复杂查询技巧

针对特定场景的高效写法:

  • 存在性检查(EXISTS):
    SELECT * FROM table1 WHERE EXISTS (SELECT * FROM table2 WHERE ...);
  • 集合匹配(IN):
    SELECT * FROM table1 WHERE col IN ('val1', 'val2');
  • 范围与模糊匹配(BETWEEN / LIKE):
    SELECT * FROM table1 WHERE col BETWEEN start AND end;
    SELECT * FROM table1 WHERE col LIKE 'prefix%';

第3步:更改数据(UPDATE)

风险提醒:执行更新前务必确认 WHERE 条件,否则会导致全表数据被覆盖。

UPDATE table_name 
SET column1 = 'new_value' 
WHERE condition;

第4步:删除数据(DELETE)

风险提醒:同 UPDATE,若无 WHERE 条件将清空整张表数据。

DELETE FROM table_name WHERE condition;

日期比较与特殊场景处理

在不同数据库或集成环境中,日期格式的语法可能有所差异。以下是常见情况的处理示例:

  • Access 数据库:使用井号包裹日期
    WHERE mydate #2000-01-01#
  • Oracle/标准 SQL:使用 CAST 或 TO_DATE 函数
    WHERE mydate > TO_DATE('2000-01-01','yyyy-mm-dd')
  • 动态拼接示例(Delphi/编程环境):
    thedate := '2000-01-01';
    Query1.SQL.Add('SELECT * FROM abc WHERE mydate > cast(''' + thedate + ''' as date)');

若涉及时间精度比较,可完整传入时分秒: TO_DATE('2000-01-01 10:00:01','yyyy-mm-dd hh24:mi:ss')

以上就是 MySQL SQL 语法的详细内容,更多关于 MySQL 数据库优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。