Oracle关于表的常用sql
建表
建表语法
create table tab_name(
col1 type1 [not null][primary key],
col2 type2 [not null],
col3 type3 [default]..
constraint cheek_name primary key (col_name)
)tablespace tbsp // tbsp为表空间
storage(initial 256k); //指定为该表分配的第一个盘区的大小
pctfree 20 //数据块管理参数
pctused 40; //数据块管理参数
initrans 10; //数据块管理参数,10 个事务条目
根据已有的表创建新表
select * into table_new from table_old (使用旧表创建新表)
- 创建新表,仅复制表结构,不需要数据。
CREATE TABLE NEW_TAB AS SELECT * FROM OLD_TAB WHERE 1=0;
- oracle 创建新表,并复制旧表数据
CREATE TABLE NEW_TAB AS SELECT * FROM OLD_TAB;
数据完整性和约束性
- 非空约束、主键约束、唯一约束、外键约束、检查约束和默认约束
非空约束
alter table tab_name modify col_name [not] null;
主键约束
alter table tab_name add CONSTRAINT cheek_name primary KEY(col_name);
alter table tab_name add primary KEY(col_name);
alter TABLE tab_name drop CONSTRAINT cheek_name; -- 删除约束
唯一约束
alter table tab_name add CONSTRAINT cheek_name unique(col_name);
alter TABLE tab_name drop CONSTRAINT cheek_name; -- 删除约束
外键约束 on delete cascade级联删除
alter table tab_name add CONSTRAINT cheek_name foreign key(col_name) REFERENCES tab_name2(col_name2) [on delete cascade];
alter TABLE tab_name drop CONSTRAINT cheek_name; -- 删除约束
禁用约束
alter TABLE tab_name disable CONSTRAINT cheek_name;
在禁用主键约束时,Oracle 会默认删除约束对应的唯一索引;而在重新激活约束时,Oracle将会重新建立唯一索引。如果希望在删除约束时保留对应的唯一索引,可以在禁用约束时使用关键字 KEEP INDEX(通常放在约束名称的后面)。
激活约束
alter table table_name enable [novalidate | validate] constraint con_name;
- novalidate:该关键字表示在激活约束时不验证表中已经存在的数据是否满足约束,如果没有使用该关键字,或者使用 VALIDATE 关键字,则在激活约束时系统将验证表中的数据是否满足约束的定义。
注释
在ORACLE中给表、列增加注释以及读取注释
给表填加注释
comment on table 表名 is '表注释";
给列加注释
comment on column 表.列 is '列注释';
读取表注释
select * from user_tab_comments where comments is not null;
读取列注释
SELECT *
FROM USER_COL_COMMNENTS
WHERE COMMENTS IS NOT NULL AND
TABLE_NAME = '表名';
约束
通过约束名查看表名的方法
SELECT TABLE_NAME FROM ALL_CONSTRAINTS WHERE CONSTRAINT_NAME = 'PK_ID';
SELECT CONSTRAINT_NAME,
CONSTRAINT_TYPE,
TABLE_NAME
FROM ALL_CONSTRAINTS
WHERE CONSTRAINT_NAME = 'PK_ID';
查询表中的所有约束
SELECT TABLE_NAME,
CONSTRAINT_NAME,
CONSTRAINT_TYPE,
STATUS
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = 'SCOTT.EMP'
SELECT CONSTRAINT_NAME,
TABLE_NAME,
COLUMN_NAME
FROM USER_CONS_COLUMNS
WHERE CONSTRAINT_NAME = 'SYS_C005121'
查询Oracle表中受约束的列名及其约束名称
SELECT A.TABLE_NAME,
A.COLUMN_NAME,
A.CONSTRAINT_NAME,
B.CONSTRAINT_TYPE
FROM USER_CONS_COLUMNS A,
USER_CONSTRAINTS B
WHERE A.TABLE_NAME = 'TABLENAME' AND
A.COLUMN_NAME = 'COLUMNNAME' AND
B.CONSTRAINT_TYPE = 'CONSTRAINTTYPE' AND
A.CONSTRAINT_NAME = B.CONSTRAINT_NAME;
其中WHERE子句中TABLENAME,COLUMNNAME,CONSTRAINTTYPE分别为表名,列名,约束类型(如P,U等),这些属性不需要的时候可以忽略。
删除表
drop table table_name [cascade constraints];
- 如果该表存在约束、关联的视图和触发器等,则必须使用“cascade constraints”这个可选的子句才能将其删除
恢复删除了的表
select object_name,original_name
from recyclebin where original_name = 'tab_name';
flashback table tab_name to before drop;
修改表
修改表名
alter table table_old_name rename to table_new_name
增加字段
alter TABLE tab_name add(col_name TYPE);
删除字段
alter table tab_name drop column col_name; -- 一个字段
alter table tab_name drop (col_name1,col_name2); -- 多个字段
修改字段
alter table table_name modify column_name column_property
- column_property:要修改列的属性,包括数据类型的长度、数字列的精度、列的数据类型和列的默认值等
修改字段名称
alter table tab_name rename column oldCName to newCName;
修改表空间
alter TABLE tab_name move tablespace tbsp;
修改表的状态
alter table tab_name read only; -- 将表置于只读的 read only 状态
alter table tab_name read write;