修改操作又称为更新操作,其语句的一般格式为:
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]...
[WHERE <条件>];
其功能是修改指定表中满足WHERE子句条件的元组。其中SET子句用于指定修改方法,即用<表达式>的值取代相应的属性列值。如果省略WHERE子句,则表示要修改表中的所有元组。
| 一、 | 修改某一个元组的值 |
| 例4 |
将学生95001的年龄改为22岁 |
| UPDATE Student SET Sage=22 WHERE Sno='95001'; |
|
| 二、 | 修改多个元组的值 |
| 例5 |
将所有学生的年龄增加1岁 |
| UPDATE Student SET Sage=Sage+1; |
|
| 三、 | 带子查询的修改语句 |
| 子查询也可以嵌套在UPDATE语句中,用以构造执行修改操作的条件。 |
|
| 例6 |
将计算机科学系全体学生的成绩置零 |
|
UPDATE SC |
|
| 四、 | 修改操作与数据库的一致性 |
| UPDATE语句一次只能操作一个表。这会带来一些问题。例如,学号为95007的学生因病休学一年,复学后需要将其学号改为96089,由于Student表和SC表都有关于95007的信息,因此两个表都需要修改,这种修改只能通过两条UPDATE语句进行。 | |
第一条UPDATE语句修改Student表: |
|
UPDATE Student SET Sno='96089' WHERE Sno='95007'; |
|
第二条UPDATE语句修改SC表: |
|
UPDATE SC SET Sno='96089' WHERE Sno='95007'; |
|
在执行了第一条UPDATE语句之后,数据库中的数据已处于不一致状态,因为这时实际上已没有学号为95007的学生了,但SC表中仍然记录着关于95007学生的选课信息,即数据的参照完整性受到破坏。只有执行了第二条UPDATE语句之后,数据才重新处于一致状态。但如果执行完一条语句之后,机器突然出现故障,无法再继续执行第二条UPDATE语句,则数据库中的数据将永远处于不一致状态。因此必须保证这两条UPDATE语句要么都做,要么都不做。为解决这一问题,数据库系统通常都引入了事务(Transaction)的概念,我们将在第五章详细介绍。 |
