《Oracle SQL疑难解析》——1.4 在表中添加记录行

    xiaoxiao2024-01-31  138

    本节书摘来自异步社区出版社《Oracle SQL疑难解析》一书中的第1章,第1.4节,作者: 【美】Grant Allen , Bob Bryla , Darl Kuhn,更多章节内容可以访问云栖社区“异步社区”公众号查看。

    1.4 在表中添加记录行

    Oracle SQL疑难解析

    1.4.1 要解决的问题

    要在表中添加几行数据,例如,当一个新员工加入公司时,我们需要把员工信息添加到HR.EMPLOYEES表中。

    1.4.2 解决方法

    使用INSERT语句向表中添加数据。添加时,需要提供每列(强制列和可选列)的值,下面是添加新员工信息的一条语句:

    insert into hr.employees (employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id) values (207, 'John ', 'Doe ', 'JDOE ', '650.555.8877 ', '25-MAR-2009 ', 'SA_REP ', 3500, 0.25, 145, 80);

    1.4.3 数据库如何工作

    INSERT语句后面跟着各个字段名和各字段对应的值,它把对应的字段名和值对应后,形成行记录,然后插入目标表中。

    Oracle会检查NULL值约束、主键、外键及其他约束来确保插入数据的完整性。第10章会介绍在表上定义约束的技巧,以及表上的约束如何影响新数据的插入。

    我们可以通过表的描述来查看哪些字段是MANDATORY,定义为非空。方法是在SQL Developer 中或用SQL*Plus的DESCRIBE命令,这个命令也可缩写为DESC。例如:

    desc hr.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) 11 rows selected

    在使用INSERT语句时,如果把每列的值都按它们在当前表定义中的排列顺序(用DESC查看表得到的顺序)提供,那么也可以省略在语句中列出字段名,示例如下:

    在INSERT语句中省略字段名的做法,非常少见,也有很大的风险,除非有什么的特殊的理由,不然就别这么做,别把你的SQL语句搞得太脆弱,因为无法预知在何时表的结构会发生变化。举例来说,如果将来有人重建表,而且表中的字段排列顺序发生改变,碰巧你的INSERT语句通过字段类型和其他约束性检查,你就在没有错误提示的情况下,把数据写入了表中错误的字段,那将是场灾难。所以,强烈建议在写INSERT语句时,一定要指定字段名。

    相关资源:Oracle数据库精讲与疑难解析part1
    最新回复(0)