0
0
0

第4章(上):SQL入门——建库建表与完整性约束

2026-10-19
文章摘要
|

第 4 章(上):SQL 入门——建库、建表与完整性约束

从这一篇开始进入 SQL。建议在电脑上装一个 MySQL(或用在线 SQL 练习平台),每段代码亲手敲一遍——SQL 是练出来的,不是看出来的。本篇覆盖 DDL(数据定义)部分。

一、SQL 是什么

SQL(Structured Query Language,结构化查询语言)是关系数据库的标准语言,几乎所有 DBMS(MySQL、Oracle、SQL Server、SQLite……)都支持。它由几部分组成:

  • DDL 数据定义:CREATE / ALTER / DROP(对库、表、视图、索引);
  • DQL 数据查询:SELECT;
  • DML 数据操纵:INSERT / UPDATE / DELETE;
  • DCL 数据控制:GRANT / REVOKE(授权)。

特点(简答常考):综合统一(定义、查询、操纵、控制一体);高度非过程化(只说"要什么",不说"怎么做");面向集合的操作方式;以同一种语法结构提供多种使用方式(交互式 + 嵌入式);简洁易学(核心动词只有 9 个)。

二、创建数据库与表

CREATE DATABASE schooldb;      -- 建库
USE schooldb;                  -- 选中要用的库

建表模板:

CREATE TABLE 表名 (
    列名  数据类型  [列级约束],
    ...,
    [表级约束]
);

常用数据类型:

类型 用途
INT / SMALLINT 整数
DECIMAL(p,s) 定点小数(金额常用)
CHAR(n) 定长字符串(学号、编号)
VARCHAR(n) 变长字符串(姓名、地址)
DATE / DATETIME 日期 / 日期时间

三、三类完整性(本章灵魂,必须掌握)

1. 实体完整性——主码不能空、不能重复

Sno CHAR(9) PRIMARY KEY

多属性主码写在表级:PRIMARY KEY (Sno, Cno)。

2. 参照完整性——外码要么为空,要么必须"引用得到"

FOREIGN KEY (Sno) REFERENCES Student(Sno)

含义:SC 表里的 Sno 必须是 Student 表里真实存在的学号(或为空)。这就是"成绩必须挂在真实学生身上"的保证。

3. 用户定义完整性——业务自定义的规则

  • NOT NULL 非空;
  • UNIQUE 唯一;
  • CHECK(条件) 检查,如 CHECK(Sage BETWEEN 15 AND 45);
  • DEFAULT 值 默认值。

四、完整示例:学生选课库

CREATE TABLE Student (
    Sno   CHAR(9) PRIMARY KEY,
    Sname VARCHAR(20) NOT NULL,
    Ssex  CHAR(2) DEFAULT '男' CHECK (Ssex IN ('男','女')),
    Sage  SMALLINT CHECK (Sage BETWEEN 15 AND 45),
    Sdept VARCHAR(20)
);

CREATE TABLE Course (
    Cno     CHAR(4) PRIMARY KEY,
    Cname   VARCHAR(30) NOT NULL UNIQUE,
    Credit  SMALLINT
);

CREATE TABLE SC (
    Sno    CHAR(9),
    Cno    CHAR(4),
    Grade  SMALLINT CHECK (Grade BETWEEN 0 AND 100),
    PRIMARY KEY (Sno, Cno),
    FOREIGN KEY (Sno) REFERENCES Student(Sno),
    FOREIGN KEY (Cno) REFERENCES Course(Cno)
);

五、修改与删除

ALTER TABLE Student ADD Tel CHAR(11);        -- 加列
ALTER TABLE Student DROP COLUMN Tel;         -- 删列
ALTER TABLE Student MODIFY Sname VARCHAR(30); -- 改类型
DROP TABLE SC;                                -- 删表(先删从表,再删主表)

注意:删除表时先删引用表(SC)再删被引用表(Student),否则违反参照完整性。

六、动手练习

  1. 按上面示例完整建出三张表;
  2. 故意往 SC 里插一条 Student 不存在的 Sno,观察报错,体会参照完整性;
  3. 给 Student 增加"入学日期"列并设置 CHECK 约束。

下一篇:SELECT 查询全攻略——SQL 的重头戏。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

评论

欢迎来到我的博客!