创建表
1、describe 表名 --查看表结构
定义列的时候变长字符数据类型必须指定最大长度,number可以是最高精度(最高到38位),也可以是指定的精度。
2、字符宽度和数值精度
char列的最大字符宽度是2000个字符。varchar2列可以有最多32000个字符。
| 数值精度 | ||
| insert语句中的值 | 表中的实际值 | |
| 精度为number(4,1) | 123.4 | 123.4 |
| 123.44 | 123.4 | |
| 123.445 | 123.5 | |
| 12345.6 | 插入失败 | |
| 精度为number(4) | 123.4 | 123 |
| 123.44 | 123 | |
| 123.5 | 124 | |
| 12345.6 | 插入失败 | |
| 精度为number(4,-1) | 123.4 | 120 |
| 123.5 | 120 | |
| 125 | 130 | |
| 12345 | 插入失败 | |
| 精度为number | 123.4 | 123.4 |
| 123.5 | 123.5 | |
| 125 | 125 | |
| 12345 | 12345 |
3、创建表时可以加几种不同的约束。包括:候选键、主键、外键以及检查条件。有两种指定约束的方法,一种方法是作为列定义的一部分定义(称为列约束),另一种方法是在create table 语句的末尾定义(称为表约束)。限制多个列的子句必须是表约束。
①候选键(candidate key)是一列或多列的组合,其值唯一地标识了表中的一行。
constraint XXXX unique(XXX,XXX...);
②主键(primary key)是具有某些特殊性质的候选键之一。
constraint XXXX primary key;
4、指定索引表空间
create table test(
id number(5,2),
name varchar2(20),
constraint id_pk primary key (id) using index tablespace users);
①外键(foreign key)是基于另一个表的主键值的列的组合。
constraint XXXX foreign key(aaa) references category (aaa);
②check 约束
许多列必须具有处于某个范围或满足某些条件的值。
create table test(id number(1) check (id<=100));
删除表
drop table test;删除表仍然保留了表的空间,它们只是暂时通过“回收站”来访问。
drop table test purge; 删除表同事把它从“回收站”中清除。
如果表已经被删除,可以从“回收站”中清除所占的空间。
purge table test;
清除“回收站”中的所有内容:
purge recyclebin;
截断表
truncate table trouble;
更改表
添加列 alter table test add(age number(2) not null );
修改列alter table test modify(age null );
添加或修改列的规则
可以随时增加字符列的宽度。随时增加number列的数字位数。随时增加或减少number列中的小数位数,对于减少的情况需要表为空。
可以更改该列的数据类型。减少字符列的宽度。减少number列的数字位数。
创建只读表
alter table test read only;
alter table test read write;
更改当前使用的表
alter session set ddl_lock_timeout=60;
创建虚拟列
可以在表中创建虚拟列,而不是存储派生的数据。虚拟列可以基于同一行中的其他值(例如,将两列加起来)。在以前的版本中,需要创建视图来执行创建列值必须的函数。在oralce 11g 和12c中,可以将函数指定为表定义的一部分,这样就可以对虚拟列创建索引,并通过虚拟列创建分区表。
generated always as (xxxx) virtual
删除列
alter table test drop column age ;
也可以标记为"unused"
alter table test set unused column xxxx;
若标记一列为"unsed",则在删除该列之前不会释放此列以前占用的空间。
alter table test drop unused columns;
可以查询user_unused_col_tabs,all_unused_col_tabs以及dba_unused_col_tabs来查看所有其中含有标记为“unused”的列的表。
可以利用一条命令删除多列
alter table test drop(xxx,xxx);
如果删除的列是主键约束或唯一约束的一部分,那么在alter table 命令中必须使用cascade constraints子句。如果删除属于主键的列,oracle将同时删除该列和相应的主键索引。
根据一个表创建另一个表
create table test2 [nologging] as select * from test;
注意:所选的列中有long数据类型,创建将失败。不会为新表自动创建源表上的约束,包括NOT NULL约束。
可以使用nologging改善向表中加载数据操作的性能。但创建完应该及时备份数据库。
创建索引组织表
索引组织表能根据表的主键列值对数据进行排序。索引组织表存储数据时就像整个表存储在一个索引中那样。索引有两个主要用途:
强制唯一性 在创建primary key 或unique约束时,Oracle创建索引来强调索引列的唯一性。
改善性能 当某个查询使用索引时,此查询的性能将得到显著改善。
索引组织表允许在索引中存储整个表的数据。普通的索引只存储索引列,而索引组织表则在索引中存储表中的所有列。
create table test (id number,name varchar2(20),consrtaint id_pk primary key(id,name ) organization index;
当主键由表中的大部分列构成时,使用索引组织表是最有效的。
集群
集群是存储表的一种方法,这些表密切相关,并经常一起连接到磁盘的同一区域。例如表 a 和表b 的数据行可以交错插入到称为集群的单个区域中,而不是将两个表放在磁盘上的不同扇区中。集群键可以是一列或多列,通过这些列通常可以将这些表在查询中连接起来。为了将表集群在一起,必须拥有这些将要集群在一起的表。
create cluster clustername (column datatype [,column datatype]...)[other options];
clustername 遵循表的命名约定,clustername将作为集群键使用的名称和数据类型。列名可以与将要放进集群中的表的一个列名相同,或为其他任何有效的名称。
序列
使用序列可以把唯一的数值分配给数据库中的列。不需要创建特殊的表和代码来记录使用中的唯一的数值。
create sequence customer_id increment by 1start with 1000;
使用nextval确保序列的值不断增加并保证获得唯一号码,此数值就会存储在currval中,以便在别的地方使用。
本公众号是个人学习工作笔记,希望大家发现问题能及时和我本人沟通,希望你与我共同成长。个人微信zgtj12306。

欢迎关注“自学Oracle”




