找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1466

积分

0

好友

247

主题
发表于 6 小时前 | 查看: 1| 回复: 0

熟练掌握MySQL的关键字和数据类型是编写高效SQL、进行良好数据库设计的基础。本文将从这两大核心模块入手,为你提供一份清晰的实战参考。

一、MySQL关键字详解

MySQL关键字是具有特定功能的保留字,用于指挥数据库执行建表、查询、授权等操作。它们通常具有以下特点:

  • 大小写不敏感,但行业惯例是将其大写以增加代码可读性。
  • 不能直接用作表名或字段名。如果必须使用,需用反引号(`)包裹。
  • 按照功能划分清晰,便于学习和使用。

下面,我们将系统梳理常用的MySQL关键字。

1. 数据定义类关键字(DDL)

这类关键字用于定义和修改数据库、表等对象的结构。

  • CREATE:创建数据库、表、索引等对象。
    CREATE DATABASE test_db; -- 创建数据库
    CREATE TABLE user(id INT); -- 创建表
  • ALTER:修改已有数据库对象的结构。
    ALTER TABLE user ADD COLUMN age INT; -- 为表添加字段
  • DROP:删除数据库、表、索引等对象,此操作不可逆。
    DROP TABLE user; -- 删除表
  • TRUNCATE:快速清空表内的所有数据,但保留表结构,且操作不可回滚。
    TRUNCATE TABLE user; -- 清空表数据
  • RENAME:为数据库或表重命名。
    RENAME TABLE user TO t_user; -- 重命名表

2. 数据操作类关键字(DML)

负责对表中的数据进行增、删、改。

  • INSERT:向表中插入新数据。
    INSERT INTO user(id, name) VALUES(1, 'zhangsan');
  • UPDATE:更新表中已存在的数据。务必注意使用WHERE子句限定范围,否则将更新全表。
    UPDATE user SET age=25 WHERE id=1;
  • DELETE:删除表中的数据。同样必须配合WHERE子句使用,以防误删全表数据。
    DELETE FROM user WHERE id=1;
  • REPLACE:插入数据时,若主键或唯一索引冲突,则替换原有行数据。
    REPLACE INTO user(id, name) VALUES(1, 'lisi');

3. 数据查询类关键字(DQL)

用于查询数据,是使用频率最高的一组关键字。

  • SELECT ... FROM:指定要查询的字段和来源表。
    SELECT id, name FROM user; -- 查询指定字段
    SELECT * FROM user; -- 查询所有字段(生产环境慎用)
  • WHERE:用于过滤数据的条件。
    SELECT * FROM user WHERE age>20; -- 查询年龄大于20的记录
  • GROUP BY:根据指定字段对结果集进行分组,通常与聚合函数(如COUNT, SUM)一起使用。
    SELECT age, COUNT(*) 
    FROM user 
    GROUP BY age; -- 按年龄分组统计人数
  • HAVING:对GROUP BY分组后的结果进行过滤。与WHERE的区别在于,WHERE在分组前过滤原始数据,HAVING在分组后过滤聚合结果。
    SELECT age, COUNT(*) 
    FROM user 
    GROUP BY age 
    HAVING COUNT(*)>1; -- 仅保留人数大于1的分组
  • ORDER BY:对结果集进行排序。ASC为升序(默认),DESC为降序。
    SELECT * FROM user ORDER BY age DESC; -- 按年龄降序排列
  • LIMIT:限制返回的记录数量,常用于分页查询。
    SELECT * FROM user LIMIT 10, 20; -- 从第11条记录开始,返回20条数据
  • JOIN:用于关联多个表进行查询,包括INNER JOIN(内连接)、LEFT JOIN(左连接)等。
    SELECT u.name, o.order_no 
    FROM user u 
    INNER JOIN `order` o 
    ON u.id=o.user_id; -- 关联查询用户及其订单信息

4. 数据控制类关键字(DCL)

主要管理用户权限。

  • GRANT:授予用户权限。
    GRANT SELECT ON test_db.* TO 'test_user'@'%'; -- 授予查询权限
  • REVOKE:撤销用户权限。
    REVOKE SELECT ON test_db.* FROM 'test_user'@'%'; -- 撤销查询权限
  • CREATE USER / DROP USER:创建和删除用户。
    CREATE USER 'test_user'@'%' IDENTIFIED BY '123456';
    DROP USER 'test_user'@'%';
  • FLUSH PRIVILEGES:权限变更后,使其立即生效(通常在使用GRANTREVOKE语句后执行)。
    FLUSH PRIVILEGES;

5. 事务控制类关键字

用于保证事务的ACID特性(仅InnoDB等支持事务的存储引擎有效)。

  • START TRANSACTION / BEGIN:开启一个事务。
    START TRANSACTION;
  • COMMIT:提交事务,使所有修改永久生效。
    COMMIT;
  • ROLLBACK:回滚事务,撤销所有未提交的修改。
    ROLLBACK;
  • SAVEPOINT:在事务中设置保存点,允许部分回滚。
    SAVEPOINT sp1; -- 设置保存点
    ROLLBACK TO sp1; -- 回滚到保存点sp1

6. 其他常用关键字

  • IF NOT EXISTS / IF EXISTS:在创建或删除对象时使用,避免因对象已存在或不存在而报错。
    CREATE TABLE IF NOT EXISTS user(id INT);
  • AS:为字段或表设置别名,增强可读性。
    SELECT id AS user_id, name AS user_name FROM user u;
  • DISTINCT:去除查询结果中的重复行。
    SELECT DISTINCT age FROM user; -- 查询不重复的年龄
  • IN / NOT IN:判断某个值是否在指定的集合中。
    SELECT * FROM user WHERE id IN (1,2,3);
  • BETWEEN AND:选取介于两个值之间的数据范围(包含边界)。
    SELECT * FROM user WHERE age BETWEEN 20 AND 30;

    注意BETWEEN的范围必须前小后大。

使用关键字时的注意事项

  1. 避免用作标识符:不要直接使用关键字作为表名或字段名,例如创建名为SELECT的表。如果必须使用,请用反引号包裹:CREATE TABLE \SELECT`(id INT);`。
  2. 注意数据库方言:部分关键字是MySQL特有的,例如LIMIT。在进行跨数据库(如Oracle、SQL Server)开发时需留意语法差异。

二、MySQL数据类型选择实战

选择合适的数据类型是数据库设计的关键一环,它不仅直接影响存储空间的使用效率,更关乎查询性能。如何为不同场景选择最“合适”的类型?遵循“够用就好”的原则是关键。例如,存储年龄用TINYINT而非INT,存储手机号用CHAR(11)而非VARCHAR,这些细节能显著优化存储与性能。

下表汇总了MySQL中常用的数据类型及其核心应用场景,可作为日常开发的速查指南。

MySQL常用数据类型与适用场景对照表

希望这份关于MySQL关键字与数据类型的梳理,能帮助你更扎实地掌握SQL基础,在云栈社区的日常交流与项目实践中更加游刃有余。




上一篇:操作系统如何管理硬件?从进程、线程、虚拟内存到文件的深入解析
下一篇:MySQL行级锁机制详解:锁到底作用在索引还是数据页上?
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-18 16:28 , Processed in 0.222343 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表