SQL 数据更新
本文最后更新于:2024年3月18日 凌晨
SQL 数据更新
插入数据
插入元组
1 |
|
注意:
-
其功能是将元组插入指定表中,其中新元组的属性列1的值为常量1,属性列2的值为常量2,…INTO子句中没有出现的属性列,新元组在这些列上将取空值,但必须注意的是,在定义时说明了NOT NULL的属性列不能取空值,否则会出错。
-
如果INTO子句中没有指明任何属性列名,则新插入的元组必须在每个属性列上均有值。
[例3.69]:将一个新元组(学号:201215128,姓名:陈东,性别:男。所在系:IS,年龄:18岁)插入到Student表中。
1 |
|
在INTO子句中指定了表名Student,并指出了新增加的元组在哪些属性上要赋值,属性的顺序可以与CREATE TABLE中额顺序不一样,VALUES子句对新元组的各属性赋值,字符串常数要用单引号(英文符号)括起来。
[例3.70]:将学生张成名的信息插入到Student表中。
1 |
|
与例3.69的不同是在INTO子句中只指出了表名,没有指出属性名,这表示新元组要在表的所有属性列上都指定值,属性列的次序与CREATE TABLE中的次序相同,VALUES子句对新元组的各属性列赋值,一定要注意值与属性列要一一对应,如果像例3.69那样,成为(‘201215126’,‘张成民’,‘男’,‘CS’,18),则含义是将’CS"赋予了列Sage,而18赋予了列Sdept,这样则会因为数据类型不匹配出错。
[例3.71]:插入一条选课记录(‘201215128’,‘1’)
1 |
|
- 关系数据库管理系统将在新插入的Grade列上自动地赋空值。
- 或者:
1 |
|
因为没有指出SC的属性名,在Grade列上要明确给出空值。
插入子查询结果
子查询不仅可以嵌套在SELECT语句中用以构造父查询的条件,也可以嵌套在INSERT语句中用以生成要插入的批量数据。
1 |
|
[例3.72]:对每一个系,求学生的平均年龄,并把结果存入数据库。
首先在数据库中建立一个新表,其中一列存放系名,另一列存放相应的学生平均年龄。
1 |
|
然后对Student表按系分组求平均年龄,再把系名和平均年龄存入新表中。
1 |
|
修改数据
1 |
|
其功能是修改指定表中满足WHERE子句条件的元组,其中SET子句给出<表达式>的值用于取代相应的属性列值,如果省略WHERE子句,则表示要修改表中的所有元组。
修改一个元组的值
[例3.73]:将学生201215121的年龄改为22岁。
1 |
|
修改多个元组的值
[例3.74]:将所有学生的年龄增加1岁。
1 |
|
## 带子查询的修改语句
子查询也可以嵌套在UPDATE语句中,用于构造修改的条件。
[例3.75]:将计算机科学系全体学生的成绩置零。
1 |
|
删除数据
1 |
|
注意:
DELETE语句的功能是从指定表中删除满足WHERE子句条件的所有元组。如果省略WHERE子句则表示删除表中全部元组,但表的定义仍在字典中,也就是说,DELETE语句删除的是表中的数据,而不是关于表的定义。
删除某一个元组的值
[例3.76]:删除学号为201215128的学生记录。
1 |
|
删除多个元组的值
[例3.77]:删除所有的学生选课记录。
1 |
|
这条DELETE语句将使SC成为空表,它删除了SC的所有元组。
带子查询的删除语句
子查询同样也可以嵌套在DELETE语句中,用以构造执行删除操作的条件。
[例3.78]:删除计算机科学系所有学生的选课记录。
1 |
|
对于某个基本表中数据的增,删,改操作有可能会破坏参照完整性。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!