数据库系统之SQL 数据操作语言 (DML)

DELETE Statement

DELETE语句删除满足给定条件的所有行。

通过DELETE语句删除的行可以通过ROLLBACK语句恢复,除非DELETE已经通过COMMIT语句提交。

DELETE语句不删除表。

DELETE语句不会释放被删除行的磁盘存储空间。

举例说明:
删除一个代码为123的课程:

DELETE FROM COURSE
WHERE cnum = '123';

删除所有12学分或标题包含单词“DATABASE”的课程:

DELETE FROM COURSE
WHERE (credits = 12) OR (UPPER(title) LIKE '%DATABASE%');

删除所有员工总数小于5的部门:

DELETE FROM DEPARTMENT
WHERE total_staff_number < 5;

如果在创建表时存在一个外键offered_by参考的是DEPARTMENT(name)这个属性。

CONSTRAINT course_fkey1 FOREIGN KEY(offered_by)
REFERENCES DEPARTMENT(name) );

那么如果执行下面语句就会报错:

DELETE FROM DEPARTMENT WHERE name='Physics';

ERROR at line 1:
ORA-02292: integrity constraint (JRG.COURSE_FKEY1) violated - child record found

因此我们要先删除外键offered_by的行才能成功删除主键name的行。
然而有一个意外就是在创建表时声明了ON DELETE CASCADE。
如果ON DELETE CASCADE没有在描述中被使用,那么行被删除的顺序是重要的!!
先外后主。
如果有ON DELETE CASCADE声明时,删除主键会连带删除相关外键。
否则,必须删除与外键值相同的行。

INSERT Statement

NSERT语句将新行插入到关系表中,并自动验证一致性约束。

插入语句的内容要与插入的表的属性定义一致。

INSERT INTO DEPARTMENT
VALUES ('Computer Science', 'CSCI', 30, 'Peter', 123456.9 );


INSERT INTO COURSE(cnum, title, offered_by, credits)
VALUES('MATH345', 'Topology', 'Mathematics', 6);

需要注意的一点就是,与删除相反,如果插入的属性涉及多个表,那么则需要先插入主表再插⼊入副表。
将行插入到关系表中的顺序非常重要!!
先主后副。

插入语句应该是SQL中最重要也是最常用的语句了,在后面的几篇文章我会着重介绍一下INSERT Statement的各种用法。

UPDATE Statement

UPDATE语句修改所有满足给定条件的行。

UPDATE语句修改的属性值可以通过ROLLBACK语句还原,除非UPDATE语句已经被COMMIT。

将’123、456和789课程的总学分改为12学分:

UPDATE COURSE
SET credits = 12
WHERE cnum IN ('123', '456', '789');

将主席的名字改为JFM,增加一名物理系的总成员。

UPDATE DEPARTMENT
SET chair = 'JFM',
total_staff_number = total_staff_number + 1
WHERE name = 'Physics';

UPDATE声明的顺序也很重要,同样,若没有CASCADE声明,则需要先更更新副表外键,再更更新主表相联键。

References

  1. T. Connoly, C. Begg, Database Systems, A Practical Approach to Design, Implementation, and Management, Chapter 6.3.10 Database Updates, Pearson Education Ltd, 2015.

  2. D. Darmawikarta, Oracle SQL : A Beginner’s Tutorial Brainy Software Inc. First Edition: June 2014.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值