• Oracle DB 使用DDL语句创建和管理表


    • 对主要的数据库对象进行分类
    • 查看表结构
    • 列举列可以使用的数据类型
    • 创建简单的表
    • 说明创建表时如何创建约束条件
    • 描述方案对象如何工作

    • 数据库对象
    – 命名规则
    • CREATE TABLE语句:
    – 访问另一个用户的表
    – DEFAULT选项
    • 数据类型
    • 约束条件概览:NOT NULL、UNIQUE、PRIMARY KEY、
    FOREIGN KEY、CHECK约束条件
    • 使用子查询创建表
    • ALTER TABLE
    – 只读表
    • DROP TABLE语句

    • 数据库对象

    Oracle DB 可以包含多种数据结构。在数据库设计中应对每种结构加以概述,以便可在数据库开发的构建阶段创建数据库结构。
    • 表:用于存储数据
    • 视图:一个或多个表中数据的子集
    • 序列:用于生成数字值
    • 索引:提高某些查询的性能
    • 同义词:给出对象的替代名称
    Oracle 表结构
    • 在任何时候都可以创建表,即使用户正在使用数据库时也是如此。
    • 无需指定表的大小。表的大小最终由全部分配给数据库的空间量确定。但是,需要估计一个表将要使用的空间大小,这一点非常重要。
    • 可以联机修改表结构。

    • 命名规则
    表名和列名必须满足以下条件:
    • 以字母开头
    • 长度为1-30 个字符
    • 只包含A-Z、a-z、0-9、_、$ 和#
    • 不与同一用户拥有的其它对象重名
    • 不是Oracle Server 的保留字

    应根据命名任意Oracle DB 对象的标准规则来命名数据库表和列:
    • 表名和列名必须以字母开头,长度必须为1-30 个字符。
    • 名称中只能包含字符A-Z、a-z、0-9、_(下划线)、$ 和#(这两个字符是合法字符,但建议不要使用它们)。
    • 不能与同一Oracle Server 用户拥有的其它对象重名。
    • 不能是Oracle Server 的保留字。
    - 还可以使用加引号的标识符来表示对象名称。加引号的标识符以双引号(“”) 开始和结束。如果使用加双引号的标识符为方案命名,那么,只要引用该对象,就必
    须使用双引号。加引号的标识符可以是保留字,不过建议不要这样做。
    命名准则
    对于表和其它数据库对象,应使用描述性名称。
    注:名称不区分大小写,例如,EMPLOYEES与eMPloyees或eMpLOYEES被认为是同一名称。但是,加引号的标识符区分大小写。

    • CREATE TABLE语句
    • 必须具有以下项才能使用此语句:
    – CREATE TABLE权限
    – 一个存储区
    CREATE TABLE [schema.]table
    (column datatype[DEFAULT expr][, ...]);
    • 可以指定:
    – 表名称
    – 列名、列数据类型和列大小


    通过执行SQL CREATE TABLE语句可以创建用于存储数据的表。此语句是一条DDL 语句,DDL 语句是SQL 语句的子集,用于创建、修改或删除Oracle DB 结构。这些语句会对数据库产生直接的影响,它们还会在数据字典中记录信息。
    要创建一个表,用户必须具有CREATE TABLE权限和一个用于在其中创建对象的存储区。
    数据库管理员(DBA) 可以使用数据控制语言(DCL) 语句为用户授权。
    在该语法中:
    schema 与所有者的姓名相同
    table 是表名称
    DEFAULT expr 指定当INSERT语句中省略了值时所使用的默认值语句
    column 是列名称
    datatype 是列的数据类型和长度

    • 引用另一个用户的表
    • 在用户方案中没有属于其他用户的表。
    • 应使用所有者姓名作为那些表的前缀。


    方案是由数据或方案对象构成的一组逻辑结构。方案由数据库用户拥有,而且与该用户具有相同的名称。每个用户都拥有一个方案。
    方案对象可使用SQL 来创建和操作;方案对象包括表、视图、同义词、序列、存储过程、索引、集群和数据库链接。
    如果某个表不属于该用户,则必须将所有者的姓名作为该表的前缀。例如,假设存在名为USERA和USERB的两个方案,每个方案都有一个EMPLOYEES表,如果USERA要访问属于USERB的EMPLOYEES表,USERA就必须将USERB方案名作为该表名的前缀:
    SELECT * FROM userb.employees;
    如果USERB要访问属于USERA的EMPLOYEES表,USERB就必须将USERA的方案名作为该表名的前缀:
    SELECT * FROM usera.employees;

    • DEFAULT选项
    • 指定插入过程中列的默认值。
    ... hire_date DATE DEFAULT SYSDATE, ...
    • 文字值、表达式或SQL 函数都是合法值。
    • 其它列的名称或假列是非法值。
    • 默认数据类型必须与列的数据类型相匹配。

    CREATE TABLE hire_dates (id  NUMBER(8), hire_date DATE DEFAULT SYSDATE);

    在定义表时,可以使用DEFAULT选项指定列的默认值。当插入的行中没有某列的相应值时,使用此选项可以防止将空值输入到列中。默认值可以是文字值、表达式或SQL 函数(例如SYSDATE或USER),但是该值不能是其它列或假列的名称(例如NEXTVAL或CURRVAL)。默认表达式必须与列的数据类型相匹配。
    请看如下示例:
    INSERT INTO hire_dates values(45, NULL);
    以上语句将插入空值而非默认值。
    INSERT INTO hire_dates(id) values(35);
    以上语句将在HIRE_DATE列中插入SYSDATE。

    • 创建表
    • 创建表:
    CREATE TABLE dept
    (deptno  NUMBER(2),
    dname  VARCHAR2(14),
    loc  VARCHAR2(13),
    create_date DATE DEFAULT SYSDATE);
    • 确认表创建:
    DESCRIBE dept

    示例中创建的DEPT表包含以下四列:DEPTNO、DNAME、LOC和CREATE_DATE。
    CREATE_DATE列具有默认值。如果没有为INSERT语句提供值,则会自动插入系统日期。
    要确认该表是否已创建,请运行DESCRIBE命令。
    因为创建表的命令是一条DDL 语句,所以在执行该语句后会自动提交。
    注:可以通过查询数据字典来查看你拥有的表列表。例如:
    select table_name from user_tables
    使用数据字典视图,还可以查找有关其它数据库对象(例如视图、索引等)的信息。

    • 数据类型

    在指定表的列时,需要提供列的数据类型。下面是几种可用的数据类型:

    准则
    • 在使用子查询创建表时不复制LONG列。
    • 不能在GROUP BY或ORDER BY子句中包括LONG列。
    • 每个表只能使用一个LONG列。
    • 不能对LONG列定义约束条件。
    • 可以要求使用CLOB列,而不是LONG列。

    • 日期时间数据类型
    注:可以在Oracle9i和更高版本中使用这些日期时间数据类型。


    • 包括约束条件
    • 包括约束条件
    • 约束条件用于在表级别强制执行各种规则。
    • 约束条件用于防止在存在相关性时删除表。
    • 下列约束条件类型有效:
    – NOT NULL :指定该列不能包含空值
    – UNIQUE :定一个列或列组合的值对于表中的所有行必须是唯一的
    – PRIMARY KEY :唯一地标识表中的每一行
    – FOREIGN KEY :在该列和所引用表的列之间建立联系后强制实施引用完整性,这样其中一个表的值与另一个表中的值相匹配
    – CHECK :指定必须为真的条件

    Oracle Server 使用约束条件来防止将无效的数据输入到表中。
    可以使用约束条件完成以下任务:
    • 在表中插入、更新或删除某一行时,对表中的数据强制执行各种规则。必须满足约束条件,操作才会成功。
    • 防止当某个表与其它表存在相关性时删除该表。
    • 为Oracle 工具(例如Oracle Developer)提供规则。

    • 约束条件准则
    • 可以为约束条件命名,也可以由Oracle Server 使用SYS_Cn格式生成一个名称。
    • 可采用以下任何一种方式创建约束条件:
    – 创建表的同时创建约束条件
    – 创建表以后
    • 可以在列或表级别定义约束条件。
    • 可以在数据字典中查看约束条件。

    所有约束条件都存储在数据字典中。如果为约束条件指定了一个有意义的名称,则引用时较为容易。约束条件名称必须遵循标准对象命名规则,但是该名称不能与同一用户的另一对象名称相同。如果你没有对约束条件命名,Oracle Server 就会按照SYS_Cn格式生成一个名称,其中n是一个整数,这样约束条件名称是唯一的。
    既可以在创建表的同时定义约束条件,也可以在创建表之后定义约束条件。
    你可以在列级别或表级别定义约束条件。从功能上来说,表级别约束条件与列级别约束条件的作用是相同的。

    • 定义约束条件
    • 语法:
    CREATE TABLE [schema.]table
    (column datatype[DEFAULT expr] 
    [column_constraint],
    ... 
    [table_constraint][,...]);

    • 列级别约束条件语法:
    column[CONSTRAINT constraint_name] constraint_type,

    • 表级别约束条件语法:
    column,... 
    [CONSTRAINT constraint_name] constraint_type
    (column, ...),

    示例给出了在创建表时定义约束条件的语法。你可以在列级别或表级别创建约束条件。
    定义列时会包括在列级别定义的约束条件。在表定义结束时定义表级别约束条件,必须在一组括号中引用应用了约束条件的列或列组合。这二者主要在语法上有所不同;此外从功能上来说,列级别约束条件和表级别约束条件的作用是相同的。
    必须在列级别定义NOT NULL约束条件。
    必须在表级别定义适用于多个列的约束条件。
    在该语法中:
    schema :与所有者的姓名相同
    table :是表名称
    DEFAULT expr :指定当INSERT语句中省略了值时所使用的默认值
    column: 是列名称
    datatype :是列的数据类型和长度
    column_constraint:是作为列定义一部分的完整性约束条件
    table_constraint :是作为表定义一部分的完整性约束条件

    • 列级别约束条件示例:
    CREATE TABLE employees(
    employee_id NUMBER(6) CONSTRAINT emp_emp_id_pk PRIMARY KEY,
    first_name  VARCHAR2(20),
    ...);

    • 表级别约束条件示例:
    CREATE TABLE employees(
    employee_id NUMBER(6),
    first_name  VARCHAR2(20),
    ...
    job_id VARCHAR2(10) NOT NULL,
    CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID));

    通常会在创建表的同时创建约束条件。可以在创建表之后将约束条件添加到表,也可以临时禁用约束条件。
    示例中都对EMPLOYEES表的EMPLOYEE_ID列创建了主键约束条件。
    1.第一个示例使用列级别语法定义约束条件。
    2.第二个示例使用表级别语法定义约束条件。

    • NOT NULL约束条件
    NOT NULL约束条件可以确保某列不包含空值。默认情况下,没有NOT NULL约束条件的列可以包含空值。
    必须在列级别定义NOT NULL约束条件。
    在EMPLOYEES表中,EMPLOYEE_ID列继承了NOT NULL约束条件,因为该列已定义为主键。否则,在LAST_NAME、EMAIL、HIRE_DATE和JOB_ID列上强制实施NOT NULL约束条件。

    • UNIQUE约束条件
    UNIQUE关键字完整性约束条件要求一列或一组列(键)中的每个值必须是唯一的,即在指定的列或一组列中,表的任意两行无重复值。UNIQUE关键字约束条件的定义中包括的列(或一组列)被称为唯一关键字。如果UNIQUE约束条件由多个列组成,则该组列被称为组合唯一关键字。
    UNIQUE约束条件允许输入空值,除非你还为同一列定义了NOT NULL约束条件。实际上,因为空值被认为不等于任何值,所以任意数量的行都可以在没有NOT NULL约束条件的列中包括空值。一个列(或组合UNIQUE关键字的所有列)中的空值总是满足UNIQUE约束条件。
    注:由于多个列上UNIQUE约束条件的搜索机制所致,在部分空值组合UNIQUE关键字约束条件的非空列中不能有相同的值。

    可以在表级别或列级别定义:
    CREATE TABLE employees( 
    employee_id  NUMBER(6), 
    last_name  VARCHAR2(25) NOT NULL, 
    email  VARCHAR2(25), 
    salary  NUMBER(8,2), 
    commission_pct NUMBER(2,2), 
    hire_date  DATE NOT NULL, 
    ... 
    CONSTRAINT emp_email_uk UNIQUE(email)); 
    可以在列级别或表级别定义UNIQUE约束条件。如果要创建一个组合唯一关键字,则可在表级别定义该约束条件。如果不能使用单个属性来唯一地标识某一行,则需定义组合关键字。在这种情况下,可以创建由两个或两个以上列组成的唯一关键字,其组合值总是唯一的,可用于标识行。
    示例中将UNIQUE约束条件应用于EMPLOYEES表的EMAIL列。该约束条件的名称为EMP_EMAIL_UK。
    注:Oracle Server 通过对一个或多个唯一关键字列隐式创建一个唯一索引来强制实现UNIQUE约束条件。


    • PRIMARY KEY约束条件
    PRIMARY KEY约束条件用于创建创建表的主键。只能为每一个表创建一个主键。
    PRIMARY KEY约束条件是唯一标识表中每一行的一个列或一组列。此约束条件可以强制一个列或列组合是唯一的,还可以确保作为主键一部分的列不包含空值。
    注:因为唯一性是主键约束条件定义的一部分,所以Oracle Server 通过对一个或多个主键列隐式创建一个唯一索引来强制实现唯一性。


    • FOREIGN KEY约束条件
    FOREIGN KEY(或引用完整性)约束条件指定一个列或列组合作为外键,并建立与同一表或不同表中主键或唯一关键字的关系。
    示例中,DEPARTMENT_ID已被定义为EMPLOYEES表(相关表或子表)中的外键,它引用DEPARTMENTS表(被引用表或父表)的DEPARTMENT_ID列。
    准则
    • 外键值必须与父表中的现有值相匹配,或为NULL。
    • 外键取决于数据值,外键是纯逻辑指针,而不是物理指针。
    可以在表级别或列级别定义:
    CREATE TABLE employees( 
    employee_id NUMBER(6), 
    last_name VARCHAR2(25) NOT NULL, 
    email VARCHAR2(25), 
    salary NUMBER(8,2), 
    commission_pct NUMBER(2,2), 
    hire_date DATE NOT NULL, 
    ... 
    department_id NUMBER(4), 
    CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) 
    REFERENCES departments(department_id), 
    CONSTRAINT emp_email_uk UNIQUE(email));

    可以在列级别或表级别定义FOREIGN KEY约束条件。必须使用表级别定义来创建组合外键。
    示例中使用表级别语法,对EMPLOYEES表的DEPARTMENT_ID列定义一个FOREIGN KEY约束条件。该约束条件的名称为EMP_DEPT_FK。
    如果约束条件只是针对单个列,则也可以在列级别定义外键。语法上的不同之处在于没有出现关键字FOREIGN KEY。例如:
    CREATE TABLE employees 
    (... 
    department_id NUMBER(4) CONSTRAINT emp_deptid_fk 
    REFERENCES departments(department_id), 
    ... 

    • FOREIGN KEY约束条件:关键字

    外键是在子表中定义的,而包含被引用列的表是父表。外键是使用以下关键字的组合定义的:
    • FOREIGN KEY用于在表约束条件级别定义子表中的列。
    • REFERENCES用于标识父表中的表和列。
    • ON DELETE CASCADE指出在删除父表中的行时,还删除子表中的相关行。
    • ON DELETE SET NULL指出在删除父表中的行时,将外键值设为空值。
    默认行为被称为限制规则,该规则可禁止更新或禁止删除被引用的数据。
    在没有ON DELETE CASCADE或ON DELETE SET NULL选项时,如果在子表中引用父表中的一行,则不能删除该行。

    • CHECK约束条件
    • 定义每行都必须满足的一个条件
    • 以下表达式是不允许的:
    – 引用CURRVAL、NEXTVAL、LEVEL和ROWNUM假列的表达式
    – 调用SYSDATE、UID、USER和USERENV函数的表达式
    – 引用其它行中的其它值的查询
    ..., salary NUMBER(2)
    CONSTRAINT emp_salary_min CHECK (salary> 0),... 

    CHECK约束条件用于定义每行都必须满足的一个条件。该条件可以使用与查询条件相同的结构,但是以下项除外:
    • 引用CURRVAL、NEXTVAL、LEVEL和ROWNUM假列的表达式
    • 调用SYSDATE、UID、USER和USERENV函数的表达式
    • 引用其它行中的其它值的查询
    一个列可以有多个CHECK约束条件,这些约束条件将在其定义中引用该列。可以按需要,对一个列定义任意数量的CHECK约束条件。
    可以在列级别或表级别定义CHECK约束条件。
    CREATE TABLE employees
    (...
    salary NUMBER(8,2) CONSTRAINT emp_salary_min CHECK (salary > 0),
    ... 

    示例中显示用于创建HR方案中EMPLOYEES表的语句
    CREATE TABLE employees
    ( employee_id NUMBER(6)
    CONSTRAINT emp_employee_id PRIMARY KEY
    , first_name VARCHAR2(20)
    , last_name VARCHAR2(25)
    CONSTRAINT emp_last_name_nn NOT NULL
    , email VARCHAR2(25)
    CONSTRAINT emp_email_nn NOT NULL
    CONSTRAINT emp_email_uk UNIQUE
    , phone_number VARCHAR2(20)
    , hire_date DATE
    CONSTRAINT emp_hire_date_nn NOT NULL
    , job_id VARCHAR2(10)
    CONSTRAINT emp_job_nn NOT NULL
    , salary NUMBER(8,2)
    CONSTRAINT emp_salary_ck CHECK (salary>0)
    , commission_pct NUMBER(2,2)
    , manager_id NUMBER(6)
    CONSTRAINT emp_manager_fk REFERENCES
    employees (employee_id)
    , department_id NUMBER(4)
    CONSTRAINT emp_dept_fk REFERENCES
    departments (department_id));

    通过以下查询表中哪列有哪些约束,上面创建表的语句对应下面的约束。
    hr@TEST0924> l
      1  select a.owner,a.TABLE_NAME,b.COLUMN_NAME,a.CONSTRAINT_NAME,a.CONSTRAINT_TYPE,a.SEARCH_CONDITION
      2  from USER_CONSTRAINTS a,USER_CONS_COLUMNS b
      3* where a.CONSTRAINT_NAME=b.CONSTRAINT_NAME and A.table_name='EMPLOYEES'
    hr@TEST0924> /

    OWNER      TABLE_NAME                     COLUMN_NAM CONSTRAINT_NAME                C SEARCH_CONDITION
    ---------- ------------------------------ ---------- ------------------------------ - --------------------
    HR         EMPLOYEES                      SALARY             EMP_SALARY_MIN                     C     salary > 0
    HR         EMPLOYEES                      EMAIL              EMP_EMAIL_UK                       U
    HR         EMPLOYEES                      EMPLOYEE_ID     EMP_EMP_ID_PK                  P                                        
    HR         EMPLOYEES                      DEPARTMENT_ID EMP_DEPT_FK                        R                                   
    HR         EMPLOYEES                      JOB_ID            EMP_JOB_FK                                 R
    HR         EMPLOYEES                      MANAGER_ID     EMP_MANAGER_FK                 R
    HR         EMPLOYEES                      LAST_NAME      EMP_LAST_NAME_NN               C     "LAST_NAME" IS NOT NULL
    HR         EMPLOYEES                      EMAIL              EMP_EMAIL_NN                       C         "EMAIL" IS NOT NULL
    HR         EMPLOYEES                      HIRE_DATE      EMP_HIRE_DATE_NN               C     "HIRE_DATE" IS NOT NULL
    HR         EMPLOYEES                      JOB_ID             EMP_JOB_NN                             C                 "JOB_ID" IS NOT NULL

    10 rows selected.

    • 违反约束条件
    当对列设置了约束条件后,如果试图违反约束条件规则,则会返回一条错误。例如,如果尝试更新一条记录,但该记录中的值受完整性约束条件所约束,则会返回一条错误。示例中,因为父表DEPARTMENTS中不存在部门55,所以你会收到违例ORA-02291“parent key not found(未找到父关键字)”。

    hr@TEST0924> update employees set department_id=55 where department_id=110;
    update employees set department_id=55 where department_id=110
    *
    ERROR at line 1:
    ORA-02291: integrity constraint (HR.EMP_DEPT_FK) violated - parent key not found

    如果某行中包含用作其它表中的外键的主键,则不能删除该行。
    hr@TEST0924> delete from departments where department_id=60;
    delete from departments where department_id=60
    *
    ERROR at line 1:
    ORA-02292: integrity constraint (HR.EMP_DEPT_FK) violated - child record found

    如果试图删除一条记录,但该记录中的值受完整性约束条件所约束,则会返回一条错误。
    示例中试图从DEPARTMENTS表中删除部门60,但此操作导致一个错误,因为该部门编号已用作EMPLOYEES表中的外键。如果试图删除具有子记录的父记录,则会收到违例ORA-02292“child record found(存在子记录)”。
    由于部门210 中没有任何雇员,因此下面的语句有效:
    hr@TEST0924> delete from departments where department_id=210;

    1 row deleted.

    • 使用子查询创建表
    • 通过组合CREATE TABLE语句和AS subquery选项
    可以创建表并插入行。
    CREATE TABLE table
    [(column, column...)]
    AS subquery;
    • 使指定列的数量与子查询列的数量相匹配。
    • 定义具有列名和默认值的列。

    创建表的另一种方法是应用AS subquery子句,该方法既可以创建表,又可以将子查询返回的行插入表中。
    在该语法中:
    table 是表名称
    column 是列的名称、默认值和完整性约束条件
    subquery 是一条SELECT语句,用于定义要插入到新表中的一组行
    准则
    • 使用指定的列名创建一个表,然后将SELECT语句检索到的那些行插入到该表中。
    • 列定义只能包含列名和默认值。
    • 如果已经给出列的规格,则列数必须等于子查询SELECT列表中的列数。
    • 如果没有给出列的规格,则表的列名与子查询中的列名相同。
     列数据类型定义和NOT NULL约束条件会传递到新表中,请注意,只会继承显式NOT NULL约束条件。PRIMARY KEY列不会将NOT NULL特性传递给新列。任何其它约束条件规则也不会传递到新表中。但是,你可以在列定义中添加约束条件。

    • 使用子查询创建表

    CREATE TABLE dept80
    AS
    SELECT employee_id, last_name,salary*12 ANNSAL,hire_date FROM employees WHERE department_id = 80;

    DESCRIBE dept80

    示例中创建了一个名为DEPT80的表,该表包含在部门80 中工作的所有雇员的详细资料。请注意,DEPT80表中的数据来自EMPLOYEES表。
    可以使用DESCRIBE命令验证数据库表的存在,并检查列定义。
    但是,在选择表达式时请务必提供列别名。表达式SALARY*12被赋予了别名ANNSAL。
    如果没有别名,系统就会生成以下错误:
    hr@TEST0924> CREATE TABLE dept80
      2  as
      3  SELECT employee_id, last_name,salary*12 ,hire_date FROM employees WHERE department_id = 80;SELECT employee_id, last_name,salary*12 ,hire_date FROM employees WHERE department_id = 80
                                        *
    ERROR at line 3:
    ORA-00998: must name this expression with a column alias

    • ALTER TABLE语句
    使用ALTER TABLE语句可:
    • 添加新列
    • 修改现有列定义
    • 定义新列的默认值
    • 删除列
    • 重命名列
    • 将表的状态更改为“只读”

    在创建表之后,可能会因以下原因而需要更改表结构:
    • 省略了某列。
    • 列定义或列名需要更改。
    • 需要删除列。
    • 要将表设置为“只读”模式。
    可以使用ALTER TABLE语句完成此任务。

    • 只读表
    可以使用ALTER TABLE语法执行下列操作:
    • 将表置于只读模式,从而阻止在维护表过程中进行DDL 或DML 更改
    • 将表重新置于读/写模式
    ALTER TABLE employees READ ONLY;
    -- 执行表维护,然后再将表改回读/写模式
    ALTER TABLE employees READ WRITE;

    在Oracle Database 11g中,可以通过指定READ ONLY将表设置为“只读”模式。当表处于READ-ONLY模式时,用户不能发出可对表造成影响的任何DML 语句或任何SELECT ... FOR UPDATE语句。可以发出DDL 语句,但前提条件是不对表中的任何数据进行修改。当表处于READ ONLY模式时,可以对与表关联的索引执行操作。
    指定READ/WRITE,可令处于“只读”模式的表返回“读/写”模式。
    注:可以删除处于READ ONLY模式的表。DROP命令只能在数据字典中执行,因此无需访问表内容。在表空间返回“读/写”状态之前,系统不会回收表使用的空间,此时可对块段头进行必要的更改。

    • 删除表
    • 将表移至回收站
    • 如果指定了PURGE子句,则可将表及其所有数据全部删除
    • 使从属对象失效并删除表的对象权限
    DROP TABLE dept80;

    使用DROP TABLE语句可以将表移至回收站或从数据库中全部删除该表及其所有数据。
    如果不指定PURGE子句,DROP TABLE语句就不会将使用的空间重新释放到表空间中供其它对象使用,而且该空间会继续视为用户的空间限额。删除表会使从属对象失效并删除表的对象权限。
    删除表后,在数据库中会失去表的所有数据以及与表关联的所有索引。
    语法
    DROP TABLE table [PURGE]
    在该语法中,table是表的名称。
    准则
    • 删除表中的所有数据。
    • 保留视图和同义词,但不再有效。
    • 提交所有待定的事务处理。
    • 只有表的创建者或具有DROP ANY TABLE权限的用户才能删除表。
    注:使用FLASHBACK TABLE语句可从回收站中还原已删除的表。
  • 相关阅读:
    Unix系统编程(四)creat系统调用
    Unix系统编程(三)通用的I/O
    Unix系统编程(二)open的练习
    FTP协议的粗浅学习--利用wireshark抓包分析相关tcp连接
    Linux上的ftp服务器 vsftpd 之配置满天飞--设置匿名用户访问(不弹出用户名密码框)以及其他用户可正常上传
    intelj idea编译项目报错,Error:ajc: The method getDestHost() is undefined
    oracle索引优化
    wireshark 表达式备忘录
    rabbitmq日志记录进出的每条消息
    powerDesigner根据sql脚本来逆向生成pdm等模型
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13316829.html
Copyright © 2020-2023  润新知