主题切换
课时三 数据定义与数据更新
考点分值总览
| 考点 | 重要程度 | 分值 | 常见题型 |
|---|---|---|---|
| 数据定义(DDL) | ★★★★★ | 2~10 | 选择、简答、写SQL |
| 数据更新(DML增改删) | ★★★★★★ | 5~10 | 选择、简答、写SQL |
一、数据定义 DDL
1. SQL四大操作对象命令总表
关系数据库三级模式对应对象:模式、表、视图、索引,DDL负责创建/删除/修改
| 操作对象 | 创建 | 删除 | 修改 |
|---|---|---|---|
| 模式(Schema) | CREATE SCHEMA | DROP SCHEMA | 无 |
| 基本表(Table) | CREATE TABLE | DROP TABLE | ALTER TABLE |
| 视图(View) | CREATE VIEW | DROP VIEW | 无 |
| 索引(Index) | CREATE INDEX | DROP INDEX | ALTER INDEX |
2. 模式 Schema 操作
(1)创建模式
语法:
sql
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
[表定义子句 | 视图定义子句 | 授权子句];规则:
- 无指定模式名时,模式名默认等于用户名;
- 执行用户需要DBA权限或被授予CREATE SCHEMA权限;
- 模式是命名空间,创建时可同步建表、视图、授权。
示例1:为用户WANG创建S-T学生课程模式
sql
CREATE SCHEMA "S-T" AUTHORIZATION WANG;示例2:用户ZHANG创建TEST模式,同时创建表TAB1
sql
CREATE SCHEMA TEST AUTHORIZATION ZHANG
CREATE TABLE TAB1(
COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2)
);(2)删除模式
语法:
sql
DROP SCHEMA <模式名> CASCADE | RESTRICT;二选一参数说明:
CASCADE级联:删除模式,同时删除模式内所有表、视图、索引等对象;RESTRICT限制:模式内存在任何表/视图则拒绝删除,必须清空后才能删。
示例:删除ZHANG模式,连带内部所有表
sql
DROP SCHEMA ZHANG CASCADE;3. 基本表 Table 操作
(1)创建表 CREATE TABLE
语法:
sql
CREATE TABLE <表名>(
<列名> <数据类型> [列级完整性约束],
...
[表级完整性约束]
);约束分类:
- 列级约束:仅作用于当前单列(PRIMARY KEY、UNIQUE、NOT NULL);
- 表级约束:跨多列、外键FOREIGN KEY,写在所有字段后。
常用约束关键字:
PRIMARY KEY:主键,唯一非空;UNIQUE:唯一约束,允许一个null;NOT NULL:非空;FOREIGN KEY(外键列) REFERENCES 主表(主键列):外键参照完整性。
示例1:学生表Student
sql
CREATE TABLE Student(
Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);示例2:课程表Course(自参照外键,先修课)
sql
CREATE TABLE Course(
Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40) NOT NULL,
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno)
);示例3:供应商表S(SPJ数据库)
sql
CREATE TABLE S(
Sno CHAR(6) PRIMARY KEY,
Sname CHAR(10),
Status INT,
City CHAR(20)
);(2)修改表 ALTER TABLE
完整语法:
sql
ALTER TABLE <表名>
[ADD [COLUMN] 新列名 类型 [约束]] -- 新增列
[ADD 表级约束] -- 新增表约束
[DROP [COLUMN] 列名 CASCADE|RESTRICT] -- 删除列
[DROP CONSTRAINT 约束名 CASCADE|RESTRICT]-- 删除约束
[ALTER COLUMN 列名 新数据类型]; -- 修改列类型示例1:Student新增入学时间列
sql
ALTER TABLE Student ADD S_entrance DATE;新增列全部默认为NULL,无法给NOT NULL初始值。
示例2:修改Sage字段类型为INT
sql
ALTER TABLE Student ALTER COLUMN Sage INT;示例3:给课程名增加唯一约束
sql
ALTER TABLE Course ADD UNIQUE(Cname);(3)删除表 DROP TABLE
语法:
sql
DROP TABLE <表名> CASCADE | RESTRICT;RESTRICT:表被外键、视图、触发器引用时禁止删除;CASCADE:删除本表,同时级联删除依赖本表的视图、约束、索引、触发器。
示例:删除Student表,连带所有依赖对象
sql
DROP TABLE Student CASCADE;删除表后:表数据、表定义、索引、触发器全部销毁。
4. 索引 Index 创建
语法:
sql
CREATE UNIQUE INDEX <索引名> ON <表名>(列名);示例:在Student.Sname建立唯一索引
sql
CREATE UNIQUE INDEX Stusname ON Student(Sname);5. 配套选择题
题1:下列属于DDL数据定义语言的是() A.SELECT B.CREATE C.UPDATE D.DELETE 答案:B 解析:DDL包含CREATE、ALTER、DROP;SELECT/UPDATE/DELETE属于DML数据操作语言。
二、数据更新 DML(INSERT / UPDATE / DELETE)
1. 插入 INSERT 两种格式
(1)插入单个元组
sql
INSERT INTO 表名 [(列1,列2...)]
VALUES (常量1,常量2...);规则:
- 省略列名:VALUES必须给全表所有字段赋值;
- 指定部分列:未列出字段自动填充NULL,有NOT NULL约束则报错。
(2)批量插入子查询结果
sql
INSERT INTO 表名 (列1,列2...)
子查询SELECT语句;用途:把查询结果批量插入目标表。
2. 修改 UPDATE 更新数据
语法:
sql
UPDATE <表名>
SET 列1=表达式, 列2=表达式...
[WHERE 条件];规则:省略WHERE会更新全表所有元组。
示例:将CS系所有学生成绩置0
sql
UPDATE SC
SET Grade=0
WHERE Sno IN (SELECT Sno FROM Student WHERE Sdept='CS');3. 删除 DELETE(讲义未展示,补充核心语法)
sql
DELETE FROM <表名>
[WHERE 条件];省略WHERE删除整张表全部数据,表结构保留。
补充区分
- DDL:CREATE/ALTER/DROP,定义库、表、索引、视图结构;
- DML:INSERT/UPDATE/DELETE/SELECT,操作表里数据行。