SQL 基础入门
SQL(全称 Structured Query Language,结构化查询语言)是用于操作关系型数据库的标准语言,主要用于数据的查询、新增、修改和删除。本文面向初学者,介绍 SQL 的基础概念和核心操作。
1. 常见的 SQL 数据库
- MySQL
- PostgreSQL
- Oracle
- Microsoft SQL Server
- SQLite
2. SQL 的基本组成
SQL 以语句为执行单位,每条语句以分号(;)结尾。按功能可分为以下几类:
- DDL(数据定义语言):用于定义数据库结构,包括
CREATE
(创建)、ALTER
(修改)、DROP
(删除)等操作。 - DML(数据操作语言):用于操作数据,包括
SELECT
(查询)、INSERT
(插入)、UPDATE
(更新)、DELETE
(删除)等。 - DCL(数据控制语言):用于控制数据权限,包括
GRANT
(授权)、REVOKE
(回收权限)等。
3. 基本操作
创建表(CREATE TABLE
)
CREATE TABLE students (
id INT PRIMARY KEY, -- 主键(唯一标识)
name VARCHAR(100), -- 字符串(最长 100 字符)
age INT, -- 整数
major VARCHAR(50) -- 专业(最长 50 字符)
);
插入数据(INSERT
)
INSERT INTO students (id, name, age, major)
VALUES (1, 'Alice', 20, 'Computer Science');
查询数据(SELECT
)
-- 查询所有学生信息
SELECT * FROM students;
-- 查询特定列
SELECT name, age FROM students;
修改数据(UPDATE
)
UPDATE students
SET age = 21 -- 设置新值
WHERE id = 1; -- 条件:仅修改 id=1 的记录
删除数据(DELETE
)
DELETE FROM students
WHERE id = 1; -- 条件:删除 id=1 的记录
4. 基本概念
数据类型
定义数据表时常用的数据类型:
- INT:整数(如年龄、ID)。
- VARCHAR(n):可变长度字符串,最多存储
n
个字符(如姓名、地址)。 - DATE:日期类型(如
2023-10-01
)。
WHERE
条件
用于过滤查询结果,示例:
SELECT name FROM students
WHERE age > 18; -- 查询年龄大于 18 岁的学生姓名
排序(ORDER BY
)
按指定列排序,默认升序(ASC
),降序用 DESC
:
SELECT name, age FROM students
ORDER BY age DESC; -- 按年龄降序排列
聚合与分组(GROUP BY
+ 聚合函数)
对数据分组后进行统计,示例:
SELECT major, COUNT(*) AS student_count
FROM students
GROUP BY major; -- 按专业分组,统计每组人数
常用聚合函数:COUNT()
(计数)、SUM()
(求和)、AVG()
(平均值)、MAX()
(最大值)、MIN()
(最小值)。
5. 实践提示
- 使用表别名:简化查询语句,提高可读性。
SELECT s.name FROM students AS s;
- 避免
SELECT *
:指定需要的列,减少数据传输量。 - 添加索引:对高频查询的列添加索引(如
CREATE INDEX idx_name ON students(name);
),提升查询性能。 - 规范字段设计:合理使用枚举值、外键等,避免数据冗余。
6. 总结
SQL 是操作关系型数据库的核心技能,掌握基础的 DDL、DML 语句和查询逻辑是数据管理与开发的基石。
SQL 基础之主键和外键
在关系型数据库的表结构设计中,**主键(Primary Key)和外键(Foreign Key)**是构建数据关联关系、确保数据完整性的核心概念。本文将详细解析两者的定义、功能及实践应用。
1. 主键(Primary Key)
概念
主键是表中用于唯一标识每条记录的字段或字段组合,需满足以下约束:
- 唯一性:表中任意两条记录的主键值不能重复。
- 非空性:主键字段不允许为
NULL
。
创建主键的方式
(1)创建表时直接指定
CREATE TABLE students (
id INT PRIMARY KEY, -- 单字段主键
name VARCHAR(100),
age INT
);
(2)为已有表添加主键
ALTER TABLE students
ADD CONSTRAINT pk_students_id PRIMARY KEY (id);
-- CONSTRAINT 用于指定约束名称(可选,建议命名以明确含义)
(3)复合主键(多个字段联合唯一)
CREATE TABLE enrollments (
student_id INT,
course_id INT,
enrollment_date DATE,
PRIMARY KEY (student_id, course_id) -- 复合主键:两个字段组合唯一
);
2. 外键(Foreign Key)
概念
外键是表中的一个字段(或字段组合),其值引用另一表的主键,用于建立表间的关联关系。外键的核心作用:
- 数据完整性:确保表间引用的有效性(如选课记录中的学生 ID 必须存在于学生表中)。
- 表间关联:实现多表数据的联动查询(如查询学生及其选课记录)。
创建外键的方式
(1)创建表时指定外键
CREATE TABLE enrollments (
id INT PRIMARY KEY,
student_id INT,
course_id INT,
score INT,
-- 外键约束:student_id 引用 students 表的 id 字段
FOREIGN KEY (student_id) REFERENCES students(id),
-- 可同时指定多个外键
FOREIGN KEY (course_id) REFERENCES courses(id)
);
(2)为已有表添加外键
ALTER TABLE enrollments
ADD CONSTRAINT fk_enrollments_student -- 外键约束名称
FOREIGN KEY (student_id)
REFERENCES students(id); -- 引用目标表的主键
(3)外键的完整性约束
通过 ON DELETE CASCADE
和 ON UPDATE CASCADE
实现级联操作,确保数据一致性:
CREATE TABLE enrollments (
id INT PRIMARY KEY,
student_id INT,
course_id INT,
-- 级联删除:当删除学生时,自动删除其选课记录
-- 级联更新:当学生 ID 变更时,自动更新选课记录中的对应值
FOREIGN KEY (student_id) REFERENCES students(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
3. 主外键经典案例:学校管理系统
表结构设计
表名 | 主键 | 外键 | 说明 |
---|---|---|---|
students |
id (INT) |
无 | 学生信息表 |
courses |
id (INT) |
无 | 课程信息表 |
enrollments |
(student_id, course_id) |
student_id REFERENCES students(id) course_id REFERENCES courses(id) |
选课关系表,关联学生与课程 |
数据完整性保障
- 插入选课记录时:数据库会检查
student_id
和course_id
是否存在于对应表中,若不存在则拒绝插入。 - 删除学生记录时:若启用
ON DELETE CASCADE
,则自动删除该学生的所有选课记录,避免孤立数据。
4. 总结
- 主键是表的“唯一标识”,确保记录唯一性和非空性,是关系型数据库的基础约束。
- 外键是表间关联的“桥梁”,通过引用主键建立关系,保障数据完整性和一致性。
- 合理设计主外键是数据库建模(如 ER 模型)的核心环节,也是后续复杂查询(如
JOIN
)的基础。
掌握主外键的原理与实践,是深入学习数据库设计、优化和管理的必经之路。