一、序列
1.創建序列。
空create sequence req_person (空空空kstart with 4
空空空kincrement by 1
空空空kmaxvalue 99999999999
空空空kminvalue 4
空空空knocycle //序列用完,正常報錯,不重複 (sycle 重複,違反了主鍵唯一)
空空空knocache //oracle 會每次緩存20 ,關閉就連續存儲了
空)
空或者直接簡寫:
空create sequence seq_tb nocycle nocache; 默認起始1 自增1
2.使用序列。
空insert into person values (空空空kseq_person.nextval,
空空空k... , ...
空)
二、小問題。
刪除整個表數據,區別及效率。
1. delete from p1空k效率低,檢查點進程進入事務模式,將其備份。
2. truncate table p1;
空k快但是危險,直接刪除相關的物理結構,然後創建。
空k同樣危險的還有 update 沒有加 where 條件篩選。
三、事務
1. 提交。
2. 回滾。
3. 保存事務點。
空kinsert into p1 values (...)空kinsert into p1 values (...)
空ksavepoint a;
空kinsert into p1 values (...)
空krollback to savepoint a;
4. 隔離級別。
空k讀已提交。四、視圖
1. 簡化一些複雜查詢。
2. 創建視圖前得賦予權限
空kgrant create view to test302;3. 語法。
空kcreate or replace view findOrderItems as 這裏是查詢語句4. 使用視圖查詢 。
空kselect * from findOrderItems5. 能對視圖中的數據增刪改嗎?
空k可以,但是不建議。空k只建議封裝查詢結果。
五、索引
1. 什麼是索引。
空k隨着數據量的增加,查詢速度越來越慢,這個時候就有索引機制,相當於表數據的目錄。空k主鍵一旦被設定,就有一個唯一索引。
2. 分類。
空k單列索引和複合索引。3. 創建單列索引。
空kcreate index index_person_name on person(name);空k當這一列有唯一時無法創建。
4. 創建複合索引。
空kcreate index index_person_gd on p1(gender,birthday);5. 注意。
空k5.1. 索引創建是在添加數據之前還是之後呢?空k空k創建表,添數據,如果查詢慢,添索引。
空k5.2. 索引添在那些字段?
空k空kwhere 條件中 經常出現的列。
空k5.3. 表的索引是越多越好嗎?
空k空k索引是服務於查詢的,但是一張表一旦有了索引之後,增刪改反而更慢
空k空k索引如果過多,重建索引的時候就會很慢。
空k5.4. 什麼時候用索引?
空k空k一張表,查詢特別頻繁,數據量大
空k5.5. 根據列的查詢類型不同,分爲以下索引。
空k空k主鍵上:
空空Kk空k1 2 3 4 5 6 ... 高基數列 B樹索引,正向鍵
空空Kk空k7xxx 7xxx 7xxx 反向鍵
空k空k外鍵上:
空空Kk空k位圖索引 低基數列
6. 查詢索引(表下,用戶下)
空kselect * from all_indexes where table_name = '表名';空kselect * from user_indexes ;
7. 刪除索引
空kdrop index 索引名 ;六、同義詞
1. 如何快速創建emp 及 dept
空k通過system 賦予 test302 emp,dept 表的查詢權限。2. 賦予權限。
空kgrant select on scott.dept to test302;空kgrant select on scott.emp to test302;
3. 使用
空kselect * from scott.emp ;4. 能不能像調用普通表一樣使用其他用戶的表(視圖)呢。
空kgrant create public synonym semp for emp ; //在scott 用戶下設置表別名(同義詞)5. 簡化使用(特點)
空kselect * from semp;6. 讓表的訪問更加安全(特點)。
空k不讓別人知道真實的表名7. 自己定義的用戶 得賦予權限才能設置同義詞。
空k-- 賦予某用戶創建同義詞權限空kgrant create public synonym to test302
8. 要想讓scott用戶使用自己定義的用戶的表
空k 還得從 2.設置一遍。七、數據的導入導出
1. oracle 數據庫的導入導出,分兩種:cmd命令,plsql程序。
2. 命令。
空kexp 數據導出空空空Kexp 你的用戶名/密碼 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。空kBEGIN
空空空dbms_output.put_line('hello !')
空kEND;
2. 需求2。
空k定義變量,輸出hello空kDECLARE
空空空//定義你所需要的所有變量
空空空v_msg varchar2(32) := ' hello '
空kBEGIN
空空空dbms_output.put_line(v_msg);
空kEND;
3. 需求3。
空k輸出scott的工資。空kDECLARE
空空空V_SAL EMP.SAL%TYPE;
空kBEGIN
空空空SELECT SAL INTO V_SAL FROM EMP WHERE ENAME = 'SCOTT';
空空空dbms_output.put_line(V_SAL);
空kEND;
4. 需求4。
空k展示 編號,姓名,職位,薪資。展示 編號,姓名,職位,薪資。空kDECLARE
空空空V_EMP_OBJ EMP%ROWTYPE;
空kBEGIN
空空空SELECT * INTO V_EMP_OBJ FROM EMP WHERE ENAME ='SCOTT';
空空空dbms_output.put_line(v_EMP_OBJ.ENAME);
空kEND;
5. 需求5。
空k接收用戶的輸入並打印。空kDECLARE
空空空V_MSG VARCHAR2(32) := &請輸入您要打印的話
空kBEGIN
空空空dbms_output.put_line(V_MSG);
空kEND;
空k只能接受數字。
6. 需求6。
空k從控制檯接收指定輸入然後輸出。空kDECLARE
空空空V_NUM number := &NUM
空kBEGIN
空空空IF V_NUM=1 THEN
空空空空空dbms_output.put_line('輸入正確!');
空空空ELSE (ELSIF)
空空空看看dbms_output.put_line(''輸入錯誤!);
空空空END IF;
空kEND;
7. 需求7。
空k循環輸出1-10空kDECLARE
空空空V_INDEX NUMBER(10) :=1
空kBEGIN
空看看LOOP
空空空看kEXIT WHEN V_INDEX >10
空空空看kdbms_output.put_line(v_INDEX);
空空空空kV_INDEX := V_INDEX+1;
空空空END LOOP;
空kEND;
空kDECLARE
空空空V_INDEX NUMBER(10) :=1
空kBEGIN
空空空LOOP
空空空空kWHILE V_INDEX<=10
空空空空kdbms_output.put_line(v_INDEX);
空空空空kV_INDEX := V_INDEX+1;
空空空END LOOP;
空kEND
空kDECLARE
空空空V_INDEX NUMBER(10) :=1
空kBEGIN
空空空FOR i IN 1..10 LOOP
空空空看kdbms_output.put_line(i);
空空空END LOOP;
空kEND;
8. 需求8。
空k創建序列空空空CREATE SEQUENCE SEQ_GRADE NOCYCLE NOCACHE;
空kBEGIN
空空空FOR i IN 1..10 LOOP
空空空空kIF I < 10 THEN
空空空空空空kINSERT INTO GRADE VALUES (SEQ_GRADE.NEXTVAL,'計算機02'||i,'JavaEE');
空空空空kELSE
空空空空空空kINSERT INTO GRADE VALUES (SEQ_GRADE.NEXTVAL,'計算機03'||i,'JavaEE');
空空空空kEND IF;
空空空END LOOP;
空空空COMMIT;
空kEND;