3.创建一个用户。
(1)在登陆sqlplu后,输入:create user somename identified by pwd;
即创建了一个用户名为somename,密码为 pwd 的用户
(2)为用户授予权限:
grant create session to
somename
; //
授予
somename
连接数据的权限
或为用户授予角色:grant dba to
somename;
(3)修改用户密码:alter user somename identified by otherpwd;
(4)删除用户:drop user somename;
(5)显示用户所拥有的表:select table_name from dba_tables where owner='somename';
(6)显示所有用户:select username from dba_users;
4.查看当前登陆相关信息
(1)查看当前登录数据库 show parameter db_name;
或 select name from v$database;
(2)查看当前sid和servicename select sid from v$mystat where rownum <=1;
show parameter service
(3)
查看数据库中的所有表 select * from tab;
(4)查看当前数据库版本 select * from product_component_version
5.新建表以及数据操作同标准sql在这里不再赘述。
(1)但是oracle很多地方还是很让人恶心的,比如设定主键自动增长机制。需要用的sequence和trigger,即序列和触发器。这要比起mysql的auto_increment和sql server的identity(1,1)的方便性比较,简直就是十分值得抱怨的事情。好了,现在说怎么实现orcale建表主键的自动增长的例子
a)建立表 create table xtest(id int not null primary key, name varchar(20));
b)建立序列
create sequence xtest_seq
minvalue 1
maxvalue 999999999
start with 1
increment by 1
cache 20;
c)建立触发器
create or replace trigger xtest_trigger before
insert on xtest for each row when(new.id is null)
begin
select xtest_seq.nextval into :new.id from dual;
end;
/
分析原理:主键自动增长是用sequence来完成的,这需要我们在插入的时候指定用哪个sequence来给予值。于是就需要触发器来做这些事情。触发器类似与存储过程,但负责监听。比如上面的触发器监听xtest表的插入事件。当然,我们也可以不用触发器,直接insert into xtest(id, name) values(xtest_seq.nextval, 'johntor');了事。但是谁又会喜欢去写如此的sql语句呢!
(2)显示表设计 desc 表名
这个mysql也有,不用多说。全称命令是describe。
(3)显示已经建立的sequence select * from user_sequences;
可以有where语句如 where sequence_name = 'YOUR_SEQ_NAME'
(4)关于删除表
我们都会知道用sql如:drop table tablename; ok,执行后,数据库提示你执行成功了,但是在查询一下你的所有表select * from tab;会发现,多了一个类似“
BIN$YkN4S58dTPC/vBboMCNh0A==$0”名字的表
。奇怪吗,其实也不,自己在第一时间想到的就是oracle为了安全起见,让你恢复表数据用
的,事实也的确如此。
a)我们用flashback table "BIN$YkN4S58dTPC/vBboMCNh0A==$0" to before drop;命令乐意恢复我们刚才删除的表。也就是说,我们用的删除语句把一个结构相同而其重命名的表放进了回收站。
b)drop table tablename purge;
可以绕过回收站,直接删除。这样就不能恢复了。
c)执行 purge recyclebin;
命令可清空当前用户的回收站。执行purge table tablename;
命令可以清除回收站内指定的表。记住这里的tablename不是那个很长的字符串,而是自己原来删除前表的是进名字。
6.关于表空间
(1)查询现有表空间情况的sql语句如下:
select
total.tablespace_name tsname,
count(free.bytes) nfrags,
nvl(max(free.bytes)/1024,0) mxfrag,
total.bytes/1024 totsiz,
nvl(sum(free.bytes)/1024,0) avasiz,
(1-nvl(sum(free.bytes),0)/total.bytes)*100 pctusd
from
dba_data_files total,
dba_free_space free
where
total.tablespace_name = free.tablespace_name(+)
group by
total.tablespace_name,
total.bytes;
当然可以用一句话来看都有什么表空间 select tablespace_name from dba_data_files;