Oracle 常用SQL命令


創建表空間

1.創建默認表空間WLP_DAT

CREATE TABLESPACE "MYSPACE" DATAFILE
'D:\oracle\oradata\orcl\data/WLP_DAT.dbf' SIZE 32M REUSE AUTOEXTEND ON NEXT 32M
LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

2.創建臨時表空間WLP_TEMP(用於緩存,可以不建)

ALTER TABLESPACE "TEMP" ADD TEMPFILE
'D:\oracle\oradata\orcl\data/WLP_TEMP.dbf' SIZE 32m REUSE autoextend on next 32m;

創建用戶並授權

 1 CREATE USER "WLPING" PROFILE "DEFAULT" 
 2 IDENTIFIED BY "123456"
 3 DEFAULT TABLESPACE "MYSPACE"  //默認指定表空間
 4 TEMPORARY TABLESPACE "TEMP"  //指定緩存表空間
 5 ACCOUNT UNLOCK;   //用戶非鎖定
 6 
 7 GRANT EXECUTE ON dbms_comparison TO "WLPING";
 8 GRANT UNLIMITED TABLESPACE TO "XIR_MD";
 9 GRANT "CONNECT" TO "XIR_MD";
10 GRANT "RESOURCE" TO "XIR_MD";
11 
12 -- GRANT DBA TO XIR_MD;

PROFILE:Oracle系統中的profile可以用來對用戶所能使用的數據庫資源進行限制,使用Create Profile命令創建一個Profile,用它來實現對數據庫資源的限制使用,如果把該profile分配給用戶,則該用戶所能使用的數據庫資源都在該profile的限制之內。具體管理內容有:CPU的時間、I/O的使用、IDLE TIME(空閑時間)、CONNECT TIME(連接時間)、並發會話數量、口令機制等。

用戶管理

oracle內部有兩個建好的用戶:system和sys。用戶可直接登錄到system用戶以創建其他用戶,因為system具有創建其他用戶的權限。 在安裝oracle時,用戶或系統管理員首先可以為自己建立一個用戶。

※ 使用sys as sysdba 可以獲得數據庫最高權限

 

一、創建用戶

語法[創建用戶]: create user 用戶名 identified by 口令[即密碼];

例子: create user test identified by test;

語法[更改用戶]: alter user 用戶名 identified by 口令[改變的口令];

例子: alter user test identified by 123456;

 

二、刪除用戶

語法:drop user 用戶名;

例子:drop user test;

若用戶擁有對象,則不能直接刪除,否則將返回一個錯誤值。指定關鍵字cascade,可刪除用戶所有的對象,然后再刪除用戶。

語法: drop user 用戶名 cascade;

例子: drop user test cascade;

 

三、授權角色

oracle為兼容以前版本,提供三種標准角色(role):connect/resource和dba.

(1)講解三種標准角色:

1》. connect role(連接角色)

--臨時用戶,特指不需要建表的用戶,通常只賦予他們connect role. 

--connect是使用oracle簡單權限,這種權限只對其他用戶的表有訪問權限,包括select/insert/update和delete等。

--擁有connect role 的用戶還能夠創建表、視圖、序列(sequence)、簇(cluster)、同義詞(synonym)、回話(session)和其他  數據的鏈(link)

 

2》. resource role(資源角色)

--更可靠和正式的數據庫用戶可以授予resource role。

--resource提供給用戶另外的權限以創建他們自己的表、序列、過程(procedure)、觸發器(trigger)、索引(index)和簇(cluster)。

 

3》. dba role(數據庫管理員角色)

--dba role擁有所有的系統權限

--包括無限制的空間限額和給其他用戶授予各種權限的能力。system由dba用戶擁有

 

(2)授權命令

語法: grant connect, resource to 用戶名;

例子: grant connect, resource to test;

(3)撤銷權限

語法: revoke connect, resource from 用戶名;

列子: revoke connect, resource from test;

 

角色管理

四、創建/授權/刪除角色

除了前面講到的三種系統角色----connect、resource和dba,用戶還可以在oracle創建自己的role。用戶創建的role可以由表或系統權限或兩者的組合構成。為了創建role,用戶必須具有create role系統權限。

1》創建角色

語法: create role 角色名;

例子: create role testRole;

2》授權角色

語法: grant select on class to 角色名;

列子: grant select on class to testRole;

注:現在,擁有testRole角色的所有用戶都具有對class表的select查詢權限

3》刪除角色

語法: drop role 角色名;

例子: drop role testRole;

注:與testRole角色相關的權限將從數據庫全部刪除

表操作

一、創建表

 1 CREATE TABLE MY_TABLE (
 2 ID NUMBER(10) PRIMARY KEY,
 3 NAME VARCHAR2(50) NOT NULL,
 4 BIRTHDAY DATE
 5 );
 6 // 表名注釋
 7 COMMENT ON TABLE my_table IS '個人信息表';
 8 // 字段名注釋
 9 COMMENT ON COLUMN MY_TABLE.ID IS 'ID';
10 COMMENT ON COLUMN MY_TABLE.NAME IS '姓名';

組合主鍵約束:CONSTRAINT PK_MY_TABLE PRIMARY KEY (column1,column2)

 

二、修改約束

禁用約束 disable constraint 約束名字;

刪除約束 drop constraint 約束名字;

新增約束 alter table <表名 > add constraint  <主鍵名>

約束介紹

1.主鍵約束:
要對一個列加主鍵約束的話,這列就必須要滿足的條件就是分空
因為主鍵約束:就是對一個列進行了約束,約束為(非空、不重復)
以下是代碼   要對一個列加主鍵,列名為id,表名為emp

格式為:
alter table 表格名稱 add constraint 約束名稱 增加的約束類型 (列名)
例子:
alter table emp add constraint ppp primary key (id)
————————————————————————————————
2.check約束:
就是給一列的數據進行了限制
比方說,年齡列的數據都要大於20的
表名(emp) 列名(age)
格式:
alter table 表名稱 add constraint 約束名稱 增加的約束類型 (列名)
例子:
alter table emp add constraint xxx check(age>20)
______________________________________________________________________
3.unique約束:
這樣的約束就是給列的數據追加的不重復的約束類型
格式:
alter table 表名 add constraint 約束名稱 約束類型(列名)
比方說可以給ename列加個unique,讓ename列的數據不重復
例子:
alter table emp add constraint qwe unique(ename)
————————————————————————————————
4.默認約束:
意思很簡單就是讓此列的數據默認為一定的數據
格式:
alter table 表名稱 add constraint 約束名稱 約束類型 默認值) for 列名
比方說:emp表中的gongzi列默認為10000
alter table emp add constraint jfsd default 10000 for gongzi
————————————————————————————————
5.外鍵約束:
這個有點難理解了,外鍵其實就是引用
因為主鍵實現了實體的完整性,
外鍵實現了引用的完整性,
應用完整性規定,所引用的數據必須存在!
其實就是個引用,
比方說一個表名稱叫dept 里面有2列數據 一列是ID一列是ENAME
id:表示產品的編號
ename:表示產品的名稱
另外一個表格名稱是emp 里面有2列數據,一列是ID 一列是DID
id:表示用戶號
did:表示購買的產品號
要讓emp表中的did列去引用dept表中的id
可以用下面的方法
格式:
alter table 表名 add constraint 約束名稱 約束類型 (列名) references 被引用的表名稱(列名)

例子:

alter table emp add constraint jfkdsj foreign key (did) references dept (id)

三、操作表

 rename 表名 to 表名  //修改表名
 
 truncate table 表名  //刪除表中的所有數據,速度比delete快很多,截斷表
 
 drop table 表名  //刪除表

四、修改字段

 alter table 表名 modify (字段 字段類型);  -- 修改字段數據類型
 
 alter table 表名 rename column 列名 to 列名 --修改字段名
 
 alter table 表名 add 列名 字段類型; --增加字段
 
 alter table 表名 drop column 字段名;  -- 刪除字段

五、修改數據

 insert into 表名(值1,值2) values(值1,值2);   // 插入數據
 
 update 表名 set 字段=[修改條件]   //修改數據
 
 delete from table  where 條件  //刪除數據

 

六、查詢

 /* 獲取表:*/
 
 select table_name from user_tables; //當前用戶的表
 
 select table_name from all_tables; //所有用戶的表
 
 select table_name from dba_tables; //所有表,包括系統表(需要dba權限)
 
 select table_name from dba_tables where owner='WLPING';  //某個用戶的表,包括所有的系統表(需要dba權限)

 

/*查詢系統時間*/

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; 

導入導出

總結: EXP和IMP是客戶端工具程序,它們既可以在客戶端使用,也可以在服務端使用。
EXPDP和IMPDP是服務端的工具程序,他們只能在ORACLE服務端使用,不能在客戶端使用。
IMP只適用於EXP導出的文件,不適用於EXPDP導出文件;IMPDP只適用於EXPDP導出的文件,而不適用於EXP導出文件。
EXP不能導出分區表,而EXPDP可以

一、導入dmp文件

imp

1)imp 用戶名/密碼@服務器IP:端口/服務名  file=dmp文件路徑;

imp username/password@127.0.0.1:1521/orcl file=D:\oracle\admin\orcl\dpdump\a.dmp;

2)將exp_export.dmp 中的表table1,table2導入

imp system/manager@hostname:1521/ora11g file=exp_export.dmp tables=table1,table2  

impdp

1)導到指定用戶下

impdp scott/tiger DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp SCHEMAS=scott;  

2)改變表的owner

impdp system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;  

3)導入表空間

impdp system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp TABLESPACES=example;  

3)導入整個庫文件

 

impdb system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp full=y; 

 

二、導出dmp文件

※ 導入導出指定日志輸出文件 log=exp_export.log  

※ 在導出命令后面加上 compress=y  可以對導出文件進行壓縮

1.導出整個數據庫實例下的所有數據
2.導出指定用戶的所有表
3.導出指定表

exp

1)將數據庫ORACLE完全導出

exp sysuser/password@127.0.0.1:1521/ORCL file=D:d:\daochu.dmp full=y;

2)將數據庫中WLP用戶與,WLPING用戶的表導出

 

exp username/password@127.0.0.1:1521/ORCL file=d:\daochu.dmp   owner=(WLP,WLPING);

 

3)將數據庫中的表table1、table2導出

exp sysuser/password@127.0.0.1:1521/ORCL file= d:\data\newsmgnt.dmp tables=(table1,table2);

4)將數據庫中的表table1中的字段filed1以"00"打頭的數據導出

exp system/manager@loaclhost:1521/orcl file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\" log=exp_export.log;

expdp

創建邏輯目錄(默認為oracle用戶空間下的dpdump目錄)

create directory DUMP_DIR as '/oracle/DUMP_DIR';  

在服務器上創建該目錄,因為Oracle並不會自動創建,如果目錄不存在導出會報錯

  • mkdir -p /oracle/DUMP_DIR 

給用戶授予在該目睹讀取的權限

  • grant read,write on directory DUMP_DIR to scott; 

1)導整個數據庫

expdp system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp FULL=y;

2)按用戶導

expdp scott/tiger@localhost:1521/ora11g schemas=scott dumpfile=expdp_export.dmp DIRECTORY=DUMP_DIR;

3)並行進程parallel

 

expdp scott/tiger@localhost:1521/ora11g directory=DUMP_DIR dumpfile=expdp_export.dmp parallel=40 job_name=expdp40;

 

4)按表名導

expdp scott/tiger@localhost:1521/ora11g TABLES=emp,dept dumpfile=expdp_export.dmp DIRECTORY=DUMP_DIR;

5)按查詢條件導

expdp scott/tiger@localhost:1521/ora11g directory=DUMP_DIR dumpfile=expdp_export.dmp tables=emp query='WHERE deptno=20';

6)按表空間導

expdp system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp TABLESPACES=temp,example;

序列

 新建序列

  CREATE SEQUENCE 序列名

  [INCREMENT BY n]    //步長 默認1  非零

  [START WITH n]      //開始值

  [{MAXVALUE/ MINVALUE n| NOMAXVALUE}]  //最大值/最小值

  [{CYCLE|NOCYCLE}]    //到達最大值是否循環,不循環時直接報錯

  [{CACHE n| NOCACHE}];  //默認20,當有大量請求時使用緩存,預先生成多個序列提供使用,斷開連接后會丟失未使用的序列值,導致序號不連續。

 實例:

1 create sequence seq_my_define
2 minvalue 1
3 nomaxvalue
4 start with 1
5 increment by 1
6 nocycle
7 nocache;

查詢序列當前值

select  seq_my_define.currval from dual;

查詢下一增長值(提醒,這里雖然是查詢,但序列值會改變,相當於++i):

select  seq_my_define.nextval from dual;

觸發器

主鍵自增:oracle沒有主鍵自增選項,需要自己使用觸發器實現

1 CREATE OR REPLACE TRIGGER tr_my_define
2 BEFORE INSERT ON MY_WMPS_DEFINE FOR EACH ROW
3 begin
4     select seq_my_define.nextval into:new.id from dual;
5 end;

 

變量使用:

例子:將序列S_BOND_POOL_TREE的當前值與數據庫ID最大值統一

變量可以在定義時賦值,也可以后面再賦值。

通過select語句將查詢結果賦值給變量:select 字段名 into 變量名 from 表

execute immediate 'str'; //可以使用變量拼接字符串得到語句來執行

 1 DECLARE
 2   n NUMBER :=0;
 3 BEGIN
 4   select (num - S_BOND_POOL_TREE.nextval) into n
 5   from(
 6     select max(to_number( node_id)) as num from  XIR_TRD_J.TREE_NODE_INFO
 7   );
 8   IF n = 0 then return;
 9   ELSE
10     execute immediate 'alter sequence S_BOND_POOL_TREE increment by '|| n;
11     select S_BOND_POOL_TREE.nextval into n from dual; 
12     execute immediate 'alter sequence S_BOND_POOL_TREE increment by 1';
13   END IF;
14 END;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM