Oracle创建和管理表
Oracle创建和管理表
/*-----------------------创建和管理表-----------------------------*/
一、Orcale之中的数据类型:
1.NUMBER、DATE、VARCAHR、CLOB、BLOB
二、表的建立
CREATE TABLE 表名称( 字段名1 字段类型 [DEFAULT 默认值], 字段名2 字段类型 [DEFAULT 默认值], ... 字段名N 字段类型 [DEFAULT 默认值] ); CREATE TABLE 表名称 AS(子查询) ·如果子查询写的是 SELECT * FROM emp,表示把表结构和表内容一起复制 ·如果子查询写的是 SELECT * FROM WHERE 1==2,加入了一个永远不成立的条件,则表示只复制表结构,不复制内容!
三、表单的删除
DROP TABLE 表名称
四、表的修改
1、增加列: ·ALTER TABLE 表名称 ADD(列的名称 列的类型 DEFAULT 默认值,...); ALTER TABLE person ADD(address VARCHAR(200) DEFAULT'暂无地址'); 2、修改列: ·ALTER TABLE 表名称 MODIFY(列的名称 列的类型 DEFAULT 默认值)
·但是,在修改表结构的时候,如果假设数据中对应的字段里有一个很长的数据,是无法将表的长度缩小的
五、表的重命名[Orcale特有]
·RENAME 命令:RENAME 旧的表名 TO 新的表名;
六、截断表
清空表数据,但是希望立刻清空,而不需要rollback,commit之类的
TRUNCATE TABLE 表名称;
七、表约束【重点】
·主键约束:主键表示唯一的标识,本身不能为空,不可重复
·唯一约束:在一个表之中只允许建立一个主键约束,其他表如果希望不能出现重复值的话,则可以用唯一约束
·检查约束:检查一个列的内容是否合法 NUMBER(5)
·非空约束:NOT NULL
·外键约束:在两张表进行约束的操作
范例:
DROP TABLE person; --删除 CREATE TABLE person( --创建 pid VARCHAR(18) PRIMARY KEY, name VARCHAR(200), age NUMBER(3) NOT NULL CHECK(SEX IN('男','女')),--非空约束 检查约束 birthday DATE, 易做图 VARCHAR(2) DEFAULT '男' CONSTRAINT person_pid_key PRIMARY KEY(pid); --主键 CONSTRAINT person_name_unique UNIQUE(name); --唯一约束 CONSTRAINT person_age_ck CHECK(age BETWEEN 0 AND 150) --检查约束 ); 1、主键约束(PRIMARY KEY) ·可以在建立表的时候加你,默认不能为空且不能后重复! ·也可以在建表后再加入: 指令 约束别名 约束 CONSTRAINT person_pid_pk PRIMARY KEY(pid) 2、非空约束:和主键一样能够在建表时候添加,也可以在之后添加,NOT NULL 3、唯一约束(UNIQUE):表示唯一约束,也能在建表时候添加 4、检查约束(CHECK):判断插入的内容是否合法 例:年龄 CHECK(SEX IN('男','女')) 年龄 CHECK(age BETWEEN 0 AND 150) 5、外键约束(FOREGIN KEY): CONSTRAINT person_book_pid_fk FOREGIN KEY(pid) REFERENCES person(pid) ONDELETE CASCADE; 表示级联删除
七、修改约束:
·如果一个表已经建立完成了之后,则可以为其添加约束。 CREATE TABLE person( pid VARCHAR(18) , name VARCHAR(200), age NUMBER(3), birthday DATE, 易做图 VARCHAR(2) DEFAULT '男' ); ALTER TABLE 表名称 ADD CONSTRAINT 约束名 约束类型(约束字段); 命名规范: ·PRIMARY KEY :主键字段_PL ·UNIQUE: 主键_UK ·CHECK: 主键_CK ·FOREIGN KEY: 父字段_子字段_FK ALTER TABLE person ADD CONSTRAINT person_age CHECK(age BETWEEN 0 AND 150); ALTER TABLE book ADD CONSTRAINT person_book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid) ONDELETECASDE;
八、删除约束 上面的ADD修改成DROP
ALTER TABLE person DROP CONSTRAINT person_age CHECK(age BETWEEN 0 AND 150);
九、ROWNUM(重点)
ROWNUM其实是在查询之后才给定的编号
表示行号,实际上此是一个列,一个伪列,此列在任意表之中存在
SELECT ROWNUM,ename FROM emp; ROWNUM ENAME ---------- ---------- 1 ALLEN 2 WARD 3 JONES 4 MARTIN 5 BLAKE 6 CLARK 7 SCOTT 8 KING 9 TURNER 10 ADAMS 11 JAMES 12 FORD 13 MILLER
ROWNUM不能使用BETWEEN n AND m 来进行截取。如果想要进行中间截取
则只能采用子查询。
SELECT * FROM (SELECT ROWNUM rn,e.* FROM emp e WHERE ROWNUM<=10) temp WHERE temp.rn>5;
这样才能够显示6-10的数据