第7章
7-1 确定会话可以访问那些对象。
7-1-1 确定模式中各种类型的对象 列出所有对象
select object_type, count(object_type)
from user_objects
group by object_type
7-1-2 确定有权访问的总数
select object_type, count(object_type)
from all_objects
group by object_type
7-1-3 确定谁拥有当前登录人能够看到的对象
select distinct owner from all_objects
显示表中的数据类型
describe test3;
user_tab_cols用来获取对应用户表的列信息;
user_col_comments用来获取对应用户表列的注释信息;
user_constraints用来获取用户表的约束条件;
user_cons_columns约束中用户可访问列。
select column_name,
data_type,
nullable,
data_length,
data_precision,
data_scale
from user_tab_columns
where table_name = 'TF_DEV'
select trunc(sysdate) from dual
创建表
create table tf_dev_copy
as select * from tf_dev
创建表结构
create table tf_dev_copy2
as select * from tf_dev where 1=2
非空约束和检查约束会应用于新表tf_dev_copy
select * from tf_dev_copy where rownum<10
新怎列
alter table test3 add(id number)
修改列
alter table test3 modify(num default 0)
删除列
alter table test3 drop column id
将列标记为未使用
alter table test3 set unused column id
alter table test3 drop unused columns
重命名列名
alter table test3 rename column num to tnum
删除表
drop table table_name
merge into products p
using (select * from newproducts) np
on (p.product_id = np.product_id)
when matched then
update set p.product_name = np.product_name
where np.product_name like 'OL%'
when not matched then
insert values(np.product_id, np.product_name, np.category)
where np.product_name like 'OL%'
truncate 删除所有行 无法回滚
DML--数据管理语言
SQL(structured query language)--结构化查询语言
--6种常用的PL/SQL对象类型
过程 函数 触发器 程序包 程序包主体 类型主体
select '123'||'456' as "data number" from dual
select q'<qual' hello>' "q<>" from dual
结果
q<>
qual' hello
user_objects显示登录人拥有的对象,
all_objects显示登录人能够访问的所有对象。
数据对象 表 视图 同义词 索引 序列
同义词是表或视图的别名。
对象名称不能超过30个字符,字符以字母数字 下划线 美元符号或者井字符号组成
开头必须a`z
对象名称区分大小写
数据库链接名称可以128个字符
表 视图 私有同义词共享相同的命名空间 不能同名
CHAR(n BYTE/CHAR)
默认1字节,n值最大为2000
末尾填充空格以达到指定长度,超过最大长度报错。
默认指定长度为字节数,字符长度可以从1字节到四字节。
1.字符类型
NCHAR(n)
默认1字符,最大存储内容2000字节
末尾填充空格以达到指定长度,n为Unicode字符数。
默认为1字节。
NVARCHAR2(n)
最大长度必须指定,最大存储内容4000字节
变长类型。n为Unicode字符数
VARCHAR2(n BYTE/CHAR)
最大长度必须指定,至少为1字节或者1字符,n值最大为4000
变长类型。超过最大长度报错。默认存储的是长度为0的字符串。
2.数字类型
NUMBER(p[,s])
1-22字节。
P取值范围1到38
S取值范围-84到127
存储定点数,值的绝对值范围为1.0 x 10 -130至1.0 x 10 126。值大于等于1.0 x 10 126时报错。p为有意义的10进制位数,正值s为小数位数,负值s表示四舍五入到小数点左部多少位。
BINARY_FLOAT
5字节,其中有一长度字节。
32位单精度浮点数类型。
符号位1位,指数位8位,尾数位23位。
BINARY_DOUBLE
9字节,其中有一长度字节。
64位双精度浮点数类型。
3.时间、时间间隔类型
YEAR
-4712至9999,包括0
任何整数
MONTH
01至12
0至11
DAY
01至31
任何整数
HOUR
00 至 23
0 至 23
MINUTE
00 至 59
0至 59
SECOND
00 to 59.9(n),9(n)不适用与DATE类型
0 to 59.9(n)
TIMEZONE_HOUR
-1至14,不适用与DATE和TIMESTAMP类型
不可用
TIMEZONE_MINUTE
00至59,不适用与DATE和TIMESTAMP类型
不可用
TIMEZONE_REGION
不可用
TIMEZONE_ABBR
不可用
4.大对象类型
BLOB
最大为(4GB-1)*数据库块大小
存储非结构化二进制文件。支持事务处理。
CLOB
最大为(4GB-1)*数据库块大小
存储单字节或者多字节字符数据。支持事务处理。
NCLOB
最大为(4GB-1)*数据库块大小
存储Unicode数据。支持事务处理。
BFILE
最大为2 32-1字节
LOB地址指向文件系统上的一个二进制文件,维护目录和文件名。不参与事务处理。只支持只读操作。
5.其他类型
LONG
最大为2GB
变长类型,存储字符串。创建表时不要使用该类型。
RAW(n)
最大2000字节,n为字节数,必须指定n
变长类型,字符集发生变化时不会改变值。
LONG RAW
最大为2GB
变长类型,不建议使用,建议转化为BLOB类型,字符集发生变化时不会改变值。
ROWID
10字节
代表记录的地址。显示为18位的字符串。用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。
UROWID(n)
create global temporary table temp_tab_name on commit preserve rows as select * from tab_name
ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables。这些临时表用来保存一个会话SESSION的数据,或者保存在一个事务中需要的数据。当会话退出或者用户提交commit和回滚rollback事务的时候,临时表的数据自动清空,但是临时表的结构以及元数据还存储在用户的数据字典中。
分类:
1.会话级临时表
会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据。
Create Global Temporary Table Table_Name
(
Col1 Type1,
Col2 Type2
...
)
On Commit Preserve Rows;
2.事务级临时表
事务级临时表是指临时表中的数据只在事务生命周期中存在。
Create Global Temporary Table Table_Name
(
Col1 Type1,
Col2 Type2
...
)
On Commit Delete Rows;
当一个事务结束(commit or rollback),Oracle自动清除临时表中数据。
创建索引的好处:1强制实施主键约束和唯一约束,2提高性能
为了提高性能应该始终在子表的外键列上创建索引
B(balanced)*树索引和位图索引
行的的指针是rowid,rowid是oracle专用的虚拟列每一行都有虚拟列
B*树适用场景(可以包含null):
1.列的基数(不同值的个数)很大
2.表的行数多
3.列用在where子句或join条件中
数据超过2%到4%的行全表扫描比较快。
压缩 反向键 唯一索引只能用B*树
位图(不包含null)索引适用场景:
1.列的基数小
2.表中的行数多
3.列用于布尔运算
索引的常用种类
1.唯一或非唯一
2.反向键
3.压缩
4.复合
5.基于函数
6.升序或降序
约束
unique(可以输入null值)
not null
primary key
foreign key
check
select constraint_name,constraint_type,column_name
from user_constraints natural join user_cons_columns
where lower(table_name)='test3'
alter table test3 rename constraint old_name to new_name
唯一约束和主键约束需要索引。
创建同义词
create [public] synonym synonymname for object
序列是用来生成主键的宝贵工具
ctrate sequence seq_name strat witch 10
索引有自己的名称空间。
表名必须以字母开头,表名不能是保留字原则,使用双引号可以
绕开以上两个规则。