MySQL数据库SQL语句分类与操作详解
SQL语言分类概述
SQL(Structured Query Language)是用于管理关系型数据库的标准语言,根据功能可分为以下四类:
| 类别 | 全称 | 用途说明 |
|---|---|---|
| DDL | Data Definition Language | 用于定义数据库对象,如创建、修改或删除数据库、表和字段。 |
| DML | Data Manipulation Language | 用于对表中数据进行增删改操作。 |
| DQL | Data Query Language | 用于从表中查询记录,是最常用的SQL子集。 |
| DCL | Data Control Language | 用于管理用户权限和访问控制,如创建用户、授予权限等。 |
DDL:数据定义语言
数据库操作
SHOW DATABASES;—— 查看当前服务器中所有数据库。SELECT DATABASE();—— 查询当前正在使用的数据库。CREATE DATABASE IF NOT EXISTS db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;—— 创建新数据库,支持指定字符集与排序规则。DROP DATABASE IF EXISTS db_name;—— 删除指定数据库。USE db_name;—— 切换到目标数据库进行后续操作。
表操作
查看表信息
SHOW TABLES;—— 显示当前数据库中的所有表。DESC table_name;—— 查看表结构,包括字段名、类型、是否可空等。SHOW CREATE TABLE table_name;—— 查看建表时的完整语句,包含约束与注释。
创建表
CREATE TABLE table_name (
column1 datatype [COMMENT 'comment'],
column2 datatype [COMMENT 'comment'],
...
) COMMENT 'table description';
示例:
CREATE TABLE users (
user_id INT COMMENT '用户唯一标识',
username VARCHAR(50) COMMENT '用户名',
age TINYINT UNSIGNED COMMENT '年龄(非负)',
gender CHAR(1) COMMENT '性别(男/女)'
) COMMENT '用户信息表';
修改表结构
- 添加字段:
ALTER TABLE table_name ADD COLUMN col_name type [COMMENT 'description']; - 修改字段类型:
ALTER TABLE table_name MODIFY COLUMN col_name new_type; - 重命名字段:
ALTER TABLE table_name CHANGE COLUMN old_name new_name type [COMMENT '...']; - 重命名表:
ALTER TABLE old_name RENAME TO new_name;
删除表
DROP TABLE IF EXISTS table_name;—— 删除表结构及数据。TRUNCATE TABLE table_name;—— 清空表内容,保留表结构,执行效率高于DELETE。
常用数据类型概览
整数类型
| 类型 | 大小(字节) | 有符号范围 | 无符号范围 | 适用场景 |
|---|---|---|---|---|
| TINYINT | 1 | -128 到 127 | 0 到 255 | 小数值,如状态码、等级 |
| SMALLINT | 2 | -32,768 到 32,767 | 0 到 65,535 | 中小型数值,如数量统计 |
| MEDIUMINT | 3 | -8.3M 到 8.3M | 0 到 16.7M | 中等规模数据 |
| INT / INTEGER | 4 | -2B 到 2B | 0 到 4.2B | 标准整数,广泛使用 |
| BIGINT | 8 | -9.2E18 到 9.2E18 | 0 到 1.8E19 | 大数值,如日志ID、时间戳 |
浮点与定点类型
| 类型 | 大小 | 精度特点 | 典型用途 |
|---|---|---|---|
| FLOAT | 4 字节 | 单精度,约7位有效数字 | 一般数值计算 |
| DOUBLE | 8 字节 | 双精度,约15位有效数字 | 高精度数学运算 |
| DECIMAL(M,D) | 可变 | 精确值,不丢失精度 | 金额、财务数据 |
说明: DECIMAL(10,2) 表示总共10位数字,其中2位为小数,适用于需要精确计算的场景。
字符串与文本类型
| 类型 | 最大长度 | 特点 |
|---|---|---|
| CHAR(n) | 255 bytes | 定长存储,不足补空格,适合固定长度数据 |
| VARCHAR(n) | 65,535 bytes | 变长存储,节省空间,推荐用于可变长度文本 |
| TINYTEXT / TINYBLOB | 255 bytes | 短文本或二进制数据 |
| TEXT / BLOB | 65,535 bytes | 普通长文本或文件内容 |
| MEDIUMTEXT / MEDIUMBLOB | 16MB | 中等长度内容 |
| LONGTEXT / LONGBLOB | 4GB | 超大文本或文件存储 |
日期与时间类型
| 类型 | 大小 | 范围 | 格式 | 用途 |
|---|---|---|---|---|
| DATE | 3 bytes | 1000-01-01 至 9999-12-31 | YYYY-MM-DD | 仅存储日期,如生日、入职日 |
| TIME | 3 bytes | -838:59:59 至 838:59:59 | HH:MM:SS | 表示时间段或时分秒 |
| YEAR | 1 byte | 1901 至 2155 | YYYY | 年份字段,如生产年份 |
| DATETIME | 8 bytes | 1000-01-01 00:00:00 至 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 完整时间记录,含日期与时间 |
| TIMESTAMP | 4 bytes | 1970-01-01 00:00:01 至 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 记录事件发生时间,受时区影响 |
DML:数据操作语言
插入数据
INSERT INTO table_name (col1, col2) VALUES (val1, val2);—— 指定字段插入。INSERT INTO table_name VALUES (val1, val2, ...);—— 全字段插入,需按顺序提供所有值。INSERT INTO table_name VALUES (...), (...), ...;—— 批量插入多条记录。
更新数据
UPDATE table_name
SET column1 = value1, column2 = value2
WHERE condition;
注意: 忘记WHERE子句将导致整张表被更新。
删除数据
DELETE FROM table_name WHERE condition;
注意: 该语句不会删除列本身,若要清空数据但保留结构,应使用TRUNCATE。
DQL:数据查询语言
基本语法结构
SELECT
columns
FROM
tables
[WHERE conditions]
[GROUP BY group_columns]
[HAVING group_conditions]
[ORDER BY sort_columns]
[LIMIT limit_count];
常见查询方式
SELECT name, workno, age FROM emp;—— 查询特定字段。SELECT * FROM emp;—— 查询全部字段。SELECT DISTINCT workaddress FROM emp;—— 去除重复的工作地址。SELECT name AS '姓名', workno AS '工号' FROM emp;—— 使用别名提升可读性。
高级查询功能
- 条件筛选:使用
WHERE限制返回行。 - 聚合函数:如
COUNT()、MAX()、MIN()、AVG()、SUM()。 - 分组查询:结合
GROUP BY与HAVING实现按组统计。 - 排序输出:
ORDER BY age DESC按年龄降序排列。 - 分页处理:
LIMIT 0, 10表示跳过前0条,取10条数据。