第一篇:黑馬程序員c語言教程:用戶如何有效地利用數據字典
用戶如何有效地利用數據字典
ORACLE的數據字典是數據庫的重要組成部分之一,它隨著數據庫的產生而產生, 隨著數據庫的變化而變化, 體現為sys用戶下的一些表和視圖。數據字典名稱是大寫的英文字符。
數據字典里存有用戶信息、用戶的權限信息、所有數據對象信息、表的約束條件、統計分析數據庫的視圖等。
我們不能手工修改數據字典里的信息。
很多時候,一般的ORACLE用戶不知道如何有效地利用它。
dictionary
全部數據字典表的名稱和解釋,它有一個同義詞dict dict_column
全部數據字典表里字段名稱和解釋
如果我們想查詢跟索引有關的數據字典時,可以用下面這條SQL語句: SQL>select * from dictionary where instr(comments,'index')>0;如果我們想知道user_indexes表各字段名稱的詳細含義,可以用下面這條SQL語句: SQL>select column_name,comments from dict_columns where table_name='USER_INDEXES';依此類推,就可以輕松知道數據字典的詳細名稱和解釋,不用查看ORACLE的其它文檔資料了。
下面按類別列出一些ORACLE用戶常用數據字典的查詢使用方法。
1、用戶
查看當前用戶的缺省表空間
SQL>select username,default_tablespace from user_users;查看當前用戶的角色
SQL>select * from user_role_privs;查看當前用戶的系統權限和表級權限
SQL>select * from user_sys_privs;SQL>select * from user_tab_privs;
2、表
查看用戶下所有的表
SQL>select * from user_tables;查看名稱包含log字符的表
SQL>select object_name,object_id from user_objects where instr(object_name,'LOG')>0;查看某表的創建時間
SQL>select object_name,created from user_objects where object_name=upper('&table_name');查看某表的大小
SQL>select sum(bytes)/(1024*1024)as “size(M)” from user_segments where segment_name=upper('&table_name');查看放在ORACLE的內存區里的表
SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;
3、索引
查看索引個數和類別
SQL>select index_name,index_type,table_name from user_indexes order by table_name;查看索引被索引的字段
SQL>select * from user_ind_columns where index_name=upper('&index_name');查看索引的大小
SQL>select sum(bytes)/(1024*1024)as “size(M)” from user_segments where segment_name=upper('&index_name');
4、序列號
查看序列號,last_number是當前值 SQL>select * from user_sequences;
5、視圖
查看視圖的名稱
SQL>select view_name from user_views;查看創建視圖的select語句
SQL>set view_name,text_length from user_views;SQL>set long 2000;說明:可以根據視圖的text_length值設定set long 的大小
SQL>select text from user_views where view_name=upper('&view_name');
6、同義詞
查看同義詞的名稱
SQL>select * from user_synonyms;
7、約束條件
查看某表的約束條件
SQL>select constraint_name, constraint_type,search_condition, r_constraint_name from user_constraints where table_name = upper('&table_name');SQL>select c.constraint_name,c.constraint_type,cc.column_name from user_constraints c,user_cons_columns cc where c.owner = upper('&table_owner')and c.table_name = upper('&table_name')and c.owner = cc.owner and c.constraint_name = cc.constraint_name order by cc.position;
8、存儲函數和過程
查看函數和過程的狀態
SQL>select object_name,status from user_objects where object_type='FUNCTION';
SQL>select object_name,status from user_objects where object_type='PROCEDURE';查看函數和過程的源代碼
SQL>select text from all_source where owner=user and name=upper('&plsql_name');
第二篇:黑馬程序員c語言教程:過濾和排序數據
過濾和排序數據
在查詢中過濾行
過濾
字符和日期
字符和日期要包含在單引號中。字符大小寫敏感,日期格式敏感。默認的日期格式是 DD-MON-RR。
比較運算
其它比較運算
第三篇:黑馬程序員c語言教程:過濾和排序數據
ORDER BY子句
降序排序
按別名排序
多個列排序
ORDER BY子句
排序的規則
可以按照select語句中的列名排序 可以按照別名列名排序
可以按照select語句中的列名的順序值排序 如果要按照多列進行排序,則規則是先按照第一列排序,如果相同,則按照第二列排序;以此類推
Desc:
總結
第四篇:黑馬程序員c語言教程:Oracle簡介
9.通過子查詢建表 通過子查詢建表的例子
SQL>CREATE TABLE emp_41 AS SELECT id, last_name, userid, start_date FROM s_emp WHERE dept_id = 41;SQL> CREATE TABLE A as select * from B where 1=2;只要表的結構.10.用子查詢建表的注意事項
可以關連多個表及用集合函數生成新表,注意選擇出來的字段必須有合法的字段名稱,且不能重復。
用子查詢方式建立的表,只有非空NOT NULL的約束條件能繼承過來, 其它的約束條件和默認值都沒有繼承過來.根據需要,可以用alter table add constraint ……再建立其它的約束條件,如primary key等.11.Foreign Key的可選參數ON DELETE CASCADE 在創建Foreign Key時可以加可選參數: ON DELETE CASCADE它的含義是如果刪除外鍵主表里的內容,子表里相關的內容將一起被刪除.如果沒有ON DELETE CASCADE參數,子表里有內容,父表里的主關鍵字記錄不能被刪除掉.12.如果數據庫表里有不滿足的記錄存在,建立約束條件將不會成功.13.給表創建和刪除同義詞的例子 SQL> CREATE SYNONYM d_sum 2 FOR dept_sum_vu;SQL> CREATE PUBLIC SYNONYM s_dept 2 FOR alice.s_dept;SQL> DROP SYNONYM s_dept;
十、ORACLE里的數據字典
1.什么是數據字典?ORACLE的數據字典是數據庫的重要組成部分之一,它隨著數據庫 的產生而產生, 隨著數據庫的變化而變化, 體現為sys用戶下所有的一些表和視圖.2.數據字典里存了以下內容: 用戶信息
用戶的權限信息
所有數據對象信息表的約束條件統計分析數據庫的視圖等 不能手工修改數據字典里的信息.16
J2EE @ zxw 3.常用的數據字典
Dictionary 存放所有數據表,視圖,同義詞名稱和解釋 Dict_columns 數據字典里字段名稱的和解釋 Dba_users 用戶 Dba_tablespaces 表空間
Dba_data_files 數據庫的文件 Dba_free_space 空閑表空間 Dba_rollback_segs 回滾段
User_objects 數據對象 User_constraints 約束條件 User_sequences 序列號 User_views 視圖 User_indexes 索引 User_synonyms 同義詞
Session_roles 用戶的角色 User_role_privs 用戶的角色權限 User_sys_privs 用戶的系統權限 User_tab_privs 用戶的表級權限 V$session 實時用戶情況 V$sysstat 實時系統統計 V$sesstat 實時用戶統計 V$sgastat 實時SGA使用 V$locked_object 實時鎖 V$controlfile 控制文件 V$logfile 日志文件 V$parameter 參數文件 4.數據字典的分類 數據字典四大類別
User_ 用戶下所有數據庫對象
All_ 用戶權限范圍內所有的數據庫對象 Dba_ 所有的數據庫對象
V$Content$nbsp;統計分析數據庫的視圖 賦于oem_monitor權限非DBA用戶也可查詢V$*視圖
5.查詢數據字典
SQL> select * from dictionary where instr(comments,'index')>0;SQL> select constraint_name, constraint_type, 2 search_condition, r_constraint_name 3 from user_constraints 4 where table_name = ‘&table_name';十一.控制數據、INSERT(往數據表里插入記錄的語句)SQL> insert into 表名(字段名1, 字段名2, ……)values(值1, 值2, ……);SQL> insert into 表名(字段名1, 字段名2, ……)select(字段名1, 字段名2, ……)from 另外的表名 where 條件;可以用&標記變量的方法多次輸入記錄
快速插入數據的方法, 一般用于大于128M的數據轉移 SQL> insert /*+ append */ into 表名
select * from 另外的用戶名.另外的表名 WHERE 條件;SQL> commit;注意事項:
用INSERT /*+ APPEND */ 的方法會對target_tablename產生級別為6的獨占鎖,如果運行此命令時還有對target_tablename的DML操作會排隊在它后面, 對OLTP系統在用的表操作是不合適的。17
J2EE @ zxw 2.插入字符串類型的字段的注意事項: 字符串類型的字段值必須用單引號括起來, 例如: ’GOOD DAY’
如果字段值里包含單引號’ 需要進行字符串轉換, 我們把它替換成兩個 單引號’ ’
字符串類型的字段值超過定義的長度會出錯, 最好在插入前進行長度校驗 ‘’ 標記是NULL, user 標明當前用戶
日期字段的字段值可以用當前數據庫的系統時間SYSDATE, 精確到秒
用字符串轉換成日期型函數TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)TO_DATE()還有很多種日期格式, 可以參看ORACLE DOC.年-月-日 小時:分鐘:秒 的格式YYYY-MM-DD HH24:MI:SS NSERT時最大可操作的字符串長度小于等于4000個單字節, 如果要插入更長的字符串, 請考慮字段用CLOB類型, 方法借用ORACLE里自帶的DBMS_LOB程序包.3、UPDATE(修改數據表里記錄的語句)SQL> UPDATE 表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 條件;如果修改的值N沒有賦值或定義時, 將把原來的記錄內容清為NULL, 最好在修改前進行非空校驗;值N超過定義的長度會出錯, 最好在插入前進行長度校驗.新功能,可以修改子查詢后的結果集
例子:SQL> update(select * from s_dept)set id=50 where id=60;
4、DELETE(刪除數據表里記錄的語句)SQL> DELETE FROM 表名 WHERE 條件;注意:刪除記錄并不能釋放ORACLE里被占用的數據塊表空間.它只把那些 被刪除的數據塊標成unused.如果確實要刪除一個大表里的全部記錄, 可以用 TRUNCATE 命令, 它可以釋放占用的數據塊表空間
SQL> TRUNCATE TABLE 表名;此操作不可回退.5、SQL語句的分類 數據定義語言(DDL):create、alter、drop(創建、修改結構、刪除)(其他:rename)數據操縱語言(DML):insert、delete、select、update(增、刪、查、改)(其他:truncate)
數據控制語言(DCL):grant、revoke(授權、回收)、set role 事務控制:commit、rollback、savepoint(其他:lock table、set constraint、set transaction)
審計控制:audit、noaudit 系統控制:alter system 會話控制:alter session 其他語句:comment(添加注釋)、explain plan、analyze、validate、call
6、ORACLE里事務控制 Commit 提交事務 Rollback 回退事務
Savepoint 設置斷點, 在事務中標記位置, 事務結束, 斷點釋放
事務結束的情況遇到commit或者rollback遇到DDL和DCL語句發現錯誤,如死鎖用戶退出
SQL*PLUS系統重啟或崩潰 7.DML操作的注意事項 18
J2EE @ zxw 以上SQL語句對表都加上了行級鎖, 確認完成后, 必須加上事物處理結束的命令COMMIT 才能正式生效, 否則改變不一定寫入數據庫里.行級鎖也未能得到釋放.如果想撤回這些操作, 可以用命令 ROLLBACK 復原.在運行INSERT, DELETE 和 UPDATE 語句前最好估算一下可能操作的記錄范圍, 應該把它限定在較小(一萬條記錄)范圍內,.否則ORACLE處理這個事物用到很大的回退段.程序響應慢甚至失去響應.如果記錄數上十萬以上這些操作, 可以把這些SQL語句分段分次完成, 其間加上COMMIT 確認事物處理.太過頻繁的commit不好
第五篇:黑馬程序員c語言教程:DML語言強化
sql語言的類型
數據語言實現數據的crud
DML語句(Data Manipulation Language)數據庫操作語言
insert update delete select DDL語言 data definition Lanaguage
create table
create view index sequence synonym同義詞
truncate table DCL語言 data control language數據語言
commit rollback savetpointe
OCA認證 OCP(dba)一起考, 參加oracle的培訓 2w Oracle數據庫管理員認證專員(OCA):Oracle Certified Associate Oracle數據庫管理員認證專家(OCP): Oracle Certified Professional Oracle數據庫管理員認證大師(OCM): Oracle Certified Master
語法: INSERT INTO table [(column [, column...])] VALUES(value [, value...]);
--1 向表中插入所有列
insert into emp values(1, 'tom_111', 'enginerr', 7839, sysdate, 5000, 100, 10)--2 向表中插入部分列
insert into emp(empno, ename, job, hiredate)values(2, 'tom_2222', 'enginerr', sysdate)
--3 隱式插入空值: 沒有寫出的列,默認為null值--4 顯示插入空值:--5 sql插入語言的地址符 & 取地址符后面相當于一個變量
mysql語言: preparedStatement語言 SQL> insert into emp(empno, ename, job, hiredate)values(&empno, &ename, &job, &hiredate);輸入 empno 的值: 3
輸入 ename 的值: 'tom_ccc' 輸入 job 的值: 'job' 輸入 hiredate 的值: '22-2月-81' 原值 1: insert into emp(empno, ename, job, hiredate)values(&empno, &ename, &job, &hiredate)新值 1: insert into emp(empno, ename, job, hiredate)values(3, 'tom_ccc', 'job', '22-2月-81')
&地址符, 可以在任何sql語言中使用.在select 語言中也可以使用地址符
SQL> select ename, job, &tt from emp;輸入 tt 的值: deptno 原值 1: select ename, job, &tt from emp 新值 1: select ename, job, deptno from emp
--7 批量插入數據--創建一張表
create table emp10 as
select * from emp where 1=2;--一次性的將emp中所有10號部門的員工插入到emp10中
--在insert語言中使用子查詢 子查詢 不光用在查詢套查詢, 也可用在DML語句套select語句
insert into emp10--列完全一樣,可以不寫
select * from emp where deptno=10;delete from emp10;
有關update更新語句
UPDATE table SET column = value [, column = value,...] [WHERE condition];--列子
SQL> update emp10 set sal=2300 where empno=7934;
有關刪除數據
DELETE [FROM] table [WHERE condition];
delete和truncate表區別
delete逐條刪除 truncate先摧毀表再重建delete語言是DML語言 truncate是DDL
DML語言可以閃回 做錯的并且提交了.可通過閃回,撤銷操作
DDL語言不可以閃回 flashback
delete是逐條刪除,會產生碎片, truncate不會產生碎片
行移動功能: 要開啟閃回功能,必須要開啟行移動功能delete不會釋放空間 truncate會delete可以回滾 truncate不可以
oracle delete快 mysql truncate快.實驗: 從文件中導入數據, 通過命名delete 和 truncate刪除表數據 實驗
從文件中導入數據
SQL> set timing off;SQL> set feedback off;SQL> drop table testdelete purge;SQL> @c:Sql.sql;SQL> SQL> set timing on;//最后刪除數據表的時候,把時間打開,記錄時間
SQL> delete from testdelete;已用時間: 00: 00: 00.03
從文件中導入數據
SQL> set timing off;@c:Sql.sql;
set timing off;
select count(*)from testdelete;set timing on;//最后刪除數據表的時候,把時間打開,記錄時間
truncate table testdelete;已用時間: 00: 00: 00.39
事務基本概念
概念
一個或者多個DML語言組成特點
要么都成功,要么都失敗
特性
原子性 一致性 隔離性 持久性
事物的隔離性 多個客戶端同時操作數據庫的時, 要隔離他們的操作
否則:臟讀 不可重復讀 幻讀
設置不同的擱置級別來解決oracle中的事務
事務起始標志 DML語言(oracle默認事務似是打開的)2 事務的結束標志
提交: 顯示提交commit
隱式提交
1)執行DDL語言
eg create table語言 還有I個隱式的功能
提交之前的沒有提交的DML語言(insert update)
2)正常退出
回滾: 顯示 rollback
隱式 掉電/宕機/非正常退出==系統出錯了 oracle事務控制--保存點
create table testsavepoint(tid number, tname varchar2(20));set feedback on
insert into testsavepoint values(1, 'tom1');insert into testsavepoint values(2, 'tom2');savepoint a;//創建一個保存點
insert into testsavepoint values(3, 'tom3a);rollback to savepoint a;
注意: 回退到savepoint a 前面插入的兩條sql語句還沒有提交;仍然還在一個事務里面;讓事務結束的方法 顯示 隱式 SQL> rollback / commit oracle數據的隔離級別問題
read only ,數據庫幾乎不做串行化操作,增加了read only SQL99