第一篇:黑馬程序員C語(yǔ)言教程:linux系統(tǒng)下好用的文件恢復(fù)工具
Linux系統(tǒng)下好用的文件恢復(fù)工具
不同于windows,在Linux下我們常常借助命令操作整個(gè)文件系統(tǒng)。而刪除數(shù)據(jù)是使用過(guò)程中出現(xiàn)較為頻繁的操作。但命令rm刪除掉的文件不像我們熟悉的windows躺在回收站中,輕輕一拉就回來(lái)。因此在操作過(guò)程中需要大家對(duì)Linux系統(tǒng)命令及文件存儲(chǔ)特性有所了解。掌握其基本原理后,再借助工具完成數(shù)據(jù)恢復(fù)就不那么困難了。
許多同學(xué)習(xí)慣于Windows系統(tǒng)操作電腦的方式,使用鼠標(biāo)配合圖形界面完成操作。不得不承認(rèn)這種方式十分簡(jiǎn)潔,易于學(xué)習(xí)和操作。這也是很多人初學(xué)Linux系統(tǒng)不習(xí)慣的重要原因之一。
Linux系統(tǒng)秉持Unix操作系統(tǒng)的作風(fēng),受時(shí)代潮流的影響也加入了圖形操作系統(tǒng)的方法,同時(shí)保留了使用命令操系統(tǒng)的特性。因此,要想徹底掌握Linux系統(tǒng)的操作,必須要熟練使用常用的系統(tǒng)命令。像創(chuàng)建文件的touch命令,復(fù)制文件的cp命令,查看目錄的ls命令以及查看文件內(nèi)容的cat命令,既能挪動(dòng)文件位置又能修改文件名的mv命令,以及刪除文件的rm命令等都是Linux入門(mén)必須熟練掌握的系統(tǒng)操作命令。下面介紹兩款實(shí)用的,借助字符終端,恢復(fù)文件的工具。testdisk和photorec。
testdisk的使用 testdisk簡(jiǎn)介
testdisk 是分區(qū)表恢復(fù)、raid 恢復(fù)、分區(qū)恢復(fù)的開(kāi)源免費(fèi)工具。它可以解決一些因?yàn)榉謪^(qū)的原因而造成數(shù)據(jù)無(wú)法訪問(wèn)的問(wèn)題。可以幫助你恢復(fù)丟失的分區(qū),讓磁盤(pán)重新變得可以啟動(dòng),整理分區(qū)表,恢復(fù)主引導(dǎo)記錄,恢復(fù)引導(dǎo)扇區(qū)以及文件系統(tǒng)表,testdisk支持如下文件系統(tǒng):FAT12/FAT16/FAT32/NTFS/ext2/ext3/ext4。
testdisk 支持的功能: 修復(fù)分區(qū)表, 恢復(fù)已刪除分區(qū),用 FAT32 備份表恢復(fù)啟動(dòng)扇區(qū),重建 FAT12/FAT16/FAT32 啟動(dòng)扇區(qū),修復(fù) FAT 表,重建 NTFS 啟動(dòng)扇區(qū),用備份表恢復(fù) NTFS 啟動(dòng)扇區(qū),用 mft 鏡像表修復(fù) mft 表,查找 ext2/ext3 備份的 superblock,從 FAT,NTFS 及ext2文件系統(tǒng)恢復(fù)刪除文件,從已刪除的 FAT,NTFS 及 ext2/ext3 分區(qū)復(fù)制文件。
使用步驟
首先安裝
#apt-get install testdisk 無(wú)法在線安裝的用戶可以在http://www.tmdps.cn/wiki/TestDisk_Download 下載源代碼編譯安裝。但需要注意,下載安裝 testdisk 之前要安裝幾個(gè)輔助軟件包 libjpeg8,libncursesw5,libuuid1,zlib1g。
啟動(dòng)testdisk #testdisk testdisk 啟動(dòng)后的工作界面首先要指定恢復(fù)操作過(guò)程中欲創(chuàng)建的的 log 文件(testdisk.log)。見(jiàn)下圖。
[Create]新建一個(gè)log [Append]在現(xiàn)有l(wèi)og上追加 [No Log]不使用log 選擇了 log 文件的記錄方式后,testdisk會(huì)顯示處于連接狀態(tài)的分區(qū)設(shè)備。選擇要恢復(fù)的分區(qū)設(shè)備,選擇[Proceed]繼續(xù)。見(jiàn)下圖。
在列出的磁盤(pán)設(shè)備中,選擇要恢復(fù)的分區(qū),然后選擇磁盤(pán)分區(qū)的種類。一般選擇[Intel] Intel/PC partition即可。如果是 GPT 分區(qū),應(yīng)選擇[EFI GPT]。對(duì)于ext4 文件系統(tǒng)來(lái)說(shuō)應(yīng)選擇 [None ] Non partitioned media。但,通常選擇 [Intel] Intel/PC partition 也可以正確識(shí)別,只是分析硬盤(pán)時(shí)間較長(zhǎng)。見(jiàn)下圖。
在接下來(lái)的的畫(huà)面中選擇[Analyse],對(duì)分區(qū)進(jìn)行分析。見(jiàn)下圖。
而后選擇[Quick Search]進(jìn)行快速檢查。見(jiàn)下圖。
選擇[Continue]繼續(xù)。
接下來(lái)會(huì)顯示當(dāng)前分區(qū)狀態(tài)。這是testdisk分析的當(dāng)前分區(qū)表的分區(qū)結(jié)果,我們選擇可以[Deep Search]進(jìn)行一次深入檢測(cè)。
耐心等待檢測(cè)完成。下圖的20%表示檢測(cè)進(jìn)度。完成會(huì)提示[Continue]選項(xiàng),選擇繼續(xù)。
檢測(cè)完成界面如下圖所示:
在此界面下,根據(jù)下方提示,按“P”按鍵,可列出分區(qū)上的文件。見(jiàn)下圖。
下圖,紅色文件名稱即為已被刪除的文件,選擇你要恢復(fù)的文件后,按“c”鍵。
testdisk會(huì)詢問(wèn)你要復(fù)制到哪個(gè)目錄中去,選擇你要保存的目標(biāo)位置。
選好保存目標(biāo)位置后,再次按“c”鍵。可看到如下綠色提示:Copy done!1 ok, 0 failed
可在設(shè)定的恢復(fù)文件存儲(chǔ)目錄下查看到恢復(fù)回來(lái)的文件。
按“q”鍵回退上一步,直至退出testdisk工具。
photorec的使用 photorec簡(jiǎn)介
photorec 是一款用于恢復(fù)硬盤(pán)、光盤(pán)中丟失的視頻、文檔、壓縮包等文件,或從數(shù)碼相機(jī)存儲(chǔ)卡中恢復(fù)丟失圖片的數(shù)據(jù)恢復(fù)軟件(軟件命名為 photo recovery的縮寫(xiě))。photorec 忽略文件系統(tǒng),能直接從介質(zhì)底層恢復(fù)數(shù)據(jù),因此,在介質(zhì)的文件系統(tǒng)嚴(yán)重破壞或被重新格式化后,它也能進(jìn)行數(shù)據(jù)恢復(fù)。出于安全考慮, photorec 以只讀方式來(lái)訪問(wèn)您要恢復(fù)數(shù)據(jù)所在的磁盤(pán)或存儲(chǔ)卡介質(zhì)。
提示:一旦發(fā)現(xiàn)丟失或意外刪除了某個(gè)圖片、文件,請(qǐng)不要繼續(xù)往該存儲(chǔ)設(shè)備或磁盤(pán)保存新文件,否則您可能會(huì)覆蓋原來(lái)的數(shù)據(jù)。這意味著在使用 photorec 時(shí),千萬(wàn)不要將恢復(fù)的文件寫(xiě)入到原數(shù)據(jù)所存儲(chǔ)的同一分區(qū)。
使用步驟
軟件安裝
photorec 無(wú)需格外安裝,testdisk安裝好后 photorec 可直接使用。
啟動(dòng)photorec #photorec 啟動(dòng)成功會(huì)顯示當(dāng)前已連接磁盤(pán)分區(qū),選擇準(zhǔn)備恢復(fù)的文件所在分區(qū),然后選擇 [Proceed] 選項(xiàng)繼續(xù)下一步。見(jiàn)下圖。
接下來(lái),選擇欲恢復(fù)的文件所在磁盤(pán)分區(qū)格式。如FAT32。下圖下方[File Opt]中有可供恢復(fù)的文件種類。
選擇[File Opt]選項(xiàng)進(jìn)入后可以看到photorec支持恢復(fù)的文件種類。默認(rèn)是全部選中的,可以根據(jù)需要按“s”鍵取消全部勾選,然后移動(dòng)光標(biāo)到想要恢復(fù)的文件類型,使用“空格”鍵來(lái)選中指定類型。按“b”按鍵可以保存選擇。如下圖所示。
如沒(méi)有特殊設(shè)置可以選擇[Quit]選項(xiàng)退出,從上一級(jí)頁(yè)面選擇[Search]選項(xiàng)。進(jìn)入如下頁(yè)面。
選擇好分區(qū)文件系統(tǒng)類型后,按Enter鍵進(jìn)入如下頁(yè)面。設(shè)定要分析的磁盤(pán)空間區(qū)域,可整個(gè)分區(qū)搜索[Whole],也可只搜索自由空間[Free]。如下圖。
設(shè)定恢復(fù)成功后導(dǎo)出的文件存儲(chǔ)目錄位置。如:/home/itcast/my_recover。
存儲(chǔ)目錄選定好以后,按“Y”鍵即可進(jìn)入數(shù)據(jù)恢復(fù)頁(yè)面。開(kāi)始數(shù)據(jù)恢復(fù)。如下圖。
恢復(fù)完成后photorec會(huì)提示恢復(fù)的文件數(shù),及存儲(chǔ)位置。選擇[Quit]退出 photorec。
被恢復(fù)的文件被保存在指定目錄下,photorec會(huì)在其內(nèi)部創(chuàng)建一個(gè)recup_dir.1目錄,將恢復(fù)的文件保存在該目錄下。
在recup_dir.1目錄下,以字母數(shù)字組合為恢復(fù)文件重新命名。同時(shí)生成了一個(gè)report.xml文件。
對(duì)比
使用 testdisk 恢復(fù)文件,多用于硬盤(pán)上分區(qū)已經(jīng)損壞的情形,該分區(qū)有原有數(shù)據(jù)紀(jì)錄。但是如果損壞之后,重新再次做成了新分區(qū)的話,文件恢復(fù)的可能性比較小。
photorec 不僅針對(duì)硬盤(pán)、USB 設(shè)備、CD-ROM、SD 卡,而且還可以對(duì)其它存儲(chǔ)設(shè)備進(jìn)
行應(yīng)用。因此大多數(shù)常用的文件如果被誤操作的話,均可利用其來(lái)進(jìn)行恢復(fù)。只不過(guò)它的初衷是針對(duì)照片而制作的,從該軟件的命名可看出端倪。
第二篇:黑馬程序員c語(yǔ)言教程:Oracle簡(jiǎn)介
9.通過(guò)子查詢建表 通過(guò)子查詢建表的例子
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;只要表的結(jié)構(gòu).10.用子查詢建表的注意事項(xiàng)
可以關(guān)連多個(gè)表及用集合函數(shù)生成新表,注意選擇出來(lái)的字段必須有合法的字段名稱,且不能重復(fù)。
用子查詢方式建立的表,只有非空NOT NULL的約束條件能繼承過(guò)來(lái), 其它的約束條件和默認(rèn)值都沒(méi)有繼承過(guò)來(lái).根據(jù)需要,可以用alter table add constraint ……再建立其它的約束條件,如primary key等.11.Foreign Key的可選參數(shù)ON DELETE CASCADE 在創(chuàng)建Foreign Key時(shí)可以加可選參數(shù): ON DELETE CASCADE它的含義是如果刪除外鍵主表里的內(nèi)容,子表里相關(guān)的內(nèi)容將一起被刪除.如果沒(méi)有ON DELETE CASCADE參數(shù),子表里有內(nèi)容,父表里的主關(guān)鍵字記錄不能被刪除掉.12.如果數(shù)據(jù)庫(kù)表里有不滿足的記錄存在,建立約束條件將不會(huì)成功.13.給表創(chuàng)建和刪除同義詞的例子 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里的數(shù)據(jù)字典
1.什么是數(shù)據(jù)字典?ORACLE的數(shù)據(jù)字典是數(shù)據(jù)庫(kù)的重要組成部分之一,它隨著數(shù)據(jù)庫(kù) 的產(chǎn)生而產(chǎn)生, 隨著數(shù)據(jù)庫(kù)的變化而變化, 體現(xiàn)為sys用戶下所有的一些表和視圖.2.數(shù)據(jù)字典里存了以下內(nèi)容: 用戶信息
用戶的權(quán)限信息
所有數(shù)據(jù)對(duì)象信息表的約束條件統(tǒng)計(jì)分析數(shù)據(jù)庫(kù)的視圖等 不能手工修改數(shù)據(jù)字典里的信息.16
J2EE @ zxw 3.常用的數(shù)據(jù)字典
Dictionary 存放所有數(shù)據(jù)表,視圖,同義詞名稱和解釋 Dict_columns 數(shù)據(jù)字典里字段名稱的和解釋 Dba_users 用戶 Dba_tablespaces 表空間
Dba_data_files 數(shù)據(jù)庫(kù)的文件 Dba_free_space 空閑表空間 Dba_rollback_segs 回滾段
User_objects 數(shù)據(jù)對(duì)象 User_constraints 約束條件 User_sequences 序列號(hào) User_views 視圖 User_indexes 索引 User_synonyms 同義詞
Session_roles 用戶的角色 User_role_privs 用戶的角色權(quán)限 User_sys_privs 用戶的系統(tǒng)權(quán)限 User_tab_privs 用戶的表級(jí)權(quán)限 V$session 實(shí)時(shí)用戶情況 V$sysstat 實(shí)時(shí)系統(tǒng)統(tǒng)計(jì) V$sesstat 實(shí)時(shí)用戶統(tǒng)計(jì) V$sgastat 實(shí)時(shí)SGA使用 V$locked_object 實(shí)時(shí)鎖 V$controlfile 控制文件 V$logfile 日志文件 V$parameter 參數(shù)文件 4.數(shù)據(jù)字典的分類 數(shù)據(jù)字典四大類別
User_ 用戶下所有數(shù)據(jù)庫(kù)對(duì)象
All_ 用戶權(quán)限范圍內(nèi)所有的數(shù)據(jù)庫(kù)對(duì)象 Dba_ 所有的數(shù)據(jù)庫(kù)對(duì)象
V$Content$nbsp;統(tǒng)計(jì)分析數(shù)據(jù)庫(kù)的視圖 賦于oem_monitor權(quán)限非DBA用戶也可查詢V$*視圖
5.查詢數(shù)據(jù)字典
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';十一.控制數(shù)據(jù)、INSERT(往數(shù)據(jù)表里插入記錄的語(yǔ)句)SQL> insert into 表名(字段名1, 字段名2, ……)values(值1, 值2, ……);SQL> insert into 表名(字段名1, 字段名2, ……)select(字段名1, 字段名2, ……)from 另外的表名 where 條件;可以用&標(biāo)記變量的方法多次輸入記錄
快速插入數(shù)據(jù)的方法, 一般用于大于128M的數(shù)據(jù)轉(zhuǎn)移 SQL> insert /*+ append */ into 表名
select * from 另外的用戶名.另外的表名 WHERE 條件;SQL> commit;注意事項(xiàng):
用INSERT /*+ APPEND */ 的方法會(huì)對(duì)target_tablename產(chǎn)生級(jí)別為6的獨(dú)占鎖,如果運(yùn)行此命令時(shí)還有對(duì)target_tablename的DML操作會(huì)排隊(duì)在它后面, 對(duì)OLTP系統(tǒng)在用的表操作是不合適的。17
J2EE @ zxw 2.插入字符串類型的字段的注意事項(xiàng): 字符串類型的字段值必須用單引號(hào)括起來(lái), 例如: ’GOOD DAY’
如果字段值里包含單引號(hào)’ 需要進(jìn)行字符串轉(zhuǎn)換, 我們把它替換成兩個(gè) 單引號(hào)’ ’
字符串類型的字段值超過(guò)定義的長(zhǎng)度會(huì)出錯(cuò), 最好在插入前進(jìn)行長(zhǎng)度校驗(yàn) ‘’ 標(biāo)記是NULL, user 標(biāo)明當(dāng)前用戶
日期字段的字段值可以用當(dāng)前數(shù)據(jù)庫(kù)的系統(tǒng)時(shí)間SYSDATE, 精確到秒
用字符串轉(zhuǎn)換成日期型函數(shù)TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)TO_DATE()還有很多種日期格式, 可以參看ORACLE DOC.年-月-日 小時(shí):分鐘:秒 的格式Y(jié)YYY-MM-DD HH24:MI:SS NSERT時(shí)最大可操作的字符串長(zhǎng)度小于等于4000個(gè)單字節(jié), 如果要插入更長(zhǎng)的字符串, 請(qǐng)考慮字段用CLOB類型, 方法借用ORACLE里自帶的DBMS_LOB程序包.3、UPDATE(修改數(shù)據(jù)表里記錄的語(yǔ)句)SQL> UPDATE 表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 條件;如果修改的值N沒(méi)有賦值或定義時(shí), 將把原來(lái)的記錄內(nèi)容清為NULL, 最好在修改前進(jìn)行非空校驗(yàn);值N超過(guò)定義的長(zhǎng)度會(huì)出錯(cuò), 最好在插入前進(jìn)行長(zhǎng)度校驗(yàn).新功能,可以修改子查詢后的結(jié)果集
例子:SQL> update(select * from s_dept)set id=50 where id=60;
4、DELETE(刪除數(shù)據(jù)表里記錄的語(yǔ)句)SQL> DELETE FROM 表名 WHERE 條件;注意:刪除記錄并不能釋放ORACLE里被占用的數(shù)據(jù)塊表空間.它只把那些 被刪除的數(shù)據(jù)塊標(biāo)成unused.如果確實(shí)要?jiǎng)h除一個(gè)大表里的全部記錄, 可以用 TRUNCATE 命令, 它可以釋放占用的數(shù)據(jù)塊表空間
SQL> TRUNCATE TABLE 表名;此操作不可回退.5、SQL語(yǔ)句的分類 數(shù)據(jù)定義語(yǔ)言(DDL):create、alter、drop(創(chuàng)建、修改結(jié)構(gòu)、刪除)(其他:rename)數(shù)據(jù)操縱語(yǔ)言(DML):insert、delete、select、update(增、刪、查、改)(其他:truncate)
數(shù)據(jù)控制語(yǔ)言(DCL):grant、revoke(授權(quán)、回收)、set role 事務(wù)控制:commit、rollback、savepoint(其他:lock table、set constraint、set transaction)
審計(jì)控制:audit、noaudit 系統(tǒng)控制:alter system 會(huì)話控制:alter session 其他語(yǔ)句:comment(添加注釋)、explain plan、analyze、validate、call
6、ORACLE里事務(wù)控制 Commit 提交事務(wù) Rollback 回退事務(wù)
Savepoint 設(shè)置斷點(diǎn), 在事務(wù)中標(biāo)記位置, 事務(wù)結(jié)束, 斷點(diǎn)釋放
事務(wù)結(jié)束的情況遇到commit或者rollback遇到DDL和DCL語(yǔ)句發(fā)現(xiàn)錯(cuò)誤,如死鎖用戶退出
SQL*PLUS系統(tǒng)重啟或崩潰 7.DML操作的注意事項(xiàng) 18
J2EE @ zxw 以上SQL語(yǔ)句對(duì)表都加上了行級(jí)鎖, 確認(rèn)完成后, 必須加上事物處理結(jié)束的命令COMMIT 才能正式生效, 否則改變不一定寫(xiě)入數(shù)據(jù)庫(kù)里.行級(jí)鎖也未能得到釋放.如果想撤回這些操作, 可以用命令 ROLLBACK 復(fù)原.在運(yùn)行INSERT, DELETE 和 UPDATE 語(yǔ)句前最好估算一下可能操作的記錄范圍, 應(yīng)該把它限定在較小(一萬(wàn)條記錄)范圍內(nèi),.否則ORACLE處理這個(gè)事物用到很大的回退段.程序響應(yīng)慢甚至失去響應(yīng).如果記錄數(shù)上十萬(wàn)以上這些操作, 可以把這些SQL語(yǔ)句分段分次完成, 其間加上COMMIT 確認(rèn)事物處理.太過(guò)頻繁的commit不好
第三篇:黑馬程序員c語(yǔ)言教程:DML語(yǔ)言強(qiáng)化
sql語(yǔ)言的類型
數(shù)據(jù)語(yǔ)言實(shí)現(xiàn)數(shù)據(jù)的crud
DML語(yǔ)句(Data Manipulation Language)數(shù)據(jù)庫(kù)操作語(yǔ)言
insert update delete select DDL語(yǔ)言 data definition Lanaguage
create table
create view index sequence synonym同義詞
truncate table DCL語(yǔ)言 data control language數(shù)據(jù)語(yǔ)言
commit rollback savetpointe
OCA認(rèn)證 OCP(dba)一起考, 參加oracle的培訓(xùn) 2w Oracle數(shù)據(jù)庫(kù)管理員認(rèn)證專員(OCA):Oracle Certified Associate Oracle數(shù)據(jù)庫(kù)管理員認(rèn)證專家(OCP): Oracle Certified Professional Oracle數(shù)據(jù)庫(kù)管理員認(rèn)證大師(OCM): Oracle Certified Master
語(yǔ)法: 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 隱式插入空值: 沒(méi)有寫(xiě)出的列,默認(rèn)為null值--4 顯示插入空值:--5 sql插入語(yǔ)言的地址符 & 取地址符后面相當(dāng)于一個(gè)變量
mysql語(yǔ)言: preparedStatement語(yǔ)言 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語(yǔ)言中使用.在select 語(yǔ)言中也可以使用地址符
SQL> select ename, job, &tt from emp;輸入 tt 的值: deptno 原值 1: select ename, job, &tt from emp 新值 1: select ename, job, deptno from emp
--7 批量插入數(shù)據(jù)--創(chuàng)建一張表
create table emp10 as
select * from emp where 1=2;--一次性的將emp中所有10號(hào)部門(mén)的員工插入到emp10中
--在insert語(yǔ)言中使用子查詢 子查詢 不光用在查詢套查詢, 也可用在DML語(yǔ)句套select語(yǔ)句
insert into emp10--列完全一樣,可以不寫(xiě)
select * from emp where deptno=10;delete from emp10;
有關(guān)update更新語(yǔ)句
UPDATE table SET column = value [, column = value,...] [WHERE condition];--列子
SQL> update emp10 set sal=2300 where empno=7934;
有關(guān)刪除數(shù)據(jù)
DELETE [FROM] table [WHERE condition];
delete和truncate表區(qū)別
delete逐條刪除 truncate先摧毀表再重建delete語(yǔ)言是DML語(yǔ)言 truncate是DDL
DML語(yǔ)言可以閃回 做錯(cuò)的并且提交了.可通過(guò)閃回,撤銷操作
DDL語(yǔ)言不可以閃回 flashback
delete是逐條刪除,會(huì)產(chǎn)生碎片, truncate不會(huì)產(chǎn)生碎片
行移動(dòng)功能: 要開(kāi)啟閃回功能,必須要開(kāi)啟行移動(dòng)功能delete不會(huì)釋放空間 truncate會(huì)delete可以回滾 truncate不可以
oracle delete快 mysql truncate快.實(shí)驗(yàn): 從文件中導(dǎo)入數(shù)據(jù), 通過(guò)命名delete 和 truncate刪除表數(shù)據(jù) 實(shí)驗(yàn)
從文件中導(dǎo)入數(shù)據(jù)
SQL> set timing off;SQL> set feedback off;SQL> drop table testdelete purge;SQL> @c:Sql.sql;SQL> SQL> set timing on;//最后刪除數(shù)據(jù)表的時(shí)候,把時(shí)間打開(kāi),記錄時(shí)間
SQL> delete from testdelete;已用時(shí)間: 00: 00: 00.03
從文件中導(dǎo)入數(shù)據(jù)
SQL> set timing off;@c:Sql.sql;
set timing off;
select count(*)from testdelete;set timing on;//最后刪除數(shù)據(jù)表的時(shí)候,把時(shí)間打開(kāi),記錄時(shí)間
truncate table testdelete;已用時(shí)間: 00: 00: 00.39
事務(wù)基本概念
概念
一個(gè)或者多個(gè)DML語(yǔ)言組成特點(diǎn)
要么都成功,要么都失敗
特性
原子性 一致性 隔離性 持久性
事物的隔離性 多個(gè)客戶端同時(shí)操作數(shù)據(jù)庫(kù)的時(shí), 要隔離他們的操作
否則:臟讀 不可重復(fù)讀 幻讀
設(shè)置不同的擱置級(jí)別來(lái)解決oracle中的事務(wù)
事務(wù)起始標(biāo)志 DML語(yǔ)言(oracle默認(rèn)事務(wù)似是打開(kāi)的)2 事務(wù)的結(jié)束標(biāo)志
提交: 顯示提交commit
隱式提交
1)執(zhí)行DDL語(yǔ)言
eg create table語(yǔ)言 還有I個(gè)隱式的功能
提交之前的沒(méi)有提交的DML語(yǔ)言(insert update)
2)正常退出
回滾: 顯示 rollback
隱式 掉電/宕機(jī)/非正常退出==系統(tǒng)出錯(cuò)了 oracle事務(wù)控制--保存點(diǎn)
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;//創(chuàng)建一個(gè)保存點(diǎn)
insert into testsavepoint values(3, 'tom3a);rollback to savepoint a;
注意: 回退到savepoint a 前面插入的兩條sql語(yǔ)句還沒(méi)有提交;仍然還在一個(gè)事務(wù)里面;讓事務(wù)結(jié)束的方法 顯示 隱式 SQL> rollback / commit oracle數(shù)據(jù)的隔離級(jí)別問(wèn)題
read only ,數(shù)據(jù)庫(kù)幾乎不做串行化操作,增加了read only SQL99
第四篇:黑馬程序員c語(yǔ)言教程:Oracle概念(推薦)
七、在執(zhí)行SQL語(yǔ)句時(shí)綁定變量
1.接收和定義變量的SQL*PLUS命令 ACCEPT DEFINE UNDEFINE & 2.綁定變量SQL語(yǔ)句的例子(1)SQL> select id, last_name, salary from s_emp where dept_id = &department_number;Enter value for department_number: 10 old 1: select id, last_name, salary from s_emp where dept_id=&department_number;new 1: select id, last_name, salary from s_emp where dept_id= 10 SQL> SET VERIFY OFF | ON;可以關(guān)閉和打開(kāi)提示確認(rèn)信息old 1和new 1的顯示.3.綁定變量SQL語(yǔ)句的例子(2)SQL> select id, last_name, salary from s_emp where title = '&job_title';Enter value for job_title: Stock Clerk 11
J2EE @ zxw SQL> select id, last_name, salary from s_emp where hiredate >to_date('&start_hire_date','YYYY-MM-DD');Enter value for start_hire_date : 2001-01-01 把綁定字符串和日期類型變量時(shí),變量外面要加單引號(hào) 也可綁定變量來(lái)查詢不同的字段名 輸入變量值的時(shí)候不要加;等其它符號(hào) 4.ACCEPT的語(yǔ)法和例子
SQL> ACCEPT variable [datatype] [FORMAT] [PROMPT text] [HIDE] 說(shuō)明: variable 指變量名 datatype 指變量類型,如number,char等 format 指變量顯示格
式 prompt text 可自定義彈出提示符的內(nèi)容text hide 隱藏用戶的輸入符號(hào) 使用ACCEPT的例子:
ACCEPT p_dname PROMPT 'Provide the department name: ' ACCEPT p_salary NUMBER PROMPT 'Salary amount: ' ACCEPT pswd CHAR PROMPT 'Password: ' HIDE ACCEPT low_date date format 'YYYY-MM-DD' PROMPT“Enter the low date range('YYYY-MM-DD'):” 4.DEFINE的語(yǔ)法和例子
SQL> DEFINE variable = value 說(shuō)明: variable 指變量名 value 指變量值
定義好了變良值后, 執(zhí)行綁定變量的SQL語(yǔ)句時(shí)不再提示輸入變量
使用DEFINE的例子:
SQL> DEFINE dname = sales SQL> DEFINE dname DEFINE dname = “sales”(CHAR)SQL> select name from dept where lower(name)='&dname';NAME-------------------------sales sales SQL> UNDEFINE dname SQL> DEFINE dname Symbol dname is UNDEFINED 5.SQL*PLUS里傳遞參數(shù)到保存好的*.sql文件里 SQL> @ /路徑名/文件名 參數(shù)名1[,參數(shù)名2, ?.] SQL> start /路徑名/文件名 參數(shù)名1[,參數(shù)名2, ?.] 注意事項(xiàng): 一次最多只能獲取9個(gè)&變量, 變量名稱只能是從&1,&2到&9 變量名后不要加特殊的結(jié)束符號(hào)
如果在SQL*PLUS里要把&符號(hào)保存在ORACLE數(shù)據(jù)庫(kù)里,要修改sql*plus環(huán)境變量define SQL> set define off;
八、概述數(shù)據(jù)模型和數(shù)據(jù)庫(kù)設(shè)計(jì) 1.系統(tǒng)開(kāi)發(fā)的階段: Strategy and Analysis Design Build and Document Transition Production 12
J2EE @ zxw 2.數(shù)據(jù)模型
Model of system in client's mind Entity model of client's model Table model of entity model Tables on disk 3.實(shí)體關(guān)系模型(ERM)概念
ERM(entity relationship modeling)實(shí)體 存有特定信息的目標(biāo)和事件 例如: 客戶,訂單等 屬性 描述實(shí)體的屬性 例如: 姓名,電話號(hào)碼等 關(guān)系 兩個(gè)實(shí)體間的關(guān)系 例如:訂單和產(chǎn)品等 實(shí)體關(guān)系模型圖表里的約定
Dashed line(虛線)可選參數(shù) “may be”
Solid line(實(shí)線)必選參數(shù) “must be”
Crow's foot(多線)程度參數(shù) “one or more”
Single line(單線)程度參數(shù) “one and only one” 4.實(shí)體關(guān)系模型例子
每個(gè)訂單都必須有一個(gè)或幾個(gè)客戶
每個(gè)客戶可能是一個(gè)或幾個(gè)訂單的申請(qǐng)者 5.實(shí)體關(guān)系的類型
1:1 一對(duì)一 例如: 的士和司機(jī) M:1 多對(duì)一 例如: 乘客和飛機(jī) 1:M 一對(duì)多 例如: 員工和技能 6.校正實(shí)體關(guān)系的原則
屬性是單一值的, 不會(huì)有重復(fù)
屬性必須依存于實(shí)體, 要有唯一標(biāo)記
沒(méi)有非唯一屬性依賴于另一個(gè)非唯一的屬性 7.定義結(jié)構(gòu)時(shí)的注意事項(xiàng) 減少數(shù)據(jù)冗余
減少完整性約束產(chǎn)生的問(wèn)題 確認(rèn)省略的實(shí)體,關(guān)系和屬性 8.完整性約束的要求
Primary key 主關(guān)鍵字 唯一非NULL Foreign key 外鍵 依賴于另一個(gè)Primary key,可能為NULL Column 字段名 符合定義的類型和長(zhǎng)度
Constraint 約束條件 用戶自定義的約束條件,要符合工作流要求 例如: 一個(gè)銷售人員的提成不能超過(guò)它的基本工資
Candidate key 候選主關(guān)鍵字 多個(gè)字段名可組成候選主關(guān)鍵字, 其組合是唯一和非NULL的
9.把實(shí)體關(guān)系圖映射到關(guān)系數(shù)據(jù)庫(kù)對(duì)象的方法 把簡(jiǎn)單實(shí)體映射到數(shù)據(jù)庫(kù)里的表
把屬性映射到數(shù)據(jù)庫(kù)里的表的字段, 標(biāo)明類型和注釋 把唯一標(biāo)記映射到數(shù)據(jù)庫(kù)里的唯一關(guān)鍵字 把實(shí)體間的關(guān)系映射到數(shù)據(jù)庫(kù)里的外鍵 13
J2EE @ zxw 其它的考慮: 設(shè)計(jì)索引,使查詢更快
建立視圖,使信息有不同的呈現(xiàn)面, 減少?gòu)?fù)雜的SQL語(yǔ)句 計(jì)劃存儲(chǔ)空間的分配 重新定義完整性約束條件
10.實(shí)體關(guān)系圖里符號(hào)的含義 PK 唯一關(guān)鍵字的字段 FK 外鍵的字段
FK1,FK2 同一個(gè)表的兩個(gè)不同的外鍵
FK1,FK1 兩個(gè)字段共同組成一個(gè)外鍵 NN 非null字段 U 唯一字段
U1,U1 兩個(gè)字段共同組成一個(gè)唯一字段
九、創(chuàng)建表
1.ORACLE常用的字段類型 ORACLE常用的字段類型有
VARCHAR2(size)可變長(zhǎng)度的字符串, 必須規(guī)定長(zhǎng)度 CHAR(size)固定長(zhǎng)度的字符串, 不規(guī)定長(zhǎng)度默認(rèn)值為1
NUMBER(p,s)數(shù)字型p是位數(shù)總長(zhǎng)度, s是小數(shù)的長(zhǎng)度, 可存負(fù)數(shù) 最長(zhǎng)38位.不夠位時(shí)會(huì)四舍五入.DATE 日期和時(shí)間類型
LOB 超長(zhǎng)字符, 最大可達(dá)4G CLOB 超長(zhǎng)文本字符串 BLOB 超長(zhǎng)二進(jìn)制字符串
BFILE 超長(zhǎng)二進(jìn)制字符串, 保存在數(shù)據(jù)庫(kù)外的文件里是只讀的.數(shù)字字段類型位數(shù)及其四舍五入的結(jié)果 原始數(shù)值1234567.89 數(shù)字字段類型位數(shù) 存儲(chǔ)的值 Number 1234567.89 Number 12345678 Number 錯(cuò)
Number(9,1)1234567.9 Number(9,3)錯(cuò) Number(7,2)錯(cuò)
Number(5,-2)1234600 Number(5,-4)1230000 Number(*,1)1234567.9 2.創(chuàng)建表時(shí)給字段加默認(rèn)值 和約束條件 創(chuàng)建表時(shí)可以給字段加上默認(rèn)值
例如 : 日期字段 DEFAULT SYSDATE 這樣每次插入和修改時(shí), 不用程序操作這個(gè)字段都能得到動(dòng)作的時(shí)間 14
J2EE @ zxw 創(chuàng)建表時(shí)可以給字段加上約束條件 例如: 非空 NOT NULL 不允許重復(fù) UNIQUE 關(guān)鍵字 PRIMARY KEY 按條件檢查 CHECK(條件)外鍵 REFERENCES 表名(字段名)3.創(chuàng)建表的例子
CREATE TABLE DEPT(EPTNO NUMBER(2)CONSTRAINT PK_DEPT PRIMARY KEY, DNAME VARCHAR2(14), LOC VARCHAR2(13));CREATE TABLE region(ID number(2)NOT NULL PRIMARY KEY, postcode number default '0' NOT NULL, areaname varchar2(30)default ' ' NOT NULL);4.創(chuàng)建表時(shí)的命名規(guī)則和注意事項(xiàng)
表名和字段名的命名規(guī)則:必須以字母開(kāi)頭,可以含符號(hào)A-Z,a-z,0-9,_,$,# 大小寫(xiě)不區(qū)分
不用SQL里的保留字, 一定要用時(shí)可用雙引號(hào)把字符串括起來(lái). 用和實(shí)體或?qū)傩韵嚓P(guān)的英文符號(hào)長(zhǎng)度有一定的限制 注意事項(xiàng): 建表時(shí)可以用中文的字段名, 但最好還是用英文的字段名
創(chuàng)建表時(shí)要把較小的不為空的字段放在前面, 可能為空的字段放在后面 建表時(shí)如果有唯一關(guān)鍵字或者唯一的約束條件,建表時(shí)自動(dòng)建了索引 一個(gè)表的最多字段個(gè)數(shù)也是有限制的,254個(gè).5.約束名的命名規(guī)則和語(yǔ)法
約束名的命名規(guī)則約束名如果在建表的時(shí)候沒(méi)有指明,系統(tǒng)命名規(guī)則是SYS_Cn(n是數(shù)字)約束名字符串的命名規(guī)則同于表和字段名的命名規(guī)則 6.使用約束時(shí)的注意事項(xiàng)
約束里不能用系統(tǒng)函數(shù),如SYSDATE和別的表的字段比較 可以用本表內(nèi)字段的比較
想在事務(wù)處理后, 做約束的檢查
SQL> alter session set constraints deferred.7.由實(shí)體關(guān)系圖到創(chuàng)建表的例子 s_dept 前提條件:已有region表且含唯一關(guān)鍵字的字段id SQL> CREATE TABLE s_dept(id NUMBER(7)CONSTRAINT s_dept_id_pk PRIMARY KEY, name VARCHAR2(25)CONSTRAINT s_dept_name_nn NOT NULL, region_id NUMBER(7)CONSTRAINT s_dept_region_id_fk REFERENCES region(id), CONSTRAINT s_dept_name_region_id_uk UNIQUE(name, region_id));8.較復(fù)雜的創(chuàng)建表例子 15
J2EE @ zxw SQL> CREATE TABLE s_emp(id NUMBER(7)CONSTRAINT s_emp_id_pk PRIMARY KEY, last_name VARCHAR2(25)CONSTRAINT s_emp_last_name_nn NOT NULL,first_name VARCHAR2(25), userid VARCHAR2 CONSTRAINT s_emp_userid_nn NOT NULL CONSTRAINT s_emp_userid_uk UNIQUE, start_date DATE DEFAULT SYSDATE, comments VARCHAR2(25), manager_id NUMBER(7), title VARCHAR2(25), dept_id NUMBER(7)CONSTRAINT s_emp_dept_id_fk REFERENCES s_dept(id), salary NUMBER(11,2), commission_pct NUMBER(4,2)CONSTRAINT s_emp_commission_pct_ck CHECK(commission_pct IN(10,12.5,15,17.5,20)));
第五篇:黑馬程序員c語(yǔ)言教程:多表查詢
笛卡爾積
部門(mén)表
笛卡爾積產(chǎn)生結(jié)果: 行數(shù) 兩個(gè)表相乘
列數(shù): 行數(shù)相加 原因
條件等值連接
select ****
from tab1, tab2
where tab1.a = tab2.a
select count(e.ename)
from emp e, dept d
3* where e.deptno = d.deptno
SQL> /
COUNT(E.ENAME)
--------------
多表查詢關(guān)鍵點(diǎn):
等值連接 eg:查詢員工信息,員工號(hào),姓名,月薪,部門(mén)名稱
select e.empno, e.ename, e.sal, d.dname
from emp e, dept d
3* where e.deptno = d.deptno
SQL> /
EMPNO ENAME SAL DNAME
--------------------------------------------
7369 SMITH 800 RESEARCH
7499 ALLEN 1600 SALES
7521 WARD 1250 SALES
7566 JONES 2975 RESEARCH
7654 MARTIN 1250 SALES
7698 BLAKE 2850 SALES
7782 CLARK 2450 ACCOUNTING
7788 SCOTT 3000 RESEARCH
7839 KING 5000 ACCOUNTING
7844 TURNER 1500 SALES
7876 ADAMS 1100 RESEARCH
7900 JAMES 950 SALES
7902 FORD 3000 RESEARCH
7934 MILLER 1300 ACCOUNTING
已選擇14行。
不等值連接: eg:查詢員工信息,員工號(hào),姓名,月薪, 薪水級(jí)別
select e.empno, e.ename, e.sal, s.grade from emp e, salgrade s where e.sal >= s.losal and e.sal <=s.hisal
select e.empno, e.ename, e.sal, s.grade from emp e, salgrade s where e.sal between s.losal and s.hisal
外連接 eg:按部門(mén)統(tǒng)計(jì)員工人數(shù): 部門(mén)號(hào) 部門(mén)名稱 各部門(mén)人數(shù)
分析1: 10 20 30 ====> 分組
分析2: 因?yàn)楦鞑块T(mén)人數(shù) 是在員工表中..多表查詢
步驟1
select d.deptno, d.dname, count(e.empno)
from dept d, emp e
where d.deptno = e.deptno
group by d.deptno, d.dname
DEPTNO DNAME COUNT(E.EMPNO)
-------------------------------------
ACCOUNTING 3
RESEARCH 5
SALES 6
步驟2 外連接....分析:為什么40號(hào)部門(mén)沒(méi)有統(tǒng)計(jì)出來(lái)
原因: 因員工表里面 沒(méi)有40號(hào)部門(mén)的員工(現(xiàn)象)
where d.deptno = e.deptno(sql)問(wèn)題的本質(zhì)
40 =====>期望: 在連接條件不成立的條件下,也要把部門(mén)編號(hào)40 給顯示出來(lái)....外連接...select d.deptno, d.dname, count(e.empno)
from dept d, emp e
where d.deptno = e.deptno(+)
group by d.deptno, d.dname
左外連接:(+)寫(xiě)在=號(hào)的右邊
自連接:--查詢員工信息 ,老板信息
顯示: ****的老板是**** 自連接: 把一張表看成兩張表,自連接
--員工表的老板 是 老板表的員工
select e.ename, b.ename
from emp e, emp b
where e.mgr = b.empno
select e.ename|| '的老板是' || b.ename
from emp e, emp b
where e.mgr = b.empno
====> 需求 把員工表的每一條記錄都顯示出來(lái)
select e.ename|| '的老板是' || b.ename
from emp e, emp b
where e.mgr = b.empno(+)
select e.ename|| '的老板是' || nvl(b.ename, '他自己')
from emp e, emp b
where e.mgr = b.empno(+)
SMITH的老板是FORD
MPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO----------------------------------------------------------------------------7369 SMITH CLERK 7902 17-12月-80 800 20 7499 ALLEN SALESMAN 7698 20-2月-81 1600 300 30 7521 WARD SALESMAN 7698 22-2月-81 1250 500 30 7566 JONES MANAGER 7839 02-4月-81 2975 20 7654 MARTIN SALESMAN 7698 28-9月-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-5月-81 2850 30 7782 CLARK MANAGER 7839 09-6月-81 2450 10 7788 SCOTT ANALYST 7566 19-4月-87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7844 TURNER SALESMAN 7698 08-9月-81 1500 0 30 7876 ADAMS CLERK 7788 23-5月-87 1100 20 7900 JAMES CLERK 7698 03-12月-81 950 30 7902 FORD ANALYST 7566 03-12月-81 3000 20 7934 MILLER CLERK 7782 23-1月-82 1300 10
14行。