1
大学信息技术基础教程
1.2.6.4.5 6.4.5 数据更新

6.4.5 数据更新

1)插入数据

INSERT语句有两种形式:一种是插入单个元组,另一种是插入子查询结果。

(1)插入单个元组

插入单个元组的INSERT语句格式为:

INSERT

INTO<表名>[(<属性列1>[,<属性列2>]...)]

VALUES(<常量1>[,<常量2>]...);

如果某些列在INTO子句中没有出现,则新记录的这些列将取空值,但说明了NOT NULL的属性列不能取空值。

如果INTO子句中没有指定任何列名,则新插入的记录必须在每个属性列上均有值。

[例36]将一个新学生记录(学号:07061112,姓名:张亮,性别:男,所在系:建筑工程,年龄:18)插入Student表中。

INSERT

INTO Student

VALUES(′07061112′,′张亮′,′男′,′建筑工程′,18);

[例37]插入一条选课记录(学号:07061112,课程号:2)。

INSERT

INTO SC(Sno,Cno)

VALUES(′07061112′,′2′);

(2)插入子查询结果

插入子查询结果的INSERT语句的格式为:

INSERT

INTO<表名>[(<属性列1>[,<属性列2>]...)]

子查询;

功能:将子查询的结果以批量形式插入指定表中。

[例38]对每个系求学生的平均年龄并把结果存入数据库。

先建一个新表Deptage,包含系名(Sdept)和平均年龄(Avgage)两个属性,然后从Student表中查询每个系学生的平均年龄并将其插入新建的表中。具体操作如下:

CREATE TABLE Deptage

(Sdept CHAR(15)

Avgage SMALLINT);

INSERT

INTO Deptage

SELECT Sdept,AVG(Sage)

FROM Student

GROUP BY Sdept;

2)修改数据

又称为更新操作,一般格式为:

UPDATE<表名>

SET<列名>=<表达式>[,<列名>=<表达式>]...[WHERE<条件>];

功能:修改指定表中满足WHERE子句条件的元组。

其中,SET子句用于指定修改方法,即用<表达式>的值取代相应的属性列值。如果省略WHERE子句,则表示要修改表中的所有元组。

(1)修改某一个元组的值

[例39]将学生07061112所在的系改为计算机系。

UPDATE Student

SET Sdept=′计算机′

WHERE Sno=′07061112′;

(2)修改多个元组的值

[例40]将所有学生的年龄增加1岁。

UPDATE Student

SET Sage=Sage+1;

(3)带子查询的修改语句

[例41]将计算机系全体学生的成绩置0。

UPDATE SC

SET Grade=0

WHERE′计算机′=

(SELECT Sdept

FROM Student

WHERE Student.Sno=SC.Sno);

(4)修改操作与数据库的一致性

UPDATE语句一次只能操作一个表,如果修改一个表后会影响另外一个表中的数据,则另一个表也要修改。

3)删除数据

删除数据的一般格式:

DELETE

FROM<表名>

[WHERE<条件>];

功能:从指定表中删除满足WHERE子句条件的所有元组。如果省略WHERE子句,则表示删除表中全部元组,但表的定义仍保留。

(1)删除某一个元组的值

[例42]删除学号为07061112的学生的记录。

DELETE

FROM Student

WHERE Sno=′07061112′;

(2)删除多个元组的值

[例43]删除所有学生的选课记录。

DELETE

FROM SC;

执行这条语句后SC成为一张空表,但其定义仍然保存在数据字典中,也就是以后还可以对该表进行插入数据操作。

(3)带子查询的删除语句

即用子查询来构造执行删除操作的条件。

[例44]删除计算机系所有学生的选课记录。

img149