


数据操纵语句(DML)是在数据库上添加、更新,删除、合并数据时使用的,主要包括 INSERT 语句、UPDATE 语句和 DELETE 语句三个大类,今天我们先来学习一下 INSERT 语句
INSERT 语句用于向已有表中插入新数据。具体来说在新插入的行中,要指明表中全部的列或指定的若干列的数据。所以预先了解目标表的数据结构非常重要

DESC 指令
SQL> DESC EMPName Type Nullable Default Comments-------- ------------ -------- ------- --------EMPNO NUMBER(4)ENAME VARCHAR2(10) YJOB VARCHAR2(9) YMGR NUMBER(4) YHIREDATE DATE YSAL NUMBER(7,2) YCOMM NUMBER(7,2) YDEPTNO NUMBER(2) Y
上述表结构信息中除了列备注外的关键信息都可在 Oracle 数据字典 USER_TAB_COLUMNS(或 ALL_TAB_COLUMNS 或 DBA_TAB_COLUMNS)视图中检索到。数据字典包含 Oracle 数据库中大量的记录数据库对象信息的视图,它们都非常有用,我们将在课程中合适的时候不断接触到
SQL> SELECT c.column_name2 ,c.data_type3 ,CASE4 WHEN c.data_type IN ('VARCHAR2', 'CHAR', 'DATE') THEN5 c.data_length6 ELSE7 c.data_precision8 END data_length9 ,c.data_scale10 ,c.nullable11 ,c.data_default12 FROM user_tab_columns c13 WHERE c.table_name = 'EMP'14 ORDER BY c.column_id;COLUMN_NAM DATA_TYPE DATA_LENGTH DATA_SCALE NULLABLE DATA_DEFAULT---------- ---------- ----------- ---------- -------- ---------------EMPNO NUMBER 4 0 NENAME VARCHAR2 10 YJOB VARCHAR2 9 YMGR NUMBER 4 0 YHIREDATE DATE 7 YSAL NUMBER 7 2 YCOMM NUMBER 7 2 YDEPTNO NUMBER 2 0 Y8 rows selected


单行插入
VALUES(value1, value2...);
INSERT INTO emp(empno, ename, job, mgr, hiredate, sal, comm, deptno)VALUES('6666', 'YUSUF', 'ANALYST', '7782', '25-7月-21', 3000, NULL, '10');
插入后结果,查询表 EMP 内容

这里需要留意的几点规则有:
VALUES 部分中的列值要和前面指定的列名位置上一一对应。表名后的字段列表是可以省略的,这时表示语句涵盖表中所有的列,后面的 VALUES 部分也应按照全表字段的顺序一一列出值来。请注意,省略列名列表的写法是极不推荐的
VALUES 部分中的列值要和前面指定的列名数据类型一一对应。字符串内容应当以单引号括起来;至于日期类型的值,要么以数据库设置的默认日期时间格式的字符串表示,要么使用 TO_DATE 函数得到
SQL> SELECT *2 FROM v$nls_parameters3 WHERE parameter IN4 ('NLS_DATE_FORMAT', 'NLS_DATE_LANGUAGE', 'NLS_TIME_FORMAT');PARAMETER VALUE-------------------- --------------------NLS_DATE_FORMAT DD-MON-RRNLS_DATE_LANGUAGE SIMPLIFIED CHINESENLS_TIME_FORMAT HH.MI.SSXFF AM
如上查询中我们看到当前数据库默认的日期格式为“DD-MON-RR”,所以在前面的示例语句中,插入 HIREDATE 列的值写作'25-7月-21',这种情况下数据库能够将这个字符串隐默地转换成为日期数据


引用插入
SELECT expr1, expr2...
FEOM table_b
[<more SELECT staement components>]
INSERT INTO emp(empno, ename, job, mgr, hiredate, sal, deptno)SELECT empno, ename, job, mgr, hiredate, sal, deptno FROM emp_temp;
插入后结果,查询表 EMP


插入空值
显式插入空值:指在 VALUES 部分中,对应要插入空值的列位置处,明示 NULL 值。例如前文例 1 中,就明示了要将 NULL 值插入到 COMM 列
隐式插入空值:指在列名列表中故意不提及某些列,以暗示数据库将 NULL 值插入它们。例如前文例 2 中,列名列表中没有 COMM 列,这表示想要将 NULL 值插入其中(更准确的讲,是语句不指示将什么数据插入 COMM 列中)

事务






