本人所有博文纯手码,给个关注或者赞吧!博主:张晨晨QQ:1445696451欢迎随时加Q讨论技术。
一、Oracle的序列
·序列是用来生成惟一的连续的整数的数据库对象。序列通常可以用来自动生成主键或者唯一键的值;可根据数值进行升序或者降序的排列
·比如创建班级的学生信息登记表,可以将学号使用序列自动生成。班级的学号都是10000~10060这个范围,每登记一个学生,序列自动增长一个。
1、创建序列的命令语法
create sequence seq_name [start with interger] [increment by interger] [maxvalue interger ] [minvalue interger] [cycle|nocycle] [cache interger|nocache];
注释:
create sequence seq_name :创建序列
start with :从...开始生成序列
increment by :每次增长的数值
maxvalue :最大的序列值,默认不限制最大值
minvalue :最小的序列值,默认不限制最小值
cycle :翻译为中文是圆的意思,这里其实是指循环,当序列到达最大值/最小值时,从初始值开始继续生成。默认为nocycle,不进行循环生成。
cache :预先分配出来的序列,保存于缓存中,可用于快速访问序列号。默认为nocache,即不分配缓存
举例:
create sequence seq_1
start with 10000
increment by 1
maxvalue 10060
nocycle;
:还是上面的例子,创建一个seq_1序列,从10000开始,每次增长为1,最大值为10060,不进行循环生成。
2、我们建立好了序列自然需要将序列应用到我们创建的表(table)中。可以通过nextval、currval伪列来访问该序列的值。
·nextval:这个伪列会在创建序列后第一次使用时,返回该序列的初始值。在以后使用时,将使用increment by子句的值来增加序列值
·currval:会返回序列的最后一次引用nextval时返回的值。
举例:
create table student_class25(stu_id number not null,stu_name varchar2(20),
stu_age number);
创建一个student_class25表
insert into student_class25 values (seq_1.nextval,’zhangsan’,’13’);
insert into student_class25 values (seq_1.nextval,’lisi’,’13’);
...
向student_class25表中插入数据,在对应stu_id这一列我们引用序列seq_1。
select seq_1.currval from dual;
查询序列当前值
##如果在你指定缓存的环境下,执行startup force重启数据库,接着写的数据的序列号会从初始值+缓存值开始。例如,初始值为10,缓存值为30个,那么执行startup force后,序列号会从40开始生成。
3、维护序列
1)查看序列(使用字典user_sequences)
select from user_sequences;
2)删除序列
drop sequence seq_name;
3)更改序列
alter sequence seq_name [...];
二、Oracle的同义词
·顾名思义,同义词就是意思相同的词语,你可以看做是对象的一个别名,就像liunx操作系统中的命令的别名一样。但是linux命令别名只提供了方便容易记忆的好处。
1、而在Oracle中,同义词可用来:
1)简化Oracle中输入的SQL语句,通过给对象建立同义词,我们可以简化复杂的SQL语句,方便记忆和操作
2)隐藏对象的名称和所有者,给对象建立了同义词,如scott模式下的emp表(scott,emp),我们建立一个同义词就叫做se。那么我们在查询这个表的时候就不用担心暴露表的位置,提供了一定的安全性
3)提供对数据库的公共访问,可以通过给远程连接建立公有同义词给其他的用户查看。
4)以及为分布式数据库的远程对象提供位置透明性,我们给数据库链接(将其看做是一个对象)建立同义词,使用户可以无阻碍的查看数据表,这时候对于用户而言,位置就是透明的。
2、同义词分类(两种)
1)私有同义词:为当前模式的用户私有,其他用户无法使用
2)公有同义词:与私有同义词相反
3、创建同义词
create [or replace] [public] synonym sy_name for object_name;
注释:
create ... for :给...创键同义词
[or replace] :该可选项的作用是覆盖(如果存在同名的同义词就会将其覆盖掉)
[public] :加上该选项表示创建公有同义词
sy_name :同义词名
object_name :对象名称,如scott.emp(即scott用户下的emp表)
4、举例
create synonym sy_name for scott.emp;
为scott.emp表创建私有同义词
create public synonym sy_name for scott.emp;
创建公有同义词
##创建好的公有同义词不代表用户就可以使用,我们还需要对需要操作这个表的用户进行授权
5、复杂应用
1)建立oracle连接的命令
举例:
①conn system/[email protected];
②create database link link_1 connect system identified by pwd123 using orcl;
③create synonym sy_t for [email protected]_1;
通过以上命令建立一条连接到远程数据库的数据库链接,并为链接中数据库的scott.emp表建立同义词。
6、维护同义词
1)查看同义词
select from user_synonyms;
2)删除公有/私有同义词
drop [public] synonym sy_name;
三、数据库链接
1、数据库链接是定义一个数据库到另一个数据库路径的对象,可以通过数据库链接查询远程表、执行远程程序。在分布式环境中,Oracle数据库链接是必须的。有一点,oracle数据库链接是单向的;一个链接,能从a数据库链接到b数据库,那么无法从b数据库链接到a数据库。
2、数据库链接分类
private:属于创建该链接的用户,也只有该用户可以使用
public:属于public,允许本地数据库中所有拥有数据库访问权限的用户使用
global:全集类型,网络中的数据库用户均可使用
3、创建数据库链接
create database link connect to username identified by user
passwd using
‘(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ipaddress)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dbtest)
)
)’;
四、分区表
·Oracle可将表的行分成多个部分(存储于不同的表空间),这些部分组成的表就是分区表,这些部分被称为Oracle分区。而分区表的应用一般来说,表的大小要足够大才可以体现分区表的作用,太小的表不建议使用。
1、分区表有很大的作用:
1)改善标的查询性能;同时实现分开管理
2)便于备份和恢复,如果一部分的数据丢失,只需要单独恢复对应分区即可
3)分开存储数据,提高安全性
4)分区对于用户而言也是透明的
2、创建分区表
create table t_name
(stu_id number,stu_name varchar2(20),stu_age number)
partition by range (stu_id)
(
partition p1 values less than (),
partition p2 values less than (),
parti...
);
原文地址:http://blog.51cto.com/13434336/2122604