一、数据插入
两种插入数据方式
-
插入元组
-
插入子查询结果
可以一次插入多个元组
1.1 插入元组
语句格式:
INSERT
INTO <表名> [(<属性列1>[,<属性列2 >…)]
VALUES (<常量1> [,<常量2>] … )
- 插入完整信息
[例1].将新生记录(1821104,陈冬,男,信息系,18岁)插入到Student表中。
INSERT INTO Student VALUES ('1821104', '陈冬', '男', 18, '信息系')
- 插入一行的部分数据值
[例2].在SC表中插入一新记录,成绩暂缺。
INSERT INTO SC(Sno, Cno) VALUES(‘1821105', 'c001')
1.2 插入子查询结果
语句格式:
INSERT INTO <表名> [(<属性列1> [,<属性列2>… )]
[例3].对每一个系,求学生的平均年龄,并把结果存入数据库。
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;-- 以院系为一组
二、数据删除
DELETE语句的语法格式为:
DELETE [ FROM ] <表名> [WHERE <删除条件>]
2.1 无条件删除数据
无条件删除是删除表中全部数据,但保留表的结构。
[例4].删除所有学生的选课记录。
DELETE FROM SC -- SC成空表
**注意:**这样清空表之后,再添加数据,如果存在自增长的索引,那么再添加的数据的自增长的索引会依据清空之前的索引继续自增。
为了清空后重新开始可以使用 truncate 语句
truncate table <表名>
清空表中所有的记录,重置整个表的结构,索引会重新开始
2.2 有条件删除
分为两种情况:
- 一种是基于本表条件的删除。
[例5].删除所有不及格学生的修课记录。
DELETE FROM SC WHERE Grade < 60
- 另一种是基于其他表条件的删除。
[例6].删除计算机系不及格学生的修课记录。
-- 用子查询实现
DELETE FROM SC
WHERE Grade < 60 AND Sno IN (
SELECT Sno FROM Student
WHERE Sdept = '计算机系' )
-- 用多表连接实现
DELETE FROM SC
FROM SC JOIN Student
ON SC.Sno = Student.Sno
WHERE Sdept = '计算机系' AND Grade < 60
三、数据修改
语句格式:
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
[WHERE <条件>];
注意:
说明:
-
SET子句
指定修改方式
要修改的列
修改后取值
-
WHERE子句
指定要修改的元组
缺省表示要修改表中的所有元组
3.1 三种修改方式
- 修改某一个元组的值
[例7] 将学生“1512101”的年龄改为22岁
UPDATE Student
SET Sage=22
WHERE Sno=' 1512101 ';
- 修改多个元组的值
[例8] 将所有学生的年龄增加1岁
UPDATE Student
SET Sage= Sage+1;
- 带子查询的修改语句
将计算机科学系全体学生的成绩加3分。
UPDATE SC
SET Grade=Grade+3
WHERE Sno IN(SELECT Sno
FROM Student
WHERE Sdept='计算机系');
3.2 完整性规则
RDBMS在执行修改语句时会检查修改操作是否破坏表上已定义的完整性规则。
-
实体完整性
-
主码不允许修改
-
用户定义的完整性
-
NOT NULL约束
-
UNIQUE约束
-
值域约束
-