文章目录
3 数据更新
3.1 插入数据
DBMS在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则,如若插入数据会破坏完整性规则,则该插入操作不会被执行。
- 实体完整性
- 参照完整性
- 用户自定义完整性
- not null约束
- unique约束
- 值域约束
3.1.1 插入元组
insert
into <表名> [(<属性列1>, <属性列2>…)]
values (<常量1>, <常量2>…)
例:将一个新学生元组(学号:201215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。
insert
into Student(Sno,Sname,Ssex,Sdept,Sage)
values ('201215128','陈冬','男','IS',18);
例:插入一条选课记录(‘201215128’,‘1’)
insert
into SC(Sno,Cno)
values ('201215128','1')
/*关系数据库管理系统将在新插入记录的Grade列上自动赋空值,或者:*/
insert
into SC
values ('201215128','1',null);
3.1.2 插入子查询结果
可以一次插入多个元组。
insert
into <表名> [(<属性列1>,<属性列2>…)]
子查询;
例:对每一个系,求学生的平均年龄,并把结果存入数据库。
//step1 建表
create table Dept_age (Sdept char(15), Avg_age smallint);
//step2 插入数据
insert
into Dept_age(Sdept,Avg_age)
select Sdept,avg(Sage)
from Student
group by Sdept;
3.2 修改数据
update
set <列名>=<表达式>[,<列名>=<表达式>]…
[where <条件>]
如果省略where子句,表示要修改表中所有元组。
3.2.1 修改某一个元组的值
例:将学生201215121的年龄改为22岁。
update Student
set Sage=22
where Sno='201215121';
3.2.2 修改多个元组的值
例:将所有学生的年龄增加1岁。
update Student
set Sage=Sage+1;
3.2.3 带子查询的修改语句
例:将计算机科学系全体学生的成绩置零。
update SC
set Grade=0
where Sno in (select Sno
from Student
where Sdept='CS');
3.3 删除数据
delete
from <表名>
[where <条件>];
如果省略where子句表示要删除表中的全部元组,表的定义仍在字典中。
3.3.1 删除某一个元组的值
例:删除学号201215128的学生记录。
delete
from Student
where Sno='201215128';
3.3.2 删除多个元组的值
例:删除所有的学生选课记录。
delete
from SC;
3.3.3 带子查询的删除语句
例:删除计算机科学系所有学生的选课记录。
delete
from SC
where Sno in (select Sno
from Student
where Sdept='CS');