当前位置: 首页 > news >正文

SQL 基础入门

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. 主外键经典案例:学校管理系统

表结构设计

表名主键外键说明
studentsid(INT)学生信息表
coursesid(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)的基础。

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

相关文章:

  • LeetCode 高频 SQL 50 题(基础版)之 【子查询】· 上
  • SQL-labs通关(level1-22)
  • 几种简单的排序算法(C语言)
  • Github 2025-06-07 Rust开源项目日报Top10
  • Xela矩阵三轴触觉传感器的工作原理解析与应用场景
  • 计算矩阵A和B的乘积
  • LeetCode刷题 -- 542. 【01 矩阵】最短距离更新算法实现(双向DP)
  • 步进电机调试记录(先让我的步进电机转起来)
  • DeepSeek09-open-webui使用
  • 打卡第47天
  • 意识上传伦理前夜:我们是否在创造数字奴隶?
  • STC8H系列 驱动步进电机
  • 前端开发面试题总结-JavaScript篇(二)
  • PostgreSQL authentication method 10 not supported
  • oracle 归档日志与RECOVERY_FILE_DEST 视图
  • 队列的概念及实现
  • Anaconda
  • 开源技术驱动下的上市公司财务主数据管理实践
  • RSA加密算法:非对称密码学的基石
  • Python Cookbook-7.11 在 PostgreSQL 中储存 BLOB
  • 萍乡网站开发/网站建设公司seo关键词
  • 合肥外贸网站建设/推广赚钱的平台有哪些
  • 怎样销售网站/seo关键词外包
  • 大庆北京网站建设/网站制作和推广
  • 用html做企业门户网站/全网营销公司排名前十
  • 长春做网站要多少钱/电脑优化大师官方免费下载