SQL(全称 Structured Query Language,结构化查询语言)是用于操作关系型数据库的标准语言,主要用于数据的查询、新增、修改和删除。本文面向初学者,介绍 SQL 的基础概念和核心操作。
SQL 以语句为执行单位,每条语句以分号(;)结尾。按功能可分为以下几类:
CREATE
(创建)、ALTER
(修改)、DROP
(删除)等操作。SELECT
(查询)、INSERT
(插入)、UPDATE
(更新)、DELETE
(删除)等。GRANT
(授权)、REVOKE
(回收权限)等。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 的记录
定义数据表时常用的数据类型:
n
个字符(如姓名、地址)。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()
(最小值)。
SELECT s.name FROM students AS s;
SELECT *
:指定需要的列,减少数据传输量。CREATE INDEX idx_name ON students(name);
),提升查询性能。SQL 是操作关系型数据库的核心技能,掌握基础的 DDL、DML 语句和查询逻辑是数据管理与开发的基石。
在关系型数据库的表结构设计中,**主键(Primary Key)和外键(Foreign Key)**是构建数据关联关系、确保数据完整性的核心概念。本文将详细解析两者的定义、功能及实践应用。
主键是表中用于唯一标识每条记录的字段或字段组合,需满足以下约束:
NULL
。CREATE TABLE students (
id INT PRIMARY KEY, -- 单字段主键
name VARCHAR(100),
age INT
);
ALTER TABLE students
ADD CONSTRAINT pk_students_id PRIMARY KEY (id);
-- CONSTRAINT 用于指定约束名称(可选,建议命名以明确含义)
CREATE TABLE enrollments (
student_id INT,
course_id INT,
enrollment_date DATE,
PRIMARY KEY (student_id, course_id) -- 复合主键:两个字段组合唯一
);
外键是表中的一个字段(或字段组合),其值引用另一表的主键,用于建立表间的关联关系。外键的核心作用:
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)
);
ALTER TABLE enrollments
ADD CONSTRAINT fk_enrollments_student -- 外键约束名称
FOREIGN KEY (student_id)
REFERENCES students(id); -- 引用目标表的主键
通过 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
);
表名 | 主键 | 外键 | 说明 |
---|---|---|---|
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
,则自动删除该学生的所有选课记录,避免孤立数据。JOIN
)的基础。掌握主外键的原理与实践,是深入学习数据库设计、优化和管理的必经之路。