0
0
0
第4章(上):SQL入门——建库建表与完整性约束
文章摘要
|
第 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),否则违反参照完整性。
六、动手练习
- 按上面示例完整建出三张表;
- 故意往 SC 里插一条 Student 不存在的 Sno,观察报错,体会参照完整性;
- 给 Student 增加"入学日期"列并设置 CHECK 约束。
下一篇:SELECT 查询全攻略——SQL 的重头戏。
