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] . . .);
阅读(1025) | 评论(0) | 转发(0) |