数据处理
一、 DML(Data Manipulation Language — 数据操纵语言)
1. 插入数据(INSERT)
为每一列添加一个新值。
按列的默认顺序列出各个列的值。
在 INSERT 子句中随意列出列名和他们的值。
字符和日期型数据应包含在单引号中。
(1) 插入指定的值
(2) 自动插入空值
在表中包含的列名,而未在INSERT 子句中列出的列名,会在该列插入空值,如下:
在departments表中共有四列,而在INSERT 子句中只列出了两列,另外两列会自动插入空值,如下:
(3) 创建脚本
在SQL语句中使用&变量指定列值。
&变量放在VALUES子句中。
会弹出变量窗口,在对应的列名下输入指定的值,可在该表中插入指定的值。
(4) 插入基于其它表中的数据
在INSERT语句中加入子查询。
不必书写VALUES子句。
子查询中的值列表应与 INSERT子句中的列名对应。
2. 更新数据(UPDATE)
使用 UPDATE 语句更新数据。
可以一次更新多条数据。
(1) 更新指定的值
使用 WHERE 子句指定需要更新的数据。
如果省略 WHERE 子句,则SET中指定列的所有数据都将被更新。
(2) 更新基于其他表中的数据
在 UPDATE 中使用子查询,使更新基于另一个表中的数据。
(3) 更新数据完整性错误
因为employees表通过department_id与父表departments连接,而在父表departments的department_id列没有55,所以更新出错。
3. 删除数据(DELETE)
使用 DELETE语句删除数据。
可以一次删除多条数据。
(1) 删除指定的记录
使用WHERE子句删除指定的记录。
DELETE FROM departments
WHERE department_name = 'Finance';
如果省略WHERE子句,则会清空表。
DELETE FROM departments;
(2) 删除基于其他表中的数据
在 DELETE 中使用子查询,使删除基于另一个表中的数据。
DELETE FROM emp1
WHERE department_id =
(SELECT department_id
FROM dept1
WHERE department_name LIKE '%Public%');
(3) 删除数据完整性错误
因为departments是employees通过department_id连接的父表,而在子表employees中的department_id列有60,所以删除出错。
二、 DCL(Data Control Language — 数据控制语言)
1. COMMIT(提交)
① 数据的改变已经被保存到数据库中。
② 改变前的数据已经丢失。
③ 所有用户可以看到结果。
④ 锁被释放,其他用户可以操作涉及到的数据。
⑤ 所有保存点被释放。
当执行DML语句时,左上角的提交与回滚会显示。
点击左上角的提交(F10)或执行以下语句皆可以提交(保存到数据库)。
COMMIT;
2. ROLLBACK(回滚)
① 数据改变被取消。
② 修改前的数据状态被恢复。
③ 锁被释放。
当执行DML语句时,左上角的提交与回滚会显示。
点击左上角的回滚(Shift+F10)或执行以下语句皆可以回滚(变化失效)。
ROLLBACK;
3. SAVEPOINT(保存点)
① 使用 SAVEPOINT 语句在当前事务中创建保存点。
② 使用 ROLLBACK TO SAVEPOINT 语句回滚到创建的保存点。
三、 使用DML语句注意
① 会话异常结束或系统异常会导致自动回滚。
② 其他用户不能看到当前用户所做的改变,直到当前用户结束事务。
③ DML语句所涉及到的行被锁定, 其他用户不能操作。