oracle(2)oracle的基礎入門
1.sys與system
system系統管理用戶,sys超級用戶,sys賬號比system賬戶的權限更多,在oracle11以後沒有了scott用戶
2.表的導入導出
imp 用戶名/密碼@服務名 file=數據庫表.dmp存放的地址 ignore=y full=y //導入
exp 用戶名/密碼@服務名 tables=表名 file=存入本地dmp目標地址 log=存入本地log目標地址 owner=要導出的用戶名//導出
PL/SQL Developer工具導出: 菜單欄---->Tools---->Export Tables//導出
PL/SQL Developer工具導出: 菜單欄---->Tools---->import Tables //導入
3.oracle對大小寫以及大於等於
sql 語言大小寫不敏感(例如關鍵字,字段名,表名(mysql這個默認是敏感的)),sql 可以寫在一行或者多行,關鍵字不能被縮寫也不能分行,sql只有<=沒有>=,只有>,但是對例如字段內容敏感(mysql默認是不敏感的)
4.null代表的含義(與mysql一樣)
空值是無效的,空值不是空格或者0,任何一個值與空運算結果都是null
5.‘’與""
字符,日期只能是單引號,別名對於特殊(字段名,關鍵字等)需要使用雙引號。
6.||
||符類似concat或者java中的+
7.escape
escape轉義字符,類似java與mysql中的\;
8.時間函數
next_day(date,week) //指定日期的下一個星期對應的日期,日期默認格式是dd-mm -yyyy
months_between(date1,date2) // 兩個日期相差的月數
last_day(date) //本月的最後一天
add_months(date,month)//向指定日期中加上若幹月數
to_char(date, ‘format_model‘) //轉換時間: yyyy年, mm月,dd日,day星期 ,hh小時,mi分鐘 ,ss 秒;轉換成數字:9數字//存在則取代,不存在則沒有 ,0零//不存在用0取代,$美元符,L本地貨幣符號,.小數點,,千位符
trunc (sysdate ,‘year‘) //日期截斷,
to_date (char, ‘format_model‘)//格式需要滿足一致yyyy年, mm月,dd日,day星期 ,hh小時,mi分鐘 ,ss 秒
備註:日期上加上或減去一個數字結果仍為日期,兩個日期相減返回日期之間相差的天數。兩個日期之間不能做加法。
9.其他一些函數
lpad(數值,10,字符) //不足10位左邊補字符,10自定義
rpad(數值, 10, 字符) //不足10位右邊補字符,10自定義
trim(‘h‘ from‘helloworld‘) //去除頭和尾的字符h
replace(‘abcd’,’b’,’m’) //將所有的b替換成m
trunc(45.926, 2) //保留兩位小數,取整
round(45.926, 2) //保留兩位小數,四舍五入
to_number(char, ‘format_model‘)//格式需要滿足一致,$,L可做加法運算
nvl (expr1, expr2) //如果不為空那麽是其本身expr1,為空那麽是expr2,註意oracle中需要expr1和expr2的字段類型一致,否則需要轉型,類似mysql的ifnull
nvl2 (expr1, expr2, expr3)//滿足條件expr1則為expr2,否則為expr3,類似mysql的if
nullif (expr1, expr2)// expr1與expr2相等返回null,不等返回expr1
coalesce (expr1, expr2, ..., exprn) //coalesce表示expr1,為buul則expr12依次下去
10.條件循環
條件表達式同mysql;
case when then 同mysql;
while 條件 loop 循環體 end;//循環
11.連表查詢基本同mysql,cross join 交叉連接同where e,t;using 子句指定等值連接中需要用到的列(相當於where e.deptno=d.deptno);
12.創建表和修改表
1)表名和列名:命名規則
必須以字母開頭
必須在 1–30 個字符之間
必須只能包含 a–z, a–z, 0–9, _, $, 和 #
必須不能和用戶定義的其他對象重名
必須不能是oracle 的保留字
數據類型number為取代mysql的int,double等
varchar2類似於mysql的varchar,也有char
blob 二進制最大4g
clob 字符數據最大4g
long 可變長字符數據,最大2g
date 日期
2)重命名數據表的列
modify,add同mysql
alter table 表名 drop column 列名
alter table 表名 rename column 舊列名 to 新列名
truncate table 表名 //清空數據,不能回滾,delete能回滾
rename 表名 to 新表名;
13.事務
commit開始 或 rollback回滾語句,回滾點為最近的一次commit
savepoint 回滾點名 ,rollback to 回滾點,可以回到相應的回滾位置
備註:
ddl語句(自動提交),不會回滾,回滾是對於dml語句而言,添加事務之後dml所涉及的行被鎖定,類似mysql的innodb,在沒有commit之前其他用戶不能見到自己的修改,自己能見到是讀己之所寫,類似mysql,oracle默認不會自動提交dml語句,需要使用使用commit(mysql默認自動提交)
select * from 表名 for update;//查詢更新後的表,假如這個查詢結果中有被鎖,那麽會被處於阻塞狀態
14.視圖
視圖的創建同mysql,修改沒有的列會產生錯誤與mysql不同(mysql無效,但不會報錯)
組函數,group by子句,distinct 關鍵字,rownum 偽列,列的定義為表達式不能使用update與insert。添加with read only 表示該視圖只讀。
15.序列
類似auto_increment,但又不同,auto_increment必須位於索引之上,且每張表唯一,作用於聯合索引之上排序後相同則自增左1字段,序列, 唯一的數值,可以充當主鍵值,共享對象,裝入內存可以提高訪問效率,首次默認不存在,需要使用nextval之後才能使用currval,不可以修改序列值,需要刪除後重建,可以修改序列的增量, 最大值, 最小值, 循環選項, 或是否裝入內存,序列的裂縫可能出現在多個表使用同一個序列,回滾(回滾對序列無效),系統崩潰。
語法:
create sequence sequence;
[iincrement by n] --每次增長的數值
[start with n] --從哪個值開始
[{maxvalue n | nomaxvalue e}]
[{minvalue n | nominvalu e }]
[{cycle| nocycle}] --是否需要循環
[{cache | nocache}]; --是否緩存登錄
16.索引
刪除一個表時,所有基於該表的索引會自動被刪除,可以通過指針加速 Oracle 服務器的查詢速度,減少磁盤 I/O,索引的創建刪除同mysql
17.同義詞
create synonym 別名 for 表名;//創建,類似給表起別名
drop synonym 別名;//刪除同義詞
18.權限管理
1)創建,修改用戶以及更改密碼
create user 用戶名 identified by 密碼;//添加用戶
alter user 用戶名 identified by 新密碼;//修改密碼
grant 權限 to 用戶名;//賦予權限
一般包括如下權限
create session(創建會話)
create table(創建表)
create sequence(創建序列)
create view(創建視圖)
create procedure(創建存儲過程)
備註:需要創建表的權限,除了需要創建表權限,還需要使用alter user 用戶名 quota unlimited on users
2)角色的創建,修改
create role 角色名;//創建角色
grant 權限 to 角色名;//賦予權限
grant 角色 to 用戶名...;//賦予角色給用戶
grant 對象權限 on 對象 to 用戶/角色;//創建者具有所有權限,system也有權限,擁有者給其他人分配權限,角色用戶為public表示對所有人具有權限
grant 對象權限 on 對象 to 用戶/角色with grant option;//使用戶同樣具有分配權限的權利
3)取消權限
revoke 權限 on 對象 from 用戶/角色;//with grant option的權限同樣被收回
revoke 權限 on 對象 from 用戶/角色cascade constraints;//去除級聯權限,a賦予b,b賦予c,a使用cascade constraints去除b的權限,那麽b賦予geic的權限同樣會清除
備註:權限分配情況可查詢的表,可以在刪除相應的用戶與角色
role_sys_privs 角色擁有的系統權限
role_tab_privs 角色擁有的對象權限
user_role_privs 用戶擁有的角色
user_tab_privs_made 用戶分配的關於表對象權限
user_tab_privs_recd 用戶擁有的關於表對象權限
user_col_privs_made 用戶分配的關於列的對象權限
user_col_privs_recd 用戶擁有的關於列的對象權限
user_sys_privs 用戶擁有的系統權限
19.set操作符
union/union all //union可以去重,union all不會去重,intersect //取交集,minus //減,用法都同union
20.pl/sql語法
1)一般用法
declare
聲明變量 //a int(10)或者a 表名.字段名%type;表名.字段名%type表示與表名的字段名的類型一致,表字段的類型改變,該處也隨之改變
type 變量類 is record(//類似java中的類與屬性
b 表名.字段名%type;
)
變量類實例 變量類
cursor 遊標名稱 is select..//定義遊標,將select單行的查詢結果放入遊標中,
begin
select ... into 變量類名實例 from ... //select後的字段名順序與數量需要與變量類名保持一致,後續使用可以使用類名.變量讀取
fetch 遊標名稱 into 變量;//提取遊標值,遊標名%found類似於iterate的hasnext,可以用循環提取每次遊標指向的值
close 遊標名//關閉遊標
exception //沒有書寫異常,那麽這裏不寫,when 異常的類型 then 輸出打印;
end
2)函數
Create or replace function 函數名(參數)return 返回值類型
is 聲明變量類似declare;
begin;
return;
exception
end 函數名;
3)存儲過程//在函數的基礎上去除return
create or replace procedure 存儲過程名(參數)
as //聲明
begin // 執行
exception//存儲過程異常
end;
備註:參數類型有3中 in 可以是值,out必須是變量,inout 必須是變量 //create procedure 過程名 (in 形參名稱 數據類型 ,out 形參名稱 數據類型,inout 形參名稱 數據類型),蒸鍋過程是滯後的,只有在內部完成之後,賦值才給傳入給外部的全局變量。
4)觸發器
Create or replace trigger 觸發器..//後面的同mysql
備註:要使用輸出需要開啟 set serveroutput on;
oracle(2)oracle的基礎入門