最近在学习Oracle,该博客会慢慢更新。。。
1、获取建表DDL的SQL
select dbms_metadata.get_ddl('TABLE','TEST','SCOTT') from dual;
2、查看系统当中有哪些账号
select * from dba_users;
3、查看当前用户拥有的系统权限
select * from user_sys_privs;
4、查看当前用户拥有的对象权限
select * from user_tab_privs;
5、查看当前用户拥有的角色
select * from user_role_privs;
6、查看角色拥有什么角色
select * from role_role_privs;
7、查看角色拥有什么对象权限
select * from role_tab_privs;
8、查看角色拥有什么系统权限
select * from role_sys_privs;
9、创建账号
create user test identified by oracle;--创建一个账号 test/oracle
10、默认创建的用户是没有登录权限的,需要dba进行授权
grant create session to test;--只是赋予了登录权限,还不能创建表,
可以使用select * from user_sys_privs;语句进行查看,系统权限一般是DBA要干的事情,DBA一般需要掌握80%的权限,初学者请绕过,小心处理。
grant create table to test;执行这句之后test用户就可以创建表了,但是没有想过查询的权限,比如说select * from scott.emp;是会报权限不足错误,需要执行grant select on scott.emp to test;以上grant语句执行都是在超级管理员用户下进行授权的。
11、回收权限
revoke XXX from 账号/角色;
授权的语法是
grant XXX to 账号/角色:
当你入职了,一般会给你分配一个账号(拥有一个角色),遇到权限不足的时候,找DBA给你授权。在Oracle中,SYS权限最高,权限第二高的是dba,可以直接 grant dba to test;不过一般不会这么干!这样执行之后,test用户就能干任何事情,但是不能shutdown immediate/startup
12、查看dba拥有的角色权限
select * from dba_role_privs;
13、查看dba数据库的对象
select * from dba_objects;
14、查看当前用户拥有的对象
select * from user_objects;
15、创建和删除索引
create table test as select * from dba_objects;
select count(*) from test;--求test表一共有多少行数据
create index idx_id on test(object_id);--创建索引
索引是用来提升查询性能的,不是绝对的,不一定比逐行扫描快。缺点:占用磁盘空间
--查看用户下的某一张表的索引
select index_name,column_position,descend,column_name from dba_ind_columns where table_owner='SCOTT' and table_name='DEPT' order by 1,2;
删除索引
drop index idx_id;
16、视图
视图的目的:
一、给开发人员偷懒用的,我们可以先定义视图,而不用在查询的时候写一大堆的sql查询语句。
二、控制权限。我们可以定义一个视图,然后授权该访问视图的权限,这样就达到了只能访问部分数据,达到控制权限的功能。
创建视图
create or replace view emp_new as select * from emp where sal<2000;
grant select on emp_new to test;
查看视图的源码(SQL)
select * from dba_views where view_name='EMP1';--dba_views为数据库所有的视图
17、同义词(synonym)
select or replace synonym sb for emp;
查看同义词的定义
select * from dba_synonyms where synonym_name='SB';--这里是大写
同义词的删除
drop synonym sb;
18、序列
创建序列
create sequence seq_id start with 1 increment by 1 maxvalue 10000000000;
可以通过select * from user_objects;查看新建的序列。
select seq_id,nextval from dual;--启用查询下一次的序列值
select seq_id.currval from dual;--查看当前序列的值
select * from dba_sequences where sequence_name='SEQ_ID';
专业墙纸贴纸厨房用具装饰出售,本人网店经营
博客对你有用记得访问下哦,增加下访问量,如有需要可以下单购买哦^_^。https://item.taobao.com/item.htm?id=569617707364