资源预览内容
第1页 / 共48页
第2页 / 共48页
第3页 / 共48页
第4页 / 共48页
第5页 / 共48页
第6页 / 共48页
第7页 / 共48页
第8页 / 共48页
第9页 / 共48页
第10页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
2020/8/30,厦门大学计算机系工程硕士教材,1,第四节 SQL基础-修改数据,通过本节学习,需要掌握: 在表格中增加数据 修改表格数据 删除表格数据 提交数据变更和回退操作,2020/8/30,厦门大学计算机系工程硕士教材,2,数据修改语言(DML),DML (Data Manipulation Language)是SQL的核心部分,用于 在表格中插入数据 更新表格数据 删除表格数据 一组DML语句构成了一个逻辑整体,称为事务(transaction)。为了保证数据的有效性,当事务中任意一个语句执行失败,都应当停止其他语句的执行。,2020/8/30,厦门大学计算机系工程硕士教材,3,第四节 SQL基础-修改数据,在表格中增加数据 修改表格数据 删除表格数据 提交数据变更和回退操作,2020/8/30,厦门大学计算机系工程硕士教材,4,在表中增加一行记录,新增行,DEPT,DEPT,在DEPT表中新增一行记录,2020/8/30,厦门大学计算机系工程硕士教材,5,INSERT语句,可以在表中增加记录。 INSERT INTOtable (column , column ) VALUES(value , value ); 上述语法中,一次只能增加一行记录。 如果省略column,必须按照表格里字段的顺序构造value。否则按column的顺序。建议INSERT语句中写column部分。 字符型或者日期型的值必须带单引号。,2020/8/30,厦门大学计算机系工程硕士教材,6,INSERT INTOdept(deptno, dname, loc) VALUES(50, DEVELOPMENT, DETROIT); 1 row created. 可以先使用DESCRIBE语句查看表结构 DESC dept,2020/8/30,厦门大学计算机系工程硕士教材,7,INSERT语句中的NULL值,隐式方法:省略赋NULL值的字段 INSERT INTOdept (deptno, dname) VALUES(60, MIS); 1 row created. 显示方法:指定字段的值为NULL。如果字段类型是字符型或者日期型,也可以指定为(空串)。 INSERT INTOdept VALUES(70, FINANCE, NULL); 1 row created.,2020/8/30,厦门大学计算机系工程硕士教材,8,INSERT语句中的NULL值(2),NOT NULL的字段不可以赋NULL值 INSERT语句中如果存在column部分,未被枚举的字段在新生成的行中的值都为NULL INSERT INTOemp(empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES(7196, GREEN, SALESMAN, 7782, SYSDATE, 2000, NULL, 10); SYSDATE表示当前日期和时间,USER表示当前登录数据库的用户名。,2020/8/30,厦门大学计算机系工程硕士教材,9,INSERT语句,增加一个员工 INSERT INTOemp VALUES(2296, AROMANO, SALESMAN, 7782, TO_DATE(FEB 3, 08, MON DD, YY), 1300, NULL, 10); 验证 SELECT* FROMemp WHEREempno = 2296;,缺省时间是0点,2020/8/30,厦门大学计算机系工程硕士教材,10,INSERT语句的替换变元(1),INSERT INTOdept (deptno, dname, loc) VALUES( Enter value for department_id: 80 Enter value for department_name: EDUCATION Enter value for location: ATLANTA 1 row created.,2020/8/30,厦门大学计算机系工程硕士教材,11,INSERT语句的替换变元(2),ACCEPT department_id PROMPT Please enter the -department number: ACCEPT department_name PROMPT Please enter the - department name: ACCEPT location PROMPT Please enter the location: INSERT INTOdept (deptno, dname, loc) VALUES( Please enter the department number: 90 Please enter the department name: PAYROLL Please enter the location: HOUSTON 1 row created.,一条SQL*Plus指令换行的时候要用-连接起来,2020/8/30,厦门大学计算机系工程硕士教材,12,INSERT语句使用已有表格数据,INSERT INTO table column (, column) subquery; 不需要使用value子句 SELECT子查询中字段的数量和顺序需要和INSERT子句中的相同。字段名称不一定相同。,2020/8/30,厦门大学计算机系工程硕士教材,13,INSERT INTOmanagers(id, name, salary, hiredate) SELECTempno, ename, sal, hiredate FROMemp WHEREjob = MANAGER; 3 rows created.,2020/8/30,厦门大学计算机系工程硕士教材,14,第四节 SQL基础-修改数据,在表格中增加数据 修改表格数据 删除表格数据 提交数据变更和回退操作,2020/8/30,厦门大学计算机系工程硕士教材,15,修改表数据,EMP,EMP,更新EMP表中的一行记录,2020/8/30,厦门大学计算机系工程硕士教材,16,UPDATE语句,可以在表中修改已有的记录。 UPDATEtable SETcolumn = value , column = value WHEREcondition; 上述语法中,一次可以更新多行记录。 通常情况下,使用主键(pk)来确定要更新的记录,除非你确定不会意外地更新一些不需要更新的记录。比如,如果使用员工名字来确定记录就是比较不可靠的,因为可能存在重名。,2020/8/30,厦门大学计算机系工程硕士教材,17,使用WHERE子句的时候,表格中由condition确定的记录被更新。 UPDATEemp SETdeptno = 20 WHEREempno = 7782; WHERE子句被省略的时候,表格中的所有记录都被更新。 UPDATEemp SETdeptno = 20;,2020/8/30,厦门大学计算机系工程硕士教材,18,UPDATE语句使用已有表格数据,UPDATEtable SET(column, column, ) = (SELECTcolumn, column, FROMtable WHEREcondition) WHEREcondition;,2020/8/30,厦门大学计算机系工程硕士教材,19,修改7698号员工的职业和部门,使得与7499号员工一致。 UPDATEemp SET(job, deptno) = (SELECTjob, deptno FROMemp WHEREempno = 7499) WHEREempno = 7698;,2020/8/30,厦门大学计算机系工程硕士教材,20,假设employee表和emp表具有相同的数据 把所有和7788号员工相同职业的员工的部门号设置与7788号相同。 UPDATEemployee SETdeptno =(SELECTdeptno FROMemp WHEREempno = 7788) WHEREjob =(SELECTjob FROMemp WHEREempno = 7788); 2 rows updated.,2020/8/30,厦门大学计算机系工程硕士教材,21,UPDATE语句引发的错误,如果更新的字段涉及到完整性约束,UPDATE将可能执行失败。 UPDATEemp SETdeptno = 55 WHEREdeptno = 10; UPDATE emp * ERROR at line 1: ORA-02291: integrity constraint (USR.EMP_DEPTNO_FK) violated parent key not found DEPT表中的deptno字段在EMP表中被当作外键使用。deptno=55不存在于DEPT表中,故在EMP表中不能随意更新。,2020/8/30,厦门大学计算机系工程硕士教材,22,第四节 SQL基础-修改数据,在表格中增加数据 修改表格数据 删除表格数据 提交数据变更和回退操作,2020/8/30,厦门大学计算机系工程硕士教材,23,删除表数据,DEPT,DEPT,在DEPT表中删除一行记录,2020/8/30,厦门大学计算机系工程硕士教材,24,DELETE语句,可以在表中删除已有的记录。 DELETE FROMtable WHEREcondition; 上述语法中,一次可以删除多行记录。 类似UPDATE语句,使用主键(pk)来确定要删除的记录,除非你确定不会意外地删除一些不需要删除的记录。,2020/8/30,厦门大学计算机系工程硕士教材,25,使用WHERE子句的时候,表格中由condition确定的记录被删除。 DELETE FROMdept WHEREdname = DEVELOPMENT; WHERE子句被省略的时候,表格中的所有记录都被删除。当需要删除一张大表的所有数据时,不建议用这种方法。合适的方法后面的章节会介绍。 DELETE FROMdept;,2020/8/30,厦门大学计算机系工程硕士教材,26,DELETE语句使用已有表格数据,DELETEtable WHERE(column, column, ) = (SELECTcolumn, column, FROMtable WHEREcondition);,2020/8/30,厦门大学计算机系工程硕士教材,27,删除所有SALES部门的员工记录。 DELETE FROMemp WHEREdeptno = (SELECTdeptno FROMdept WHEREdname = SALES);,2020/8/30,厦门大学计算机系工程硕士教材,28,DELETE语句引发的错误,如果删除的字段涉及到完整性约束,DELETE将可能执行失败。 DELETE FROMdept WHEREdeptno = 10; DELETE FROM dept * ERROR at line 1: ORA-02292: integrity constraint (USR.EMP_DEPTNO_FK) violated child record found DEPT表中的deptno字段在EMP表中被当作外键使用。 EMP表中存在deptno=10的记录,故在DEPT表中不能被删除。,2020/8/30,厦门大学计算机系工程硕士教材,29,第四节 SQL基础-修改数据,在表格中增加数据 修改表格数据 删除表格数据 提交数据变更和回退操作,2020/8/30,厦门大学计算机系工程硕士教材,30,数据库事务(transaction),ORACLE数据库通过事务来保证数据一致性,即使是在用户退出或者系统强行关闭。 事务中包含了一组DML语句,并保证数据变化的一致性。形象地,在两个账户间转账包含了一个账户的入账和另一个账户的出账。这两个动作要么同时成功,要么同时
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号