1.创建Oracle数据表
创建oracle数据表的语法如下:
create table命令用于创建一个oracle数据表;括号内列出了数据表应当包含的列及列的数据类型;tablespace则指定该表的表空间。
创建数据表students。
在该创建语句中,依次定义了student_id、student_name、student_age、status及version等列;tablespace users表示将表创建于表空间users中。
通过视图user_tables可以获得当前用户所拥有的表信息,利用如下sql语句可以查看表student的表空间信息。
在oracle的sql命令行下,可以利用describe命令来查看已有数据表的表结构,如下所示。
2.数据表的相关操作
数据表创建之后,由于某些原因,例如,设计时的考虑不足,往往需要对其进行结构上的调整。常见的调整包括,增加新列、修改已有列、删除、重命名已有列。另外,还可以转移数据表的表空间。
修改数据表结构应当使用alter table命令。例如,在表student中,增加新列class_id(班级ID)的sql语句如下图所示。
alter table student 用于修改表student的结构;add用于增加列,注意此处没有collumn关键字;小括号内是列及列的数据类型;用户可以一次性为表增加多个列,各列之间使用逗号进行分隔。
在修改成功之后,表student的结构如下所示。
利用alter命令将class_id的数据类型修改为varchar2(20)。
modify(class_id varchar2(20))用于修改表student中的已有列class_id,实际相当于重新定义。该列新的数据类型为varchar2(20)。此时表student的结构如下:
通过modify选项可以将列的类型重新定义,而通过drop选项则删除已有列,如下所示。
drop column class_id用于删除已有列class_id;需要注意的是,此处必须添加column选项,才能表示删除的目标是一个列。此时,表student的结构已经修改如下:
对于数据表的列,除了增、删、改操作之外,还可以进行重命名操作。重命名一个列,应该使用rename选项。例如,为了与其他数据表进行统一,需要将表student的列student_id重命名为id,则可以利用如下sql语句。
rename column student_id to id用于将列student_id重命名为id。此时,表student的结构如下所示。
对于调整数据表结构来说,要特别注意严谨性。列的数据类型的修改,有可能会影响应用程序对数据库进行存取;而列的删除和重命名更需要检查应用程序是否会出现关联性错误。
如果数据表创建时,选择了错误的表空间,那么可以利用alter table命令,结合move tablespace选项转移表空间,如下图所示。
将表student转移至表空间users中。
alter table student用于修改表student的属性;move tablespace users用于将表student从当前表空间转移至表空间users。可以通过查询视图user_tables获得表student转移之后的表空间信息,如下所示。
分析查询结果可知,利用move tablespace选项已经成功实现了表空间的转移。
删除数据表
利用drop table命令删除数据表
有时,由于某些约束的存在,例如,当前表的主键被其他表用作外键,会导致无法成功删除。利用cascade constraints选项可以将约束同时删除,从而保证drop table命令一定能够成功执行。
特殊的数据表dual
dual表实际属于系统用户sys,具有了数据库基本权限的用户,均可查询该表的内容,如下所示:
或者
分析查询结果可知,dual表仅含有一行一列。该表并非为了存储数据而创建的,其存在的意义在于提供强制的数据源。
在oracle中,所有查询语句必须满足select column_name from table_name的格式。但是,在某些场景下,数据源table_name并不明确。例如,函数sysdate()用于返回当前日期,那么在sql命令行下调用该函数时,很难有明确的数据源,此时即可使用dual表。
利用dual表提供数据源,以获得当前日期。
同样,对于各种数学运算,同样可以利用dual表作为数据源,来打印和查看输出结果。
dual表提供了一行一列的数据格式,从而使各种表达式、函数运算在以其为数据源时,能够输出单行单列的形式。
由于dual表的所有者为系统用户sys,因此,只有用户利用该身份登录数据库才可以修改该表。但是,修改该表的内容或者结构都应该被禁止。