Skip to content

第4章:SQL 基础入门

4.1 什么是 SQL?

定义

SQL(Structured Query Language,结构化查询语言)是用于操作关系型数据库的标准语言。通过 SQL,我们可以对数据库进行增删改查等各种操作。

SQL 的特点

  • 标准化:被 ISO 和 ANSI 标准化,几乎所有关系型数据库都支持
  • 易学易用:语法接近自然语言,易于理解和学习
  • 功能强大:可以完成复杂的数据操作和管理
  • 可移植:SQL 语句可以在不同数据库之间迁移(部分语法可能有差异)

SQL 与 MySQL 的关系

SQL:语言标准(类似普通话)

    ├── MySQL:具体实现(类似北京话)
    ├── SQL Server:具体实现(类似上海话)
    ├── Oracle:具体实现(类似广东话)
    └── PostgreSQL:具体实现(类似四川话)

4.2 SQL 语法规范

基本规范

1. 大小写

  • 关键字:不区分大小写,建议大写(规范)
  • 标识符:数据库名、表名、字段名区分大小写(取决于操作系统)
  • 数据值:字符串区分大小写
sql
-- 以下写法等价
SELECT * FROM users;
select * from users;
Select * From Users;

-- 推荐写法(规范)
SELECT * FROM users;

2. 分号结尾

每条 SQL 语句以分号 ; 结尾。

sql
-- 正确
SELECT * FROM users;

-- 错误(缺少分号)
SELECT * FROM users

3. 空格与换行

  • SQL 会忽略多余的空格和换行
  • 可以使用换行提高可读性
sql
-- 单行写法
SELECT id, name, age FROM users WHERE age > 18 ORDER BY age DESC;

-- 多行写法(推荐,更易读)
SELECT 
    id, 
    name, 
    age 
FROM 
    users 
WHERE 
    age > 18 
ORDER BY 
    age DESC;

注释写法

单行注释

sql
-- 这是单行注释(标准 SQL)
SELECT * FROM users;  -- 查询所有用户

# 这也是单行注释(MySQL 特有)
SELECT * FROM users;

多行注释

sql
/*
  这是多行注释
  可以写多行内容
*/
SELECT * FROM users;

/* 查询所有用户 */
SELECT * FROM users;

4.3 核心 SQL 分类

SQL 分类概览

分类全称用途常用语句
DDLData Definition Language定义数据库结构CREATE, ALTER, DROP, TRUNCATE
DMLData Manipulation Language操作数据INSERT, UPDATE, DELETE
DQLData Query Language查询数据SELECT
DCLData Control Language控制访问权限GRANT, REVOKE
TCLTransaction Control Language事务控制COMMIT, ROLLBACK

DDL(数据定义语言)

用于定义和管理数据库对象(数据库、表、索引等)。

sql
-- 创建数据库
CREATE DATABASE school_db;

-- 创建表
CREATE TABLE students (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

-- 修改表
ALTER TABLE students ADD COLUMN age INT;

-- 删除表
DROP TABLE students;

-- 删除数据库
DROP DATABASE school_db;

DML(数据操纵语言)

用于操作表中的数据。

sql
-- 插入数据
INSERT INTO students (id, name, age) VALUES (1, '张三', 18);

-- 更新数据
UPDATE students SET age = 19 WHERE id = 1;

-- 删除数据
DELETE FROM students WHERE id = 1;

DQL(数据查询语言)

用于查询表中的数据(最常用)。

sql
-- 查询所有数据
SELECT * FROM students;

-- 查询指定字段
SELECT name, age FROM students;

-- 条件查询
SELECT * FROM students WHERE age > 18;

-- 排序查询
SELECT * FROM students ORDER BY age DESC;

DCL(数据控制语言)

用于管理用户权限(新手了解即可)。

sql
-- 授予权限
GRANT SELECT, INSERT ON school_db.* TO 'user'@'localhost';

-- 撤销权限
REVOKE INSERT ON school_db.* FROM 'user'@'localhost';

4.4 实操案例

案例:学生管理系统

1. 创建数据库

sql
-- 创建数据库
CREATE DATABASE IF NOT EXISTS student_db 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

-- 使用数据库
USE student_db;

2. 创建数据表

sql
-- 创建学生表
CREATE TABLE IF NOT EXISTS students (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '学生ID',
    name VARCHAR(50) NOT NULL COMMENT '姓名',
    gender ENUM('男', '女') DEFAULT '男' COMMENT '性别',
    age TINYINT UNSIGNED COMMENT '年龄',
    class VARCHAR(20) COMMENT '班级',
    score DECIMAL(5, 2) COMMENT '成绩',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生表';

3. 插入数据

sql
-- 插入单条数据
INSERT INTO students (name, gender, age, class, score) 
VALUES ('张三', '男', 18, '一班', 85.50);

-- 插入多条数据
INSERT INTO students (name, gender, age, class, score) VALUES
('李四', '女', 19, '二班', 92.00),
('王五', '男', 18, '一班', 78.50),
('赵六', '女', 20, '三班', 88.00),
('孙七', '男', 19, '二班', 95.50);

4. 查询数据

sql
-- 查询所有学生
SELECT * FROM students;

-- 查询指定字段
SELECT name, age, score FROM students;

-- 条件查询:查询一班的学生
SELECT * FROM students WHERE class = '一班';

-- 条件查询:查询成绩大于80分的学生
SELECT * FROM students WHERE score > 80;

-- 排序查询:按成绩降序排列
SELECT * FROM students ORDER BY score DESC;

5. 更新数据

sql
-- 修改张三的成绩
UPDATE students SET score = 90.00 WHERE name = '张三';

-- 修改一班所有学生的班级
UPDATE students SET class = '一班(重点)' WHERE class = '一班';

6. 删除数据

sql
-- 删除孙七的记录
DELETE FROM students WHERE name = '孙七';

-- 注意:删除操作要谨慎,建议先查询确认
-- SELECT * FROM students WHERE name = '孙七';

7. 删除表和数据库(谨慎操作)

sql
-- 删除表
DROP TABLE IF EXISTS students;

-- 删除数据库
DROP DATABASE IF EXISTS student_db;

新手易错点

1. 遗漏分号

sql
-- 错误
SELECT * FROM users

-- 正确
SELECT * FROM users;

2. 关键字拼写错误

sql
-- 错误
SELET * FROM users;      -- SELECT 拼写错误
INSRET INTO users;       -- INSERT 拼写错误

-- 正确
SELECT * FROM users;
INSERT INTO users;

3. 字符串未加引号

sql
-- 错误
SELECT * FROM users WHERE name = 张三;  -- 字符串需要加引号

-- 正确
SELECT * FROM users WHERE name = '张三';

4. 注释写法错误

sql
-- 错误(MySQL 中)
/* 未闭合的注释
SELECT * FROM users;

-- 正确
/* 这是注释 */
SELECT * FROM users;

5. 混淆 SQL 分类

sql
-- 错误:用 SELECT 删除数据
SELECT FROM users WHERE id = 1;  -- 这是查询,不是删除

-- 正确
DELETE FROM users WHERE id = 1;  -- 这才是删除

小结

通过本章的学习,你了解了:

  • ✅ SQL 的定义和特点
  • ✅ SQL 语法规范(大小写、分号、注释)
  • ✅ SQL 的五大分类(DDL、DML、DQL、DCL、TCL)
  • ✅ 完成了第一个完整的 SQL 实操案例

掌握 SQL 基础规范是学习后续内容的前提。继续学习 第5章:DDL 数据定义语言

© 2026 编程马·菜鸟教程 版权所有