关于数据操纵语言 (DML) 语句
数据操纵语言 (Data manipulation language,DML) 语句可访问和操作现有表中的数据。
在 SQL*Plus 环境中,可以在 SQL> 提示符后输入 DML 语句。
在 SQL Developer 环境中,可以在工作表中输入 DML 语句。或者,可以使用 SQL Developer Connections 框架和工具访问和操作数据。
要在 SQL Developer 中查看 DML 语句的效果,您可能需要在“Connections(连接)”框架中选择已更改对象的方案对象类型,然后单击“Refresh(刷新)”图标。
除非提交包含 DML 语句的事务处理,否则其效果不是永久性的。事务处理是 Oracle Database 将其视为一个单元的一系列 SQL 语句(可以是单个 DML 语句)。只有在提交事务处理之后,才能回退 (撤消) 该事物处理。有关事务处理的详细信息,请参阅“关于事务处理控制语句”。
另请参阅: Oracle Database SQL Language Reference 以了解有关 DML 语句的更多信息
关于 INSERT 语句
INSERT 语句可将行插入现有表。
建议使用的最简单的 INSERT 语句形式采用下列语法:
INSERT INTO table_name (list_of_columns)
VALUES (list_of_values);
list_of_columns 中的每一列必须在 list_of_values 中的相应位置具有有效值。因此,在向表插入行之前,您必须了解表所包含的列及其具体有效值。要使用 SQL Developer 获取此信息,请参见教程:使用 SQL Developer 查看 EMPLOYEES 表属性和数据。要使用 SQL*Plus 获取此信息,请使用 DESCRIBE 语句。例如:
DESCRIBE EMPLOYEES;
结果:
Name Null? Type
----------------------------------------- -------- ------------
EMPLOYEE_ID NOT NULL NUMBER(6)
FIRST_NAME VARCHAR2(20)
LAST_NAME NOT NULL VARCHAR2(25)
EMAIL NOT NULL VARCHAR2(25)
PHONE_NUMBER VARCHAR2(20)
HIRE_DATE NOT NULL DATE
JOB_ID NOT NULL VARCHAR2(10)
SALARY NUMBER(8,2)
COMMISSION_PCT NUMBER(2,2)
MANAGER_ID NUMBER(6)
DEPARTMENT_ID NUMBER(4)
示例 3-1 中的 INSERT 语句会向 EMPLOYEES 表插入一行,该表所对应的员工的所有列值都是已知的。
您无需知道所有列值也可将行插入表中,但必须知道所有 NOT NULL 列的值。如果您不了解可以为 NULL 的列的值,可以从 list_of_columns 中省略该列。其值默认为 NULL。
示例 3-2 中的 INSERT 语句会向 EMPLOYEES 表插入一行,该表所对应的员工除 SALARY 以外的所有列值都是已知的。目前,SALARY 可以具有值 NULL。如果您了解薪资,可以使用 UPDATE 语句更改该值(请参阅示例 3-4 )。
示例 3-3 中的 INSERT 语句尝试向 EMPLOYEES 表插入一行,该表所对应的 LAST_NAME 是未知的员工。
示例 3-1 在所有信息都可用的情况下使用 INSERT 语句
INSERT INTO EMPLOYEES (
EMPLOYEE_ID,
FIRST_NAME,
LAST_NAME,
EMAIL,
PHONE_NUMBER,
HIRE_DATE,
JOB_ID,
SALARY,
COMMISSION_PCT,
MANAGER_ID,
DEPARTMENT_ID
)
VALUES (
10, -- EMPLOYEE_ID
'George', -- FIRST_NAME
'Gordon', -- LAST_NAME
'GGORDON', -- EMAIL
'650.506.2222', -- PHONE_NUMBER
'01-JAN-07', -- HIRE_DATE
'SA_REP', -- JOB_ID
9000, -- SALARY
.1, -- COMMISSION_PCT
148, -- MANAGER_ID
80 -- DEPARTMENT_ID
);
结果:
1 row created.
示例 3-2 在所有信息都可用时使用 INSERT 语句
INSERT INTO EMPLOYEES (
EMPLOYEE_ID,
FIRST_NAME,
LAST_NAME,
EMAIL,
PHONE_NUMBER,
HIRE_DATE,
JOB_ID, -- Omit SALARY; its value defaults to NULL.
COMMISSION_PCT,
MANAGER_ID,
DEPARTMENT_ID
)
VALUES (
20, -- EMPLOYEE_ID
'John', -- FIRST_NAME
'Keats', -- LAST_NAME
'JKEATS', -- EMAIL
'650.506.3333', -- PHONE_NUMBER
'01-JAN-07', -- HIRE_DATE
'SA_REP', -- JOB_ID
.1, -- COMMISSION_PCT
148, -- MANAGER_ID
80 -- DEPARTMENT_ID
);
结果:
1 row created.
示例 3-3:错误地使用 INSERT 语句
INSERT INTO EMPLOYEES (
EMPLOYEE_ID,
FIRST_NAME, -- Omit LAST_NAME (error)
EMAIL,
PHONE_NUMBER,
HIRE_DATE,
JOB_ID,
COMMISSION_PCT,
MANAGER_ID,
DEPARTMENT_ID
)
VALUES (
20, -- EMPLOYEE_ID
'John', -- FIRST_NAME
'JOHN', -- EMAIL
'650.506.3333', -- PHONE_NUMBER
'01-JAN-07', -- HIRE_DATE
'SA_REP', -- JOB_ID
.1, -- COMMISSION_PCT
148, -- MANAGER_ID
80 -- DEPARTMENT_ID
);
结果:
ORA-01400: cannot insert NULL into ("HR"."EMPLOYEES"."LAST_NAME")
另请参见:
-
Oracle Database SQL Language Reference(了解有关 INSERT 语句的信息)
-
Oracle Database SQL Language Reference(了解有关数据类型的信息)
关于 UPDATE 语句
UPDATE 语句可更新一组现有表行(或更改其值)。
简单形式的 UPDATE 语句采用以下语法:
UPDATE table_name
SET column_name = value [, column_name = value]...
[ WHERE condition ];
每个值都必须对其 column_name 有效。如果包含 WHERE 子句,则此语句只会更新满足条件的行中的列值。
示例 3-4 中的 UPDATE 语句会更新插入示例 3-2 的 EMPLOYEES 表中的行中的 SALARY 列的值,然后才知道员工的薪金。
示例 3-5 中的 UPDATE 语句更新部门 80 中每个员工的佣金百分比。
示例 3-4 使用 UPDATE 语句添加数据
UPDATE EMPLOYEES
SET SALARY = 8500
WHERE LAST_NAME = 'Keats';
结果:
1 row updated.
示例 3-5:使用 UPDATE 语句更新多个行
UPDATE EMPLOYEES
SET COMMISSION_PCT = COMMISSION_PCT + 0.05
WHERE DEPARTMENT_ID = 80;
结果:
34 rows updated.
另请参见:
-
Oracle Database SQL Language Reference(了解有关 UPDATE 语句的信息)
-
Oracle Database SQL Language Reference(了解有关数据类型的信息)
关于 DELETE 语句
DELETE 语句可删除表中的行。
DELETE 语句的简单形式采用以下语法:
DELETE FROM table_name [ WHERE condition ];
如果包含 WHERE 子句,则此语句只会删除满足条件的行。如果省略 WHERE 子句,则此语句会删除表中的所有行,但空表仍存在。要删除表,请使用 DROP TABLE 语句。
Example 3-6 中的 DELETE 语句将删除在 Example 3-1 和 Example 3-2 中插入的行。
示例 3-6 使用 DELETE 语句
DELETE FROM EMPLOYEES
WHERE HIRE_DATE = TO_DATE('01-JAN-07', 'dd-mon-yy');
结果:
2 rows deleted.
另请参见:
-
Oracle Database SQL Language Reference(了解有关 DELETE 语句的信息)
-
Oracle Database SQL Language Reference(了解有关 DROP TABLE 语句的信息)