Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1467095
  • 博文数量: 416
  • 博客积分: 13005
  • 博客等级: 上将
  • 技术积分: 3297
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 16:26
文章分类

全部博文(416)

文章存档

2014年(1)

2013年(4)

2012年(46)

2011年(64)

2010年(12)

2009年(4)

2008年(40)

2007年(187)

2006年(58)

分类: Oracle

2007-02-02 09:44:24

ORACLE PLSQL使用经验总结_3
创建和管理表 
数据库会分配一定的空间从而定义表的大小,所以表的大小不用指定。表可容纳最多1000列。表可在用户使用数据库的同时创建,而且表的结构可在表联机时修改。 
如没有指定,数据类型为CHAR的列默认长度为1。这个长度的范围是1到2000。 
当一个列中数据的精度未知(如可能是4,4.35或4.3567),定
义这列的数据类型应使用NUMBER数据类型,而不是NUMBER(p,s) 数据类型,NUMBER(p,s)用于定点数。LONG数据类型用于长度不定,最大值为2G的字符型数据。 
RENAME
语句的语法:RENAME old name TO new name; 注意要是表名中包含空格,符号或数字,必须使用双引号。 
TRUNCATE TABLE table 
命令把表中的所有行删除,并存储容量参数重置为定义值,该命令是DDL命令,不能回滚, DROP TABLE命令把表的行,相关的索引和表结构一并删除,但不能释放存储空间。要成功执行TRUNCATE TABLE 命令,你必须拥有该表或拥有DELETE TABLE的系统权限。 
在CREATE TABLE子句中使用子查询,新表中的列数必须与子查询返回的列数相等,列位置对应。另外,除NOT NULL约束外,新列不会继承源列的所有约束。 
你不能对一列重命名。在表中添加一列时,你不能指定该列的位置,它会被默认放置在最后。你可以为一列增加长度。 通常当一列包含数据时,你不能修改该列的数据类型,不能减少一列的长度,但当列中包含空值或你不改变列的大小时,你可以把CHAR 转换为VARCHAR2数据类型。 
在DROP TABLE table命令后加上CASCADE CONSTRAINTS回把表中的相关约束一并删除。如命令:"DROP TABLE employee CASCADE CONSTRAINTS;"会把employee表中的数据,结构,和相关约束一并删除。 
ORACLE
的表名必须以字母开头,表名中可包含数字0-9,符号:“$”,“_”,“#”。表名不是大小写敏感的,如没指定,在创建表时默认为大写。 
同一个用户不能拥有两个同名的对象,即表的命名不能重复。 
如在创建新表时通过子查询引用另一表的列,无需为新列定义数据类型,因为数据类型在这里是可继承的,除非你在新表中把这些列改了名。 
当你创建一个数据类型为VARCHAR2的列时,必须指定长度。 
其他数据库对象 
在创建同义词时,语句中出现PRIVATE 和OR REPLACE 是无效的。在你自己的方案(schema)中创建同义词时,方案名不是必须的。如果方案的主人希望所有用户能访问自己方案中的表,应使用PUBILIC关键字。语法: 
CREATE [PUBILIC] SYNONYM synonym  FOR object ; 
CURRVAL
伪列用于在当前序列中检索连续序列号,它能用在UPDATE语句的SET子句中和INSERT语句的VALUES子句中,还可以用在INSERT语句的子查询的SELECT列表中。但不能用于视图的SELECT语句和带HAVING子句的SELECT语句中。 
要删除一个自己的序列,你必须拥有DROP SEQUENCE权限,要删除别人的序列,你必须拥有DROP ANY         
SEQUENCE
权限。 
如果创建序列时没有指定参数值,ORACLE服务器预分配的默认值20会使用。 
定
义序列的语法: 
CREATE SEQUENCE name 
[INCREMENT BY n] 
;指定序列以n递增,如果没指定,默认值1会使用 
[START WITH n] 
;由n
开始计数 
[(MAXVALUE n | NOMAXVALUE)] 
;设置最大值n或不设置最大值 
[(MINVALUE n | NOMINVALUE)] 
;设置最小值n或不设置最小值 
[(CYCLE | NOCYCLE)] 
;当达到最大值时循环或不循环 
[(CACHE n | NOCACHE)] 
;预分配缓存大小,默认为20 
不是任何情况创建索引都能提高效率,要是在不适合创建索引的情况下创建了索引,反而会降低效率。 
应当创建索引的情况: 
1 
列中包含的值范围很大;2 列中包含大量空值;3 在WHERE子句或连接条件中经常使用多个列;4 表很大,但经常查看的行不足2-4%。 
不
应当使用索引的情况: 
1 
表很小;2 某列在查询的条件中不常使用;3 经常查看的行大于2-4%;4 表经常更新。 
由于序列号时独立于表存储的,所以一个序列可用于多个表中。 
要显示一序列值的下一值,查询伪表SYS.DUAL,如: 
SELECT parts_id.NEXTVAL FROM SYS.DUAL; 
这里的parts_id是序列名。 
创建索引语法: 
CREATE INDEX index_name ON table_name (column[, column] . . .); 

阅读(1063) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~