本文记录 oracle 环境下对表的创建、字段处理(增、删、改、重命名)、删除、重命名操作,其中包含了在创建表时常用的约束条件及数据类型。


最简单的创建表命令

CREATE TABLE dept(deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13));

创建后表结构如下: 2015-07-22_202950 也可以通过其他表的数据来创建新的表,参考:sql 根据其他表结构创建新表并批量插入数据

常见数据类型

在创建表时,每一个字段你都需要给其指定数据类型,oracle 有非常多的数据类型,但是有一些是不常用的,下表列出了一些经常使用的数据类型。

 数据类型

 描述

 VARCHAR2(size)

 可变长字符数据

 CHAR(size)

 定长字符数据

 NUMBER(p,s)

 可变长数值数据

 DATE

 日期型数据

 LONG

 可变长字符数据,最大可达到 2G

 CLOB

 字符数据,最大可达到 4G

 RAW and LONG RAW

 原始的二进制数据

 BLOB

 二进制数据,最大可达到 4G

 BFILE

 储存外部文件的二进制数据,最大可达到 4G

 ROWID

 行地址

修改表字段信息

在已经创建的表中,我们可以对其字段(列)信息进行修改,具体的修改有如下几种。 1、添加新字段

ALTER TABLE dept ADD (job_id, VARCHAR2(9)) /* 给dept表新增一个字段job_id,数据类型为 VARCHAR2(9) */

2、修改字段信息

ALTER TABLE dept MODIFY (last_name, VARCHAR2(30)) /* 修改已有字段信息 */

3、重命名字段

ALTER TABLE dept RENAME COLUMN last_name to last_name_new

4、删除字段

ALTER TABLE dept DROP COLUMN (last_name)

删除表

oracle 下删除一张表默认情况下是存入到 oracle 的回收站中,如下:

drop table tablename

要想彻底删除,还要对回收站进行清空:

purge recyclebin

如果向直接删除不经过回收站,可以使用如下方法:

drop table test1 purge /* 直接删除表不经过回收站 */

重命名表

rename test1 to test2

常见表字段约束

Not Null:保证列的值不能为空 Unique:保证字段数据不重复,唯一 Primary Key:主键约束,默认主键约束包含 Not Null 和 Unique Foreign Key:外键约束,关联另外一张表的一个主键

  • FOREIGN KEY: 在子表中,定义了一个表级的约束
  • REFERENCES: 指定表和父表中的列
  • ON DELETE CASCADE: 当删除父表时,级联删除子表记录
  • ON DELETE SET NULL: 将子表的相关依赖记录的外键值置为null

check:定义每一行记录所必须满足的条件 一个综合案例:

/* constraint 是声明一种错误名称,当对该表插入数据时不符合后面的约束条件时,则会弹出 constraint 后面的错误名称 */
create table student
(
sid number constraint student_pk primary key,/*number类型,primary key为主键*/
sname varchar2(20) constraint student_name_not_null not null,/*varchar2 不能为null*/
email varchar2(20) constraint student_email_unique unique/*varchar2 不能重复*/
constraint student_email_notnull not null,/*不能为null*/
age number constraint student_age_min check(age > 10),/*检查条件 age 必须大于10*/
gender varchar2(6) constraint gender_female_or_male check(gender in (‘man’, ‘wman’)),/*只能插入 man 或者 woman*/
deptno number constraint student_fk references dept(deptno) on delete set null/*增加外键为dept(deptno)*/
)