SQL 基础入门

发布于:2025-06-09 ⋅ 阅读:(20) ⋅ 点赞:(0)

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 CASCADEON 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_idcourse_id 是否存在于对应表中,若不存在则拒绝插入。
  • 删除学生记录时:若启用 ON DELETE CASCADE,则自动删除该学生的所有选课记录,避免孤立数据。

4. 总结

  • 主键是表的“唯一标识”,确保记录唯一性和非空性,是关系型数据库的基础约束。
  • 外键是表间关联的“桥梁”,通过引用主键建立关系,保障数据完整性和一致性。
  • 合理设计主外键是数据库建模(如 ER 模型)的核心环节,也是后续复杂查询(如 JOIN)的基础。

掌握主外键的原理与实践,是深入学习数据库设计、优化和管理的必经之路。