Oracle教程第四篇
阿新 • • 發佈:2019-01-12
一、序列
1.建立序列。
空 create sequence req_person (空空空k start with 4
空空空k increment by 1
空空空k maxvalue 99999999999
空空空k minvalue 4
空空空k nocycle //序列用完,正常報錯,不重複 (sycle 重複,違反了主鍵唯一)
空空空k nocache //oracle 會每次快取20 ,關閉就連續儲存了
空 )
空或者直接簡寫:
空create sequence seq_tb nocycle nocache; 預設起始1 自增1
2.使用序列。
空 insert into person values (空空空k seq_person.nextval,
空空空k ... , ...
空 )
二、小問題。
刪除整個表資料,區別及效率。
1. delete from p1空k 效率低,檢查點程序進入事務模式,將其備份。
2. truncate table p1;
空k 快但是危險,直接刪除相關的物理結構,然後建立。
空k 同樣危險的還有 update 沒有加 where 條件篩選。
三、事務
1. 提交。
2. 回滾。
3. 儲存事務點。
空k insert into p1 values (...)空k insert into p1 values (...)
空k savepoint a;
空k insert into p1 values (...)
空k rollback to savepoint a;
4. 隔離級別。
空k 讀已提交。四、檢視
1. 簡化一些複雜查詢。
2. 建立檢視前得賦予許可權
空k grant create view to test302;3. 語法。
空k create or replace view findOrderItems as 這裡是查詢語句4. 使用檢視查詢 。
空k select * from findOrderItems5. 能對檢視中的資料增刪改嗎?
空k 可以,但是不建議。空k 只建議封裝查詢結果。
五、索引
1. 什麼是索引。
空k 隨著資料量的增加,查詢速度越來越慢,這個時候就有索引機制,相當於表資料的目錄。空k 主鍵一旦被設定,就有一個唯一索引。
2. 分類。
空k 單列索引和複合索引。3. 建立單列索引。
空k create index index_person_name on person(name);空k 當這一列有唯一時無法建立。
4. 建立複合索引。
空k create index index_person_gd on p1(gender,birthday);5. 注意。
空k 5.1. 索引建立是在新增資料之前還是之後呢?空k 空k 建立表,添資料,如果查詢慢,添索引。
空k 5.2. 索引添在那些欄位?
空k 空k where 條件中 經常出現的列。
空k 5.3. 表的索引是越多越好嗎?
空k 空k 索引是服務於查詢的,但是一張表一旦有了索引之後,增刪改反而更慢
空k 空k 索引如果過多,重建索引的時候就會很慢。
空k 5.4. 什麼時候用索引?
空k 空k 一張表,查詢特別頻繁,資料量大
空k 5.5. 根據列的查詢型別不同,分為以下索引。
空k 空k 主鍵上:
空空Kk 空k 1 2 3 4 5 6 ... 高基數列 B樹索引,正向鍵
空空Kk 空k 7xxx 7xxx 7xxx 反向鍵
空k 空k 外來鍵上:
空空Kk 空k 點陣圖索引 低基數列
6. 查詢索引(表下,使用者下)
空k select * from all_indexes where table_name = '表名';空k select * from user_indexes ;
7. 刪除索引
空k drop index 索引名 ;六、同義詞
1. 如何快速建立emp 及 dept
空k 通過system 賦予 test302 emp,dept 表的查詢許可權。2. 賦予許可權。
空k grant select on scott.dept to test302;空k grant select on scott.emp to test302;
3. 使用
空k select * from scott.emp ;4. 能不能像呼叫普通表一樣使用其他使用者的表(檢視)呢。
空k grant create public synonym semp for emp ; //在scott 使用者下設定表別名(同義詞)5. 簡化使用(特點)
空k select * from semp;6. 讓表的訪問更加安全(特點)。
空k 不讓別人知道真實的表名7. 自己定義的使用者 得賦予許可權才能設定同義詞。
空k -- 賦予某使用者建立同義詞許可權空k grant create public synonym to test302
8. 要想讓scott使用者使用自己定義的使用者的表
空k 還得從 2.設定一遍。七、資料的匯入匯出
1. oracle 資料庫的匯入匯出,分兩種:cmd命令,plsql程式。
2. 命令。
空k exp 資料匯出空空空K exp 你的使用者名稱/密碼 full = y //匯出整個資料庫-->expdat.dmp檔案。
空空空空空空空空空空Kk file=c:\temp.dmp //匯出到指定位置。
空空空空空空空空空空Kk owner=test302 //匯出指定使用者的資料庫。
空空空空空空空空空空Kk tables=xxx,xxx (表名) //匯出指定使用者下的某些表
空空空 imp 資料匯入
空空空空空空空空空空Kk imp 你的使用者名稱/密碼 full=y
3. 客戶端。
空k tools --> 匯出空k tools --> 匯入
七、資料的匯入匯出
1. 需求1。
空k 輸出 hello。空k BEGIN
空空空 dbms_output.put_line('hello !')
空k END;
2. 需求2。
空k 定義變數,輸出hello空k DECLARE
空空空 //定義你所需要的所有變數
空空空 v_msg varchar2(32) := ' hello '
空k BEGIN
空空空 dbms_output.put_line(v_msg);
空k END;
3. 需求3。
空k 輸出scott的工資。空k DECLARE
空空空 V_SAL EMP.SAL%TYPE;
空k BEGIN
空空空 SELECT SAL INTO V_SAL FROM EMP WHERE ENAME = 'SCOTT';
空空空 dbms_output.put_line(V_SAL);
空k END;
4. 需求4。
空k 展示 編號,姓名,職位,薪資。展示 編號,姓名,職位,薪資。空k DECLARE
空空空 V_EMP_OBJ EMP%ROWTYPE;
空k BEGIN
空空空 SELECT * INTO V_EMP_OBJ FROM EMP WHERE ENAME ='SCOTT';
空空空 dbms_output.put_line(v_EMP_OBJ.ENAME);
空k END;
5. 需求5。
空k 接收使用者的輸入並列印。空k DECLARE
空空空 V_MSG VARCHAR2(32) := &請輸入您要列印的話
空k BEGIN
空空空 dbms_output.put_line(V_MSG);
空k END;
空k 只能接受數字。
6. 需求6。
空k 從控制檯接收指定輸入然後輸出。空k DECLARE
空空空 V_NUM number := &NUM
空k BEGIN
空空空 IF V_NUM=1 THEN
空空空空空 dbms_output.put_line('輸入正確!');
空空空 ELSE (ELSIF)
空空空看看 dbms_output.put_line(''輸入錯誤!);
空空空 END IF;
空k END;
7. 需求7。
空k 迴圈輸出1-10空k DECLARE
空空空 V_INDEX NUMBER(10) :=1
空k BEGIN
空看看 LOOP
空空空看k EXIT WHEN V_INDEX >10
空空空看k dbms_output.put_line(v_INDEX);
空空空空k V_INDEX := V_INDEX+1;
空空空 END LOOP;
空k END;
空k DECLARE
空空空 V_INDEX NUMBER(10) :=1
空k BEGIN
空空空 LOOP
空空空空k WHILE V_INDEX<=10
空空空空k dbms_output.put_line(v_INDEX);
空空空空k V_INDEX := V_INDEX+1;
空空空 END LOOP;
空k END
空k DECLARE
空空空 V_INDEX NUMBER(10) :=1
空k BEGIN
空空空 FOR i IN 1..10 LOOP
空空空看k dbms_output.put_line(i);
空空空 END LOOP;
空k END;
8. 需求8。
空k 建立序列空空空 CREATE SEQUENCE SEQ_GRADE NOCYCLE NOCACHE;
空k BEGIN
空空空 FOR i IN 1..10 LOOP
空空空空k IF I < 10 THEN
空空空空空空k INSERT INTO GRADE VALUES (SEQ_GRADE.NEXTVAL,'計算機02'||i,'JavaEE');
空空空空k ELSE
空空空空空空k INSERT INTO GRADE VALUES (SEQ_GRADE.NEXTVAL,'計算機03'||i,'JavaEE');
空空空空k END IF;
空空空 END LOOP;
空空空 COMMIT;
空k END;