我是靠谱客的博主 踏实星星,最近开发中收集的这篇文章主要介绍Oracle使用(二)—— 一些常用的SQL命令和基础知识(包含权限、序列、视图、索引、完整性约束、事务等),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
一、使用SQLPLUS连接数据库并切换或解锁账号
sqlplus
sys/123@orcl as sysdba(只用于dba) --初次连接
conn system/123@orcl
--切换帐号
conn sys/123@orcl as sysdba
--切换帐号
show user
--显示当前帐户
alter user scott account unlock;
--解锁
alter user scott account lock;
--加锁
二、表空间、用户、角色、系统权限和对象权限
--查询数据文件
select * from v$datafile;
--查询日志文件
select * from v$logfile;
--查询控制文件
select * from v$controlfile;
--创建表空间
create tablespace ts_alex
datafile 'D:OracleServeroradataorclalex_file.dbf' --数据文件的后缀名无固定类型,可随意编写
size 10M --指定数据文件的初始容量,单位可以是K(千字节)和M(兆字节)
autoextend on--设置初始空间使用完毕之后是否自动增加容量,on表示打开,off表示关闭
next 10M --当打开容量自动增加时,使用next设置每次增加的大小
maxsize 100M; --表示允许为数据文件分配的最大空间,不设置表示无限制
--创建临时表空间
crate temporary tablespace ts_alex_temp
...
--同上
--查询所有表空间
select * from v$tablespace;
--修改表空间
alter tablespace ts_alex
add datafile 'D:OracleServeroradataorcldata_file2.dbf'
...
--同上
--删除表空间
drop tablespace ts_alex including contents and datafiles;
--查询所有用户
select * from all_users;
--创建用户(新创建的用户没有任何功能,不能连接数据库,这时要赋予角色或权限)
create user alex
identified by 123
default tablespace ts_alex; --tmporary tablespace ts_alex_temp
--修改用户
alter user alex
identified by alex123;
--修改用户表空间
alter user alex
default tablespace system
temporary tablespace ts_alex_temp;
--删除用户
drop user alex cascade;
--角色:是一组权限的集合,常用的系统角色有:connect、resource、dba
connect --连接数据库
resource --使用数据库的表空间
dba --系统管理员的所有权限
--查看所有的角色
select * from user_role_privs;
--创建角色
create role alex;
--删除角色
drop role alex;
--权限:
--系统权限:表示在任何oracle帐号中执行指定的语句,如:create/drop/alter等DDL语句
--对象权限:是由用户赋予的访问或操作数据库对象的权限,如:insert/update/select等DML语句
--查询当前用户下的系统权限
select * from user_sys_privs;
--查询某个角色下的系统权限
select * from dba_sys_privs where grantee='CONNECT';
--查询对象权限
select * from user_tab_privs;
--查询当前用户下的表
select * from user_tables;
--系统权限传递
grant create user to scott with admin option;
--对象权限传递
grant create user to scott with grant option;
--角色权限
--将connect/resource/dba角色赋予alex角色
grant connect,resource,dba to alex;
--赋予alex角色对scott.emp表的查询、修改权限
grant select,update on scott.emp to alex;
--回收alex角色的dba角色
revoke dba from alex;
--回收alex角色中对scott.emp表的修改权限
revoke update scott.emp from alex;
--将角色alex赋予用户scott
grant alex to scott;
--回收用户scott的alex角色
revoke alex from scott;
--授予用户scott无限表空间权限
grant unlimited tablespace to scott;
--用户权限同上
--查询表的伪列
select e.*,rownum from emp e;
--复制一个新的表
create table emp3 as select * from emp where 1=1;
三、数据类型
1、字符类型
①
char类型:表示固定长度的字符串,它的列长度是1-2000个字节,未定义时默认占用一个字节,若用户输入的值小于指定长度,
则在值后用空格补全,若用户输入的值大于指定的长度时则返回错误报告;
②
varchar2类型:表示可变长度的字符串,它的列长度是1-4000个字节;
③
long类型:用来存储可变长度的字符串,最多能存储2GB,它可以用来存储varchar2类型不能存储的长文本信息,其长度受计算机
上可用存储空间的限制,设置long数据类型时需遵循以下原则:
a.一个表只能有一个列可以为long数据类型;
b.long列不能定义为唯一约束或主键约束;
c.long列上不能建立索引;
d.过程或存储过程不能接受long数据类型的参数
2、数值类型
number类型可以存储正数、负数、零、定点数和精度为38位的浮点数,用法如下:
①
列名
number 默认值(P=38,S=0)
②
列名
number(P) 使用定点数
③
列名
number(P,S) 使用浮点数
P为精度表示数字的有效位数,值在1-38之间,S为范围表示小数点右边的位数,值在-84~-127之间
3、日期时间类型
①
date类型:用于存储表中的日期和时间类型的数据,date类型的存储空间是固定的7个字节,每个字节分别存储世纪、年、月、日
小时、分钟、秒
sysdate
代表当前的系统时间
②
timestamp类型:用于存储年、月、日、小时、分钟、秒(精确到小数点后6位),同时包含时区信息
4、RAW和LONG RAW类型(存储的是二进制数据值)
①
raw类型:用于存储基于字节的数据,些类型最多存储2000个字节,该类型没有默认大小,使用时应指定大小,可建立索引
②
long raw:用于存储可变长度的二进制数据,最多存储2GB,不可建立索引,long类型受到的所有限制对long raw类型也同样有效
5、LOB数据类型(大对象数据类型,可存储4GB的非结构化信息)
① clob(字符lob),它能存储大量字符数据,可用于存储非结构化的xml文档;
② blob(二进制lob),它能存储较大的二进制对象,如图片、视频、音频等;
③ bfile(二进制文件),它能将二进制文件存储在数据库外部的操作系统文件中
6、伪列
伪列就像是oracle中的一个表的列一样,它并未存储在表中,伪列可以从表中查询,但不能添加、修改、删除等
1、rowid:数据库中的每一行都有一个行地址,rowid返回该行的地址,用途如下:
①
能以最快的方式访问数据表的一行数据
②
能显示数据表的行是如何存储
③
可以作为数据表中的唯一标识
select rowid,ename from emp where empno="6300";
2、rownum:返回一个数值表示行的次序,通过rownum可以限制查询返回的行数
select * from emp where rownum<51;
四、数据定义语言(DDL)
关键字:create、alter、drop、truncate
1、create table
--创建表
create table tb_user(
u_no number primary key,
u_name varchar2(20),
u_sex char(2),
u_birthday date
);
--添加注释举例
comment on table emp is '员工表';
--给表添加注释
comment on column emp.empno is '员工编号';
--给列添加注释
2、alter table
--修改列的定义
alter table tb_user modify u_name varchar2(50);
--修改列名
alter table tb_user rename column u_name to uname;
--添加新列
alter table tb_user add (phone number(11));
--删除列
alter table tb_user drop column phone;
--修改表名
alter table tb_user rename to t_user;
--修改表所在的表空间
alter table tb_user move tablespace system;
--为表中的某一列添加唯一约束
alter table tb_user add constraint my_unique unique(u_name);
3、truncate table(可删除表中所有的行,不删除表的结构,并释放表使用的存储空间,由于使用事务处理,因此不能回滚)
truncate table tb_user;
4、drop table
--删除表及其全部数据
drop table tb_user;
--删除表以及所有引用这个表的视图、约束或触发器
drop table tb_user cascade constrains;
--查询数据字典视图来了解该表被删除后是否在回收站中
select object_name,original_name from recyclebin where original_name="TB_USER";
--恢复被删除的表(在回收站中)
flashback table tb_user to before drop;
五、数据操纵语言(DML)
关键字:insert、update、delete、select
1、insert
--向表中添加数据
insert into tb_user values(1,'alex','男',sysdate);
--向表中指定列添加数据(没有添加值的列必须是可以为null的列)
insert into tb_user (u_no,u_name) values(1,'alex');
--向表中添加日期数据类型的值
a.insert into tb_user(u_date) values(to_date('2017-7-10 12:12:12','yyyy-mm-dd hh24:mi:ss'));
b.insert into tb_user(u_date) values('31-1月-09');--默认格式
c.insert into tb_user(u_date) values(date'2017-7-10');
2、delete
--删除表中的行数据(可以回滚)
delete from tb_user where u_no=1;
--删除表中的全部数据(可以回滚)
delete from tb_user;
3、update
--更新表中某一列的值
update tb_user set u_name='alex' where u_no=1;
--更新表中所有行某一列的值
update emp set sal=sal*1.2;
update emp set sal=(select avg(sal) from emp where job='MANAGER') where sal<2000;
4、select
select语法:
select{[distinct|all]columns|*}
--用于选择数据表、视图中的列(select语句中可以对数字数据和日期数据使用算术表达式)
[into table_name]
--用于将原表的结构和数据插入新表中
from{tables|views|other select}
--用于指定数据来源,包括表,视图和其他select语句
[where conditions]
--用于对检索的数据进行筛选
[group by columns]
--用于对检索的结果进行分组显示
[having conditions]
--用于从使用group by子句分组后的查询结果中筛选数据行
[order by columns]
--用来对结果集进行排序(包括升序和降序)
①简单查询
--查询emp表
select * from emp;
--查询scott用户下的emp表
select * from scott.emp;
--查询多个数据表
select * from emp,dept;
--查询emp表中的指定列(显示顺序可以跟表中列的顺序不同)
select job,ename,empno from emp;
--查询emp表中的sal列将值调整为原来的1.2倍
select sal*1.2 ,sal from emp;
--为emp表的指定列指定别名
select empno "员工编号",ename "员工名称" from emp e;
--显示emp表中的job列,要求显示的job记录不重复
select distinct job from emp;
②筛选查询(where 子句中不能使用聚合函数)
a.比较筛选
--比较筛选的六种情况:
A=B:比较A与B是否相等
A<>B:比较A与B是否不相等(!不可用)
A>B:比较A是否大于B
A<B:比较A是否小于B
A>=B:比较A是否大于或等于B
A<=B:比较A是否小于或等于B
--查询emp表中工资大于1500的员工信息
select empno,ename,sal from emp where sal>1500;
--使用all关键字查询emp表中工资同时不等于3000、950、800的员工记录
select * from emp where sal<>all(3000,950,800);
b.特殊关键字筛选(可以在关键字前面加上not来表示否定的判断)
1.like关键字:字符串模糊查询,它需要使用通配符在字符串内查找指定的模式,常用的通配符"_",它代表任意一个字符,
"%"代表任意数量的字符,比如:"K%"表示以字母开头的任意长度的字符串,"%M%"表示包含字母M的任意长度的字符串,
"_MRKJ"表示5个字符长度且后面4个字符是MRKJ的字符串
--在emp表中使用like关键字匹配以字母S开头的任意长度的员工名称
select * from emp where ename like 'S%';
2.in关键字:测试一个数据值是否匹配一组目标值中的一个,该关键字可以用来指定列表搜索条件
--在emp表中使用in关键字查询职务为"PRESIDENT"、"MANAGER"、"ANALYST"中任意一种的员工信息
select * from emp where job in('PRESIDENT','MANAGER','ANALYST');
3.between关键字:需要返回某一个数据值是否位于两个给定的值之间时,可以使用between...and来指定范围条件,指定的第一个值必须小于第二个值,
因为between...and实质是“大于等于第一个值,并且小于等于第二个值”的简写形式,等价于比较运算符(>=...<=)
--在emp表中查询工资在2000到3000之间的员工信息
select * from emp where sal between 2000 and 3000;
4.is null关键字:空值(NULL)从技术上来说就是未知的、不确定的值,但空值与空字符串不同,空值是不存在的值,而空字符串是长度为0的字符串
--查询emp表中comm为null的员工
select * from emp where comm is null;
c.逻辑筛选(可以把多个筛选条件组合起来,便于用户获取更加准确的数据记录)
1.and(逻辑与的关系)
--在emp表中使用and运算符查询工资在2000到3000之间的员工信息
select * from emp where sal>=2000 and sal<=3000;
2.or(逻辑或的关系)
--在emp表中使用or运算符查询工资小于2000或工资大于3000的员工信息
select * from emp where sal<2000 or sal>3000;
3.not(逻辑非的关系)
③分组查询
a.group by子句:基于指定列的值将数据集合分为多个组,也可以基于多列值分为多个分组
--在emp表中按部门编号进行分组查询
select deptno from emp group by deptno;
b.group by子句与聚合函数:查询列表中非聚合函数列表都应包含在group by列表中
--在emp表中通过分组的方式计算每个部门的平均工资
select deptno 部门编号,avg(sal) 平均工资 from emp group by deptno;
c.having子句:对group by子句选择出来的结果进行再次筛选,having子句中可以包含聚合函数
--在emp表中通过分组的方式计算每个部门的平均工资,再通过having子句筛选出平均工资大于2000的部门信息
select deptno 部门编号,avg(sal) 平均工资 from emp group by deptno having avg(sal)>2000;
④排序查询:关键字asc表示升序(默认),关键字desc表示降序
a.order by子句:多组排序时,第一个排序项是主要排序依序,其次那些是次要的排序依据
--查询emp表中的所有员工信息,按照部门编号、员工编号进行排序
select * from emp order by deptno,empno;
b.排名
1.有并列,不连续的排名
--根据工资对员工进行排名
select e.*,rank() over(order by sal desc) 名次 from emp e;
--根据部门对每个部门的员工进行排名
select e.*,rank() over(partition by deptno order by sal desc) 名次 from emp e;
2.有并列,有连续的排名
--根据工资对员工进行排名
select e.*,dense_rank() over(order by sal desc) 名次 from emp e;
--根据部门对每个部门的员工进行排名
select e.*,dense_rank() over(partition by deptno order by sal desc) 名次 from emp e;
3.无并列,有连续的排名
--根据工资对员工进行排名
select e.*,row_number()over(order by sal desc,empno asc) 名次 from emp e;
--根据部门对每个部门的员工进行排名
select e.*,row_number()over(partition by deptno order by sal desc,empno asc) 名次 from emp e;
⑤多表关联查询
a.表别名(from子句最先执行,然后才是where子句和select子句)
--查询出job为"MANAGER"的员工信息和部门编号
select e.*,d.deptno from emp e,dept d where e.deptno=d.deptno and e.job='MANAGER';
b.内连接:join...on(join表示两个表之间的连接,on表示实现内连接的“连接条件”,查询结果中,所有的记录行都是满足连接条件的)
--查询出job为"MANAGER"的员工信息和部门编号
select e.*,d.deptno from emp e join dept d on e.deptno=d.deptno where job='MANAGER';
c.外连接:外连接扩展了内连接的结果集,除了返回所有匹配的行外,还会返回一部分或全部不匹配的行
1.左外连接:left join...on(以左表为主)
--使用左外连接查询emp表和dept表的员工信息
select e.*,d.* from emp e left join dept d on e.deptno=d.deptno;
2.右外连接:right join...on(以右表为主)
--使用右外连接查询emp表和dept表的员工信息
select e.*,d.* from emp e right join dept d on e.deptno=d.deptno;
3.完全外连接:full join...on(会先执行一个完整的左外连接和右外连接查询,然后将查询结果合并,并消除重复的记录行)
--使用完全外连接查询emp表和dept表的员工信息
select e.*,d.* from emp e full join dept d on e.deptno=d.deptno;
d.自连接
--查询所有emp表中所有管理者的下属员工
select e1.empno,e1.ename,e2.empno,e2.ename from emp e1 join emp e2 on e1.empno=e2.mgr;
--找出员工为7788的上司信息
select e2.* from emp e1 join emp e2 on e1.mgr=e2.empno where e1.empno=7788;
⑥子查询:子查询中不能包含order by子句
--在emp表中查询部门名称为"RESEARCH"的员工信息
select * from emp e where e.deptno=(select d.deptno from dept d where d.dname='RESEARCH');
--在emp表中查询部门名称为"RESEARCH"的员工信息
select e.* from emp e join dept d on e.deptno=d.deptno where d.dname='RESEARCH';
a.单行子查询
--在emp表中查询既不是最高工资,也不是最低工资的员工信息
select * from emp where sal>(select min(sal) from emp) and sal<(select max(sal) from emp)
b.多行子查询:使用多行子查询时,必须使用多行运算符(in、any、all、exists)
1.in运算符:只要子查询中任何一个匹配成功,外查询都会返回记录
--在emp表中查询不是销售部门"SALES"的员工信息
select * from emp where deptno in(select deptno from dept where dname<>'SALES');
2.any运算符:必须与单行比较运算符结合使用,并且返回行只要匹配子查询的任何一个结果即可
--在emp表中查询工资大于部门编号为10的任意一个员工工资的其他部门员工信息
select * from emp where sal>any(select sal from emp where deptno=10) and deptno<>10;
3.all运算符:必须与单行比较运算符结合使用,并且返回行必须要匹配所有子查询结果
--在emp表查询工资大于部门编号为30的所有员工工资的员工信息
select * from emp where sal>all(select sal from emp where deptno=30)
4.exists运算符:匹配后面的子句是否为真,为真就返回
--emp表和dept表关联并判断当deptno>20时的员工信息
select * from emp e where exists(select * from dept d where e.deptno = d.deptno and deptno > 20)
注:in和exists的区别
使用exists时,oracle首先会检查主查询,然后运行子查询,找到匹配项就返回。而在执行in查询时,
先将主表挂起,然后执行子查询,并将获得的结果列表放在一个加了索引的临时表中,当子查询结束后再
去进行主表查询,所以当表的数据量比较大时,exists查询比in查询要快。
c.关联子查询
--查询工资大于同职位平均工资的员工信息
select * from emp e where sal>(select avg(sal) from emp where job=e.job) order by e.job;
⑦ 分页查询
--对emp表进行分页查询
select * from (select e.*,rownum rn from emp e) where rn>=6 and rn<=10
六、数据控制语言(DCL)
关键字:grant、revoke
1、grant
grant select,update on emp to alex;
2、revoke
revoke select,update on emp from alex;
七、事务控制语言(TCL)
关键字:commit、savepoint、rollback
1、事务
commit --提交事务
rollback --回滚当前未被提交的操作
savepoint a
--设置保存点
rollback to a
--回滚到保存点
注:当使用rollback取消事务时,会取消所有的事务变化、结束事务,删除所有保存点并释放锁
2、锁
锁是数据库用来控制共享资源并发访问的机制,在提交或回滚事务之前,oracle会锁定正被修改的数据,在用户完成或回滚事务之后,锁
会自动释放,只有在提交或回滚事务之后,其他用户才可以更新这些数据
①
行级锁:只对用户正在访问的行进行锁定,如果该用户正在修改某行,那么其他用户只能更改同一个表中的其它数据。行级锁是一种
排他锁,防止其他事务修改此行,但是不会阻止读取此行的操作,在使用insert,update,delete时,oracle会自动应用行级锁
--使用行级锁为多行上指定列上锁
select * from emp where deptno=20 for update of sal,comm;
②
表级锁:表级锁会限制对整个表的访问,用来限制对表执行添加,更新和删除等操作,锁定模式如下:
a.行共享(row share,rs):允许其他用户访问和锁定表,但是禁止排他模式锁定整个表
b.行排他(row exclusive,rx):与行共享模式相同,同时禁止其他用户在此表上使用共享锁
c.共享(share,s):锁定表,仅允许其他用户查询表中的行,但不允许插入、更新和删除行
d.共享行排他(share row exclusive,syx):执行比共享锁更多的限制,防止其他用户在表上应用共享锁,共享行排他锁以及排他锁
e.排他(exclusive,x):对表执行最大限制,除了允许其他用户查询该表的记录,排他锁防止其他用户对表做任何更改或在表上应用任何类
型的锁
例:lock table emp in share mode nowait;
八、数据完整性约束
一、非空约束:限制必须为某个列提供值,默认为null(可以为空)
1、创建表并添加非空约束
create table tb_user(
u_no number(4) not null,
u_name varchar2(20) not null,
u_sex varchar2(3) not null,
u_phone varchar2(11)
);
2、为tb_user表中的u_phone列添加非空约束:如果该列中已经存在null则无法向该列添加not null约束
alter table tb_user modify u_phone not null;
3、删除tb_user表中u_phone列的非空约束(就等于修改列的值可以为空)
alter table tb_user modify u_phone null;
二、主键约束:可以由一个列组成(行级约束),也可以由两个以上的列组成(联合主键,表级约束),主键约束同时具有非空约束的特性
1、创建表并为该表定义主键约束user_pk(主键列为u_no)
create table tb_user(
u_no number(4),
u_name varchar2(20),
u_sex varchar2(3),
u_phone varchar2(11),
constraint user_pk primary key(u_no) --创建主键和主键约束(如果主键约束的列有多个,多个列之间使用“,”分隔即可)
);
2、如果创建表时未定义主键约束,为表添加主键约束
alter table tb_user add constrant user_pk primary key(u_no);
3、系统自动分配名称的主键约束
create table tb_user(
u_no number(4) primary key,
u_name varchar2(20),
u_sex varchar2(3),
u_phone varchar2(11)
);
4、如果创建表时未定义主键约束,为表添加系统自动分配名称的主键约束
alter table tb_user add primary key(u_no);
5、删除主键约束
alter table tb_user drop constraint user_pk;
三、唯一性约束:强调所在列不允许有相同的值,但它所在的列允许有空值(主键约束不允许有空值),如果唯一约束列添加了
not null约束,该列唯一约束就相当于主键约束
1、创建tb_user表并为表添加唯一约束
create table tb_user(
u_no number(4) primary key,
u_name varchar2(20),
u_sex varchar2(3),
u_phone varchar2(11) constraint phone_uk unique --设置为unique约束
(u_phone varchar2(11) unique)
--系统自动分配名称的unique约束
);
2、为tb_user表添加唯一约束
alter table tb_user add constraint phone_uk unique(u_phone); --(如果主键约束的列有多个,多个列之间使用“,”分隔即可)
3、删除列的唯一约束
alter table tb_user drop constraint phone_uk;
四、外键约束:外键是指“当前表”引用“另一个表”的某个列或某几个列,而“另一个表”中被引用的列必须具有主键或者唯一约束
1、创建tb_emp并参照tb_dept表添加外键约束
create table tb_dept(
dept_no number primary key
);
create table tb_emp(
emp_no number primary key,
emp_name varchar2(20),
emp_age number,
dept_no number (references tb_dept)--系统自动分配名称的外键约束
);
alter table tb_emp add constraint emp_fk foreign key(dept_no) references tb_dept(此为参照列名,与此表外键列名相同时省略);
2、当尝试删除被引用表中的一条记录时,通过引用行为可以确定如何处理外键表中的外键列,引用行为的类型分以下3种:
①定义外键约束时,使用了no action关键字:当删除被引用表中被引用列的数据时,违反外键约束,该操作将被禁止,系统默认
②定义外键约束时,使用了set null关键字:当删除被引用表中被引用列的数据时,外键表中的外键列将被设置为null
(外键列必须支持null值)
③定义外键约束时,使用了cascade关键字:当删除被引用表中被引用列的数据时,外键表中对应的数据也将被删除,这种删除方式
通常称作“级联删除”
示例:级联删除
create table tb_dept(
dept_no number primary key
);
insert into tb_dept values(10);
create table tb_emp(
emp_no number primary key,
emp_name varchar2(20),
emp_age number,
dept_no number (references tb_dept on delete cascade)--系统自动分配名称的外键约束
);
insert into tb_emp values(1,'alex',25,10);
alter table tb_emp add constraint emp_fk foreign key(dept_no) references tb_dept on delete cascade;
delete tb_dept where dept_no=10;
3、删除tb_emp表的外键约束
alter table tb_emp drop constraint emp_fk;
五、默认约束
sex char(3) default '男' --默认约束
六、检查约束
age number check(age>18) --检查约束
五、禁用和激活约束:约束默认是激活的
1、在定义约束时禁用
create table tb_emp(
emp_no number primary key disable,
--加上disable代表禁用
emp_name varchar2(20),
emp_age number,
dept_no number
);
2、禁用已经存在的约束
alter table tb_emp disable constraint emp_fk;
注:
①在禁用主键约束时,oracle会默认删除约束对应的唯一索引,而在重新激活约束时,oracle将会重新建立唯一索引,如果希望在
删除时保留对应的唯一索引,可以在禁用约束时使用关键字keep index(通常放在约束名称的后面)
②在禁用唯一性约束或主键约束时,如果有外键约束正在引用该列,则无法禁用唯一性约束或主键约束,这时可以先禁用外键约束,然后
再禁用唯一约束或主键约束;又或者在禁用唯一性约束或主键约束时使用cascade关键字,这样可以级联禁用引用这些列的外键约束
3、激活已经禁用的约束
alter table tb_emp enable constraint emp_fk;
九、视图、索引和序列
一、序列:通常用来自动生成主键或唯一键的值
1、创建序列
create sequence seq_stu
start with 0 --指定要生成的第一个序列号,升序序列默认为最小值,降序序列默认为最大值
increment by 1 --指定序列号之间的间隔,默认为1
maxvalue 100 --指定序列可以生成的最大值
minvalue 0 --指定序列的最小值,必须小于等于start with的值,必须小于maxvalue
nocycle/cycle --指定序列在达到最大值或最小值后是否继续从头开始生成值,默认为nocycle
cache/nocache; --预先分配一组序列号,将其保留在内存中,可以更快的访问序列号,用完时,oracle会生成另一组数组,保留在缓存中,系统默认是缓存20个序列号
2、访问序列号
a.nextval:创建序列后第一次使用时,将返回该序列的初始值,后面在引用时将使用increment by子句的值来增加序列值,并返回新值
select seq_stu.nextval from dual;
b.currval:返回序列的当前值,即最后一次引用nextval时返回的值,没有引用nextval时不会返回
select seq_stu.currval from dual;
3、更改序列
alter sequence ...
alter sequence seq_stu
maxvalue 1000;
4、删除序列
drop sequence ...
drop sequence seq_stu;
二、视图:获取查询的输出结果,并将其作为表来处理,它是一种虚拟表,创建视图所依据的表被称为“基表”
1、创建视图
create or replace (force/noforce) view view_emp
--or replace 如果视图已存在,此选项将重新创建该视图,如果使用force关
键字,则无论基表是否存在,都将创建视图,默认为noforce
as
select e.*,d.dname,d.loc from emp e inner join dept d on e.deptno=d.deptno
(with read only); --此选项确保不能在视图上执行任何修改操作
2、删除视图
drop view view_emp;
三、索引
1、索引简介
数据库的索引有多种类型,常见的索引包括顺序文件上的索引、B+树索引、散开索引、位图索引等。
A.顺序文件上的索引
它是针对按指定属性值升序或降序存储的关系,在该属性上建立一个顺序索引文件,索引文件由属性值和相应的元组指针组成。
B.B+树索引
它是将索引属性组织成B+树形式,B+树的叶结点为属性值和相应的元组指针,B+树具有动态平衡的优点。
C.散列索引
它是建立若干个索引桶,将索引属性值按照散列函数值映射到相应的桶中,桶中存储索引属性值和相应的元组指针。
D.位图索引
它是用位向量记录索引属性中可能出现的值,每个位向量对应一个可能的值。
2、创建索引
create unique/bitmap(位图索引) index ind_ename
on emp(ename,sal) --列名必须
(where 条件表达式);
3、修改索引
alter index ind_ename rebuild; --重建索引
alter index ind_ename coalesce; --合并索引
4、删除索引
drop index ind_ename;
最后
以上就是踏实星星为你收集整理的Oracle使用(二)—— 一些常用的SQL命令和基础知识(包含权限、序列、视图、索引、完整性约束、事务等)的全部内容,希望文章能够帮你解决Oracle使用(二)—— 一些常用的SQL命令和基础知识(包含权限、序列、视图、索引、完整性约束、事务等)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复