持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情
数据库原理-数据更新
插入数据
两种插入数据方式
-
插入元组
-
插入子查询结果
- 可以一次插入多个元组
插入元组
语句格式
INSERT
INTO<表名>[(<属性列1>[,<属性列2>...])]
VALUES(<常量1>[,<常量2>]...)
功能
- 将新元组插入指定表中
INTO子句
- 指定要插入数据的表名及属性列
- 属性列的顺序可与表定义中的顺序不一致
- 没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致
- 制定部分属性列:插入的元组在其余属性列上取空值
VALUES子句
-
提供的值必须与INTO子句匹配
- 值的个数
- 值的类型
将一个新学生元组(学号:201215128;姓名:陈东;性别:男;所在系:IS;年龄:18岁)插入到Student表中
INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES('201215128','陈东','男','IS',18);
插入一条选课记录('200215128','1',)
INSERT INTO SC(Sno,Cno)
VALUES('201215128','1');
关系数据库管理系统将在新插入记录的Grade列上自动的赋空值
或者:
INSERT INTO SC
VALUES('201215128','1',NULL)
将学生张成民的信息插入到Student表中
INSERT INTO Student
VALUES('201215126','张成民','男',18,'CS');
插入子查询结果
语句格式
INSERT INTO <表名> [(<属性列1>[,<属性列2>..])]
子查询;
-
INTO子句
-
子查询
-
SELECT子句目标列必须与INTO子句匹配
- 值的个数
- 值的类型
-
对每一个系,求学生的平均年龄,并把结果存入数据库
第一步:建表
CREATE TABLE Dept_age
(
Sdept CHAR(15),
Avg_age SMALLINT
);
第二步:插入数据
INSERT INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;
关系数据库管理系统在执行插入语句是会检查所插元组是否破坏表上已定义的完整性规则
-
实体完整性
-
参照完整性
-
用户定义的完整性
- NOT NULL约束
- UNIQUE约束
- 值域约束
修改数据
语句格式
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]...
[WHERE <条件>];
功能
- 修改指定表中满足WHERE子句条件的元组
- SET子句给出<表达式>的值用于取代相应的属性列
- 如果省略WHERE子句,表示要修改表中的所有元组
三种修改方式
- 修改某一个元组的值
- 修改多个元组的值
- 带子查询的修改语句
修改某一个元组的值
将学生201215121的年龄改为22岁
UPDATE Student
SET Sage=22
WHERE Sno='201215121';
将所有学生的年龄增加1岁
UPDATE Student
SET Sage=Sage+1
将计算机科学系全体学生的成绩置零
UPDATE SC
SET Grade=0
WHERE Sno IN
(SELECT Sno
FROM Student
WHERE Sdept='CS');
关系数据库管理系统在执行修改语句时会检查修改操作是否破坏表上已定义的完整性规则
-
实体完整性
-
主码不允许修改
-
用户定义的完整性
- NOT NULL约束
- UNIQUE约束
- 值域约束
删除数据
语句格式
DELECT FROM <表名>
[WHERE <条件>];
功能
- 删除指定表中满足WHERE子句条件的元组
WHERE子句
- 指定要删除的元组
- 无该子句将会删除表中的全部元组
三种删除方式
- 删除某一个元组的值
- 删除多个元组的值
- 带子查询的删除语句
删除某一个元组的值
删除学号为201215128的学生记录
DELECT FROM Student
WHERE Sno = '201215128';
删除多个元组的值
删除所有的学生选课记录
DELETE FROM SC;
带子查询的删除语句
删除计算机科学系所有学生的选课记录
DELETE
FROM SC
WHERE Sno IN
(SELECT Sno
FROM Student
WHERE Sdept='CS');
\