posts - 40,  comments - 7,  trackbacks - 0
            2007年1月19日
          關(guān)于inode;


          inode 譯成中文就是索引節(jié)點(diǎn)。每個(gè)存儲(chǔ)設(shè)備或存儲(chǔ)設(shè)備的分區(qū)(存儲(chǔ)設(shè)備是硬盤、軟盤、U盤 ... ... )被格式化為文件系統(tǒng)后,應(yīng)該有兩部份,一部份是inode,另一部份是Block,Block是用來(lái)存儲(chǔ)數(shù)據(jù)用的。而inode呢,就是用來(lái)存儲(chǔ)這些數(shù)據(jù)的信息,這些信息包括文件大小、屬主、歸屬的用戶組、讀寫權(quán)限等。inode為每個(gè)文件進(jìn)行信息索引,所以就有了inode的數(shù)值。操作系統(tǒng)根據(jù)指令,能通過(guò)inode值最快的找到相對(duì)應(yīng)的文件。

          做個(gè)比喻,比如一本書,存儲(chǔ)設(shè)備或分區(qū)就相當(dāng)于這本書,Block相當(dāng)于書中的每一頁(yè),inode 就相當(dāng)于這本書前面的目錄,一本書有很多的內(nèi)容,如果想查找某部份的內(nèi)容,我們可以先查目錄,通過(guò)目錄能最快的找到我們想要看的內(nèi)容。雖然不太恰當(dāng),但還是比較形象。

          當(dāng)我們用ls 查看某個(gè)目錄或文件時(shí),如果加上-i 參數(shù),就可以看到inode節(jié)點(diǎn)了;比如我們前面所說(shuō)的例子;



          [root@localhost ~]# ls -li lsfile.sh
          2408949 -rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh

          lsfile.sh 的inode值是 2408949 ; 查看一個(gè)文件或目錄的inode,要通過(guò)ls 命令的的 -i參數(shù)。


          2.10 inode 相同的文件是硬鏈接文件;


          在Linux 文件系統(tǒng)中,inode值相同的文件是硬鏈接文件,也就是說(shuō),不同的文件名,inode可能是相同的,一個(gè)inode值可以對(duì)應(yīng)多個(gè)文件。理解鏈接文件并不難,看看例子就會(huì)了。在Linux中,鏈接文件是通過(guò)ln工具來(lái)創(chuàng)建的。


          2.11 創(chuàng)建硬鏈接,硬鏈接和源文件關(guān)系;


          用ln 創(chuàng)建文件硬鏈接的語(yǔ)法:



          # ln 源文件 目標(biāo)文件

          下面我們舉一個(gè)例子,在這個(gè)例子中,我們要為sun.txt 創(chuàng)建其硬鏈接sun002.txt。然后看一下sun.txt和sun002.txt的屬性的變化;


          [root@localhost ~]# ls -li sun.txt 注:查看sun.txt的屬性;
          2408263 -rw-r--r-- 1 root root 29 04-22 21:02 sun.txt 注:這是sun.txt的屬性;
          [root@localhost ~]# ln sun.txt sun002.txt 注:我們通過(guò)ln 來(lái)創(chuàng)建sun.txt的硬鏈接文件sun002.txt
          [root@localhost ~]# ls -li sun* 注:我們列一下sun.txt 和sun002.txt
          2408263 -rw-r--r-- 2 root root 29 04-22 21:02 sun002.txt
          2408263 -rw-r--r-- 2 root root 29 04-22 21:02 sun.txt

          我們可以看到sun.txt在沒(méi)有創(chuàng)建硬鏈接文件sun002.txt的時(shí)候,其鏈接個(gè)數(shù)是1(也就是-rw-r--r--后的那個(gè)數(shù)值),創(chuàng)建了硬鏈接sun002.txt創(chuàng)建后,這個(gè)值變成了2。也就是說(shuō),我們每次為sun.txt創(chuàng)建一個(gè)新的硬鏈接文件后,其硬鏈接個(gè)數(shù)都會(huì)增加1。

          inode值相同的文件,他們的關(guān)系是互為硬鏈接的關(guān)系。當(dāng)我們修改其中一個(gè)文件的內(nèi)容時(shí),互為硬鏈接的文件的內(nèi)容也會(huì)跟著變化。如果我們刪除互為硬鏈接關(guān)系的某個(gè)文件時(shí),其它的文件并不受影響。比如我們把sun.txt刪除后,我們還是一樣能看到sun002.txt的內(nèi)容,并且sun02.txt仍是存在的。

          可以這么理解,互為硬鏈接關(guān)系的文件,他們好象是克隆體,他們的屬性幾乎是完全一樣;

          下面的例子,我們把sun.txt刪除,然后我們看一下sun002.txt 是不是能看到其內(nèi)容。



          [root@localhost ~]# rm -rf sun.txt
          [root@localhost ~]# more sun002.txt

          注意:硬鏈接不能為目錄創(chuàng)建,只有文件才能創(chuàng)建硬鏈接。


          2.12 軟鏈接的創(chuàng)建,及軟接與源文件的關(guān)系;


          創(chuàng)建軟鏈接(也被稱為符號(hào)鏈接)的語(yǔ)法;



          # ln -s 源文文件或目錄 目標(biāo)文件或目錄

          軟鏈接也叫符號(hào)鏈接,他和硬鏈接有所不同,軟鏈接文件只是其源文件的一個(gè)標(biāo)記。當(dāng)我們刪除了源文件后,鏈接文件不能獨(dú)立存在,雖然仍保留文件名,但我們卻不能查看軟鏈接文件的內(nèi)容了。



          [root@localhost ~]# ls -li linuxsir001.txt
          2408274 -rw-r--r-- 1 root root 29 04-22 21:53 linuxsir001.txt
          [root@localhost ~]# ln -s linuxsir001.txt linuxsir002.txt
          [root@localhost ~]# ls -li linuxsir001.txt linuxsir002.txt
          2408274 -rw-r--r-- 1 root root 29 04-22 21:53 linuxsir001.txt
          2408795 lrwxrwxrwx 1 root root 15 04-22 21:54 linuxsir002.txt -> linuxsir001.txt

          解釋

          上面的例子,首先我們查看 linuxsir001.txt 的屬性,比如inode 、所屬文件種類、創(chuàng)建或修改時(shí)間等... ...我們來(lái)對(duì)比一下:

          首先 對(duì)比一下節(jié)點(diǎn):兩個(gè)文件的節(jié)點(diǎn)不同;
          其次 兩個(gè)文件的歸屬的種類不同 linuxsir001.txt是-,也就是普通文件,而linuxsir002.txt 是l,它是一個(gè)鏈接文件;
          第三 兩個(gè)文件的讀寫權(quán)限不同 linuxsir001.txt 是rw-r--r-- ,而linuxsir002.txt的讀寫權(quán)限是 rwxrwxrwx
          第三 兩者的硬鏈接個(gè)數(shù)相同;都是1
          第四 兩文件的屬主和所歸屬的用戶組相同;
          第五 修改(或訪問(wèn)、創(chuàng)建)時(shí)間不同;

          我們還注意到了linuxsir002.txt 后面有一個(gè)標(biāo)記 ->,這表示linuxsir002.txt 是linuxsir001.txt的軟鏈接文件。

          值得我們注意的是:當(dāng)我們修改鏈接文件的內(nèi)容時(shí),就意味著我們?cè)谛薷脑次募膬?nèi)容。當(dāng)然源文件的屬性也會(huì)發(fā)生改變,鏈接文件的屬性并不會(huì)發(fā)生變化。當(dāng)我們把源文件刪除后,鏈接文件只存在一個(gè)文件名,因?yàn)槭チ嗽次募攒涙溄游募簿筒淮嬖诹恕_@一點(diǎn)和硬鏈接是不同的;



          [root@localhost ~]# rm -rf linuxsir001.txt 注:刪除linuxsir001.txt
          [root@localhost ~]# ls -li linuxsir002.txt 注:查看linuxsir002 的屬性;
          2408795 lrwxrwxrwx 1 root root 15 04-22 21:54 linuxsir002.txt -> linuxsir001.txt
          [root@localhost ~]# more linuxsir002.txt 注:查看linuxsir002.txt的內(nèi)容;
          linuxsir002.txt: 沒(méi)有那個(gè)文件或目錄 注:得到提示,linuxsir002.txt不存在。

          上面的例子告訴我們,如果一個(gè)鏈接文件失去了源,就意味著他已經(jīng)不存在了;

          我們可以看到軟鏈接文件,其實(shí)只是源文件的一個(gè)標(biāo)記,當(dāng)源文件失去時(shí),他也就是存在了。軟鏈接文件只是占用了inode來(lái)存儲(chǔ)軟鏈接文件屬性等信息,但文件存儲(chǔ)是指向源文件的。

          軟件鏈接,可以為文件或目錄都適用。無(wú)論是軟鏈接還是硬鏈接,都可以用rm來(lái)刪除。rm工具是通用的。
          參考資料:http://techcenter.dicder.com/2006/0908/content_185.htm
          posted @ 2007-07-13 09:54 Lansing 閱讀(755) | 評(píng)論 (0)編輯 收藏
          寫一些關(guān)于PL/SQL的語(yǔ)法,免得等到用到的時(shí)候還要去亂翻。
          1。控制流程(if,while)
          2。循環(huán)(for)
          3。游標(biāo)(cursor)
          4。異常處理(exception)

          1。控制流程()


          A.條件語(yǔ)句
          IF <statement> THEN
          ?? PL/SQL
          END IF;

          IF <statement> THEN
          ?? PL/SQL
          ELSE
          ?? PL/SQL
          END IF;

          IF
          <statement> THEN
          ?? PL/SQL
          ELSIF <statement> THEN
          ?? PL/SQL
          END IF;


          2。循環(huán)

          A.simple loop
          LOOP
          ?? SQL
          ?? EXIT WHEN <statement>;
          END LOOP;

          LOOP
          ?? SQL
          ?? IF
          <statement> THEN
          ?? EXIT;
          ?? END IF;
          END LOOP;

          B.While loop
          WHILE <statement> LOOP
          ?? SQL
          END LOOP;

          C.For loop
          FOR $counter in $low .. $high LOOP
          ?? SQL
          END LOOP


          3。游標(biāo)

          在PL/SQL程序中定義的游標(biāo)叫做顯式游標(biāo)。

          A.顯式游標(biāo)的處理由四個(gè)部分組成:
          cursor $cursorname is $Query;   --定義游標(biāo)
          open $cursorname;         --打開游標(biāo)
          fetch $cursorname into $othervariable  --把游標(biāo)中的東西取出
          close $cursorname??? --關(guān)閉游標(biāo)

          B.游標(biāo)屬性
          %found?? ?? ?? 布爾型屬性,當(dāng)最近一次讀紀(jì)錄成功
          時(shí) ,為true.
          %nofound                失敗時(shí),為false.
          %isopen
          %rowcount?? ?? 返回已從游標(biāo)中讀取的記錄數(shù)。

          C.參數(shù)化游標(biāo)

          所有的SQL語(yǔ)句在上下文區(qū)內(nèi)部都是可執(zhí)行的,因此都有一個(gè)游標(biāo)指向上下文區(qū),此游標(biāo)就是所謂的SQL游標(biāo)。
          與顯式游標(biāo)不同,SQL游標(biāo)不被程序打開和關(guān)閉。


          4.異常處理概念

          異常處理是用來(lái)處理正常執(zhí)行過(guò)程中未預(yù)料的事件。如果PL/SQL程序塊一旦產(chǎn)生異常而又沒(méi)有指出如何處理時(shí),程序會(huì)自動(dòng)終止。
          異常處理部分放在PL/SQL的后半部分,結(jié)構(gòu)為:

          EXCEPTION
          ?????? WHEN first_exception THEN <code to handle first exception>
          ?????? WHEN second_exception THEN <code to handle second exception>
          ?????? WHEN OTHERS THEN <
          code to handle second exception >? --OTHERS必須放在最后

          異常分為預(yù)定義和用戶定義兩種。
          用戶定義的異常是通過(guò)顯式使用RAISE語(yǔ)句來(lái)引發(fā)。如

          DECLARE
          ? e_TooManyStudents EXCEPTION;? -- 類型為Exception,用于指示錯(cuò)誤條件
          ? v_CurrentStudents NUMBER(3);? -- HIS-101學(xué)生注冊(cè)當(dāng)前號(hào)
          ? v_MaxStudents NUMBER(3);????? -- HIS-101學(xué)生注冊(cè)允許的最大號(hào)

          BEGIN
           /* 找出注冊(cè)學(xué)生當(dāng)前號(hào)和允許的最大號(hào) */

          ? SELECT current_students, max_students

          ??? INTO v_CurrentStudents, v_MaxStudents

          ??? FROM classes

          ??? WHERE department = 'HIS' AND course = 101;

          ? /* 檢查學(xué)生的號(hào) */

          ? IF v_CurrentStudents > v_MaxStudents THEN

          /* 太多的學(xué)生注冊(cè),則觸發(fā)例外處理 */

          ? RAISE e_TooManyStudents;

          ? END IF;

          EXCEPTION

          ? WHEN e_TooManyStudents THEN

          ??? /* 當(dāng)太多的學(xué)生注冊(cè),就插入信息解釋發(fā)生過(guò)錯(cuò)誤 */

          ??? INSERT INTO log_table (info) VALUES ('History 101 has ' || v_CurrentStudents ||

          ????? 'students: max allowed is ' || v_MaxStudents);

          END;


          END;

          用戶定義的的異常處理
          可以使用RAISE_APPLICATION_ERROR來(lái)創(chuàng)建自己的錯(cuò)誤處理:
          RAISE_APPLICATION_ERROR(error_number,error_message,[keep_errors]);
          其中
          error_number是從-20000到-20999之間的參數(shù); error_message是相應(yīng)的提示信息,小于512字節(jié)。如:

          CREATE OR REPLACE PROCEDURE Register (
          p_StudentID IN students.id%TYPE,
          p_Department IN classes.department%TYPE,
          p_Course IN classes.course%TYPE) AS
          v_CurrentStudents NUMBER;? -- 班上學(xué)生的當(dāng)前號(hào)
          v_MaxStudents NUMBER;????? -- 班上學(xué)生的最大號(hào)

          BEGIN
          /* 找出學(xué)生的當(dāng)前號(hào)和最大號(hào) */
          SELECT current_students, max_students
          ?INTO v_CurrentStudents, v_MaxStudents
          FROM classes
          WHERE course = p_Course
          AND department = p_Department;

          /* 確認(rèn)另外的學(xué)生是否有足夠的教室 */
          IF v_CurrentStudents + 1 > v_MaxStudents THEN
          RAISE_APPLICATION_ERROR(-20000, 'Can''t add more students to ' ||
          p_Department || ' ' || p_Course);
          END IF;

          /* 加一個(gè)學(xué)生在本班 */
          ClassPackage.AddStudent(p_StudentID, p_Department, p_Course);

          EXCEPTION
          WHEN NO_DATA_FOUND THEN
             
          RAISE_APPLICATION_ERROR(-20001, p_Department || ' ' || p_Course ||
          ??? ?? ??
          ' doesn''t exist!');
          END Register;

          posted @ 2007-01-23 10:10 Lansing 閱讀(378) | 評(píng)論 (0)編輯 收藏
          關(guān)于ODBC數(shù)據(jù)源連接文本?

          ????????????  在《外部數(shù)據(jù)庫(kù)的連接原理》一講中我們說(shuō)過(guò),ODBC提供對(duì)多種數(shù)據(jù)庫(kù)的支持,如dBase、Access、MS?SQL?
          ????????????Server及Oracle,也就是說(shuō)運(yùn)用ODBC數(shù)據(jù)源中所提供的連接代碼,我們可以實(shí)現(xiàn)對(duì)多種數(shù)據(jù)庫(kù)的連接。以連接Access數(shù)據(jù)庫(kù)為例,ODBC數(shù)據(jù)源連接文本的格式是:
          ????????????  “Driver={數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序};Dbq=數(shù)據(jù)庫(kù)文件;”
          ????????????  在以上連接文本中,如果數(shù)據(jù)庫(kù)跟程序在同一目錄下,或者用變量DefaultDir指定了數(shù)據(jù)庫(kù)所在目錄,則數(shù)據(jù)庫(kù)文件可以不用全路徑名,如下即可:
          ????????????  “ODBC;DBQ=MSAccess.mdb;Driver={Microsoft?Access?Driver?(*.mdb)};”
          ????????????  如下也可:
          ????????????  “ODBC;DBQ=MSAccess.mdb;DefaultDir=d:\Downloads\e21;Driver={Microsoft?
          ????????????Access?Driver?(*.mdb)};”
          ????????????  如果數(shù)據(jù)庫(kù)跟程序不在同一目錄下,或者沒(méi)有用變量DefaultDir指定數(shù)據(jù)庫(kù)所在目錄,則數(shù)據(jù)庫(kù)文件需要用全路徑名,如下:
          ????????????  “ODBC;DBQ=E:\Quake?III?Arena\MSAccess.mdb;Driver={Microsoft?Access?
          ????????????Driver?(*.mdb)};”
          ????????????  以上所說(shuō)的是連接Access數(shù)據(jù)庫(kù)的格式,那么連接其他數(shù)據(jù)庫(kù)的ODBC數(shù)據(jù)源連接文本又是怎樣的?連接不同類型的數(shù)據(jù)庫(kù)要使用不同的對(duì)應(yīng)驅(qū)動(dòng)程序,沒(méi)忘記吧!不同的驅(qū)動(dòng)程序當(dāng)然它們的參數(shù)組合也就不同了,每一種不同驅(qū)動(dòng)程序都有其特定的的參數(shù)形式:?

          ????????????  ⑴、MS?Access?ODBC?DSNless?連接:
          ????????????  ☆、參數(shù):Driver?設(shè)置值:{Microsoft?Access?Driver?(*.mdb)}
          ????????????  ☆、參數(shù):Dbq?設(shè)置值:實(shí)際路徑文件名稱
          ????????????  ☆、例句:
          ????????????  “Driver={Microsoft?Access?Driver?
          ????????????(*.mdb)};Dbq=c:\somepath\dbname.mdb;Uid=Admin;Pwd=pass;?”
          ????????????  ⑵、dBase?ODBC?DSNless?連接:?
          ????????????  ☆、參數(shù):Driver?設(shè)置值:{Microsoft?dBASE?Driver?(*.dbf)}
          ????????????  ☆、參數(shù):Dbq?設(shè)置值:實(shí)際路徑文件名稱
          ????????????  ☆、例句:
          ????????????  “Driver={Microsoft?dBASE?Driver?
          ????????????(*.dbf)};DriverID=277;Dbq=c:\somepath\dbname.dbf;?”
          ????????????  ⑶、Oracle?ODBC?DSNless?連接:
          ????????????  ☆、參數(shù):Driver?設(shè)置值:{Microsoft?ODBC?for?Oracle}
          ????????????  ☆、參數(shù):Dbq?設(shè)置值:實(shí)際路徑文件名稱
          ????????????  ☆、例句:
          ????????????  “Driver={Microsoft?ODBC?for?
          ????????????Oracle};Server=OracleServer.world;Uid=admin;Pwd=pass;?”
          ????????????  ⑷、MS?SQL?Server?DSNless?連接:?
          ????????????  ☆、參數(shù):Driver?設(shè)置值:{SQL?Server};
          ????????????  ☆、參數(shù):Server?設(shè)置值:服務(wù)器名稱
          ????????????  ☆、參數(shù):Database?設(shè)置值:數(shù)據(jù)表名稱
          ????????????  ☆、參數(shù):Uid?設(shè)置值:用戶名稱
          ????????????  ☆、參數(shù):Pwd?設(shè)置值:密碼
          ????????????  ☆、例句:
          ????????????  “Driver={SQL?
          ????????????Server};Server=servername;Database=dbname;Uid=sa;Pwd=pass;?”
          ????????????  ⑸、MS?Text?Driver?DSNless?連接:?
          ????????????  ☆、參數(shù):Driver?設(shè)置值:{Microsoft?Text?Driver?(*.txt;?*.csv)}
          ????????????  ☆、參數(shù):Dbq?設(shè)置值:實(shí)際路徑文件名稱
          ????????????  ☆、例句:
          ????????????  “Driver={Microsoft?Text?Driver?(*.txt;?
          ????????????*.csv)};Dbq=c:\somepath\;Extensions=asc,csv,tab,txt;Persist?Security?
          ????????????Info=False;?”
          ????????????  ⑹、Visual?Foxpro?DSNless?連接:
          ????????????  ☆、參數(shù):Driver?設(shè)置值:{Microsoft?Visual?FoxPro?Driver}
          ????????????  ☆、參數(shù):SourceType?設(shè)置值:DBC
          ????????????  ☆、參數(shù):SourceDB?設(shè)置值:實(shí)際路徑文件名稱?
          ????????????  ☆、例句:
          ????????????  “Driver={Microsoft?Visual?FoxPro?
          ????????????Driver};SourceType=DBC;SourceDB=c:\somepath\dbname.dbc;Exclusive=No;”?

          ????????????  ⑺、MySQL?DSNless?連接:
          ????????????  ☆、參數(shù):Driver?設(shè)置值:{mysql}
          ????????????  ☆、參數(shù):database?設(shè)置值:數(shù)據(jù)表名稱
          ????????????  ☆、參數(shù):uid?設(shè)置值:用戶名稱
          ????????????  ☆、參數(shù):pwd?設(shè)置值:密碼
          ????????????  ☆、例句:?
          ????????????  “driver={mysql};?
          ????????????database=yourdatabase;uid=username;pwd=password;option=16386”
          ????????????*******************************************************************
          ????????????SQL語(yǔ)言簡(jiǎn)介?

          ????????????  在上一講中我們介紹了連接外部數(shù)據(jù)庫(kù)的方法,那么連接之后怎樣對(duì)外部數(shù)據(jù)庫(kù)進(jìn)行讀取、顯示、增刪、更新、查詢等操作呢?這些操作需要通過(guò)外部數(shù)據(jù)庫(kù)等對(duì)象調(diào)用SQL指令才能完成。
          ????????????  ㈠、什么是SQL語(yǔ)言
          ????????????  SQL(Structure?Query?Languge,結(jié)構(gòu)化查詢語(yǔ)言)是一種數(shù)據(jù)庫(kù)專用的計(jì)算機(jī)語(yǔ)言,不管是Oracle、MS?
          ????????????SQL?
          ????????????、Access、MySQL或其他公司的數(shù)據(jù)庫(kù),也不管數(shù)據(jù)庫(kù)建立在大型主機(jī)或個(gè)人計(jì)算機(jī)上,都可以使用SQL語(yǔ)言來(lái)訪問(wèn)和修改數(shù)據(jù)庫(kù)的內(nèi)容。雖然不同公司的數(shù)據(jù)庫(kù)軟件多多少少會(huì)增加一些專屬的SQL語(yǔ)法,但大體上,它們還是遵循ASNI(美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì))制定的SQL標(biāo)準(zhǔn)。因?yàn)镾QL語(yǔ)言具有易學(xué)習(xí)及閱讀等特性,所以SQL逐漸被各種數(shù)據(jù)庫(kù)廠商采用,而成為一種共通的標(biāo)準(zhǔn)查詢語(yǔ)言。只要你學(xué)會(huì)SQL,即可操作各種數(shù)據(jù)庫(kù)如Visual?
          ????????????Foxpro、Access、dBase等等。總之,SQL語(yǔ)言是各種數(shù)據(jù)庫(kù)都可以使用的數(shù)據(jù)庫(kù)查詢語(yǔ)言。
          ????????????  SQL語(yǔ)言不僅僅具有查詢數(shù)據(jù)庫(kù)的功能,而且可以對(duì)數(shù)據(jù)庫(kù)完成選取、增刪、更新與跳轉(zhuǎn)等各種操作。
          ????????????  ㈡、SQL語(yǔ)言的組成
          ????????????  SQL語(yǔ)言是由命令(函數(shù))、子句、運(yùn)算符、加總函數(shù)及通配符等組成,分述如下:
          ????????????  1、命令
          ????????????  SQL的命令可分成數(shù)據(jù)定義語(yǔ)言與數(shù)據(jù)操作語(yǔ)言,數(shù)據(jù)定義語(yǔ)言可用來(lái)建立新的數(shù)據(jù)庫(kù)、數(shù)據(jù)表、字段及索引等,本教程不予介紹;另一為數(shù)據(jù)操作語(yǔ)言,可用來(lái)建立查詢表、排序、篩選數(shù)據(jù)、修改、增刪等動(dòng)作。數(shù)據(jù)定義語(yǔ)言命令常用的有選擇、添加、刪除和修改這四種:
          ????????????  ⑴、命令:SELECT
          ????????????  中文意思:選擇
          ????????????  說(shuō)明:用于找出合乎條件的記錄
          ????????????  ⑵、命令:INSERT
          ????????????  中文意思:插入
          ????????????  說(shuō)明:用于增加一筆記錄或合并兩個(gè)數(shù)據(jù)表
          ????????????  ⑶、命令:UPDATE
          ????????????  中文意思:更新
          ????????????  說(shuō)明:用于更正合乎條件的記錄
          ????????????  ⑷、命令:DELETE
          ????????????  中文意思:刪除
          ????????????  說(shuō)明:用于刪除合乎條件的記錄
          ????????????  2、子句
          ????????????  子句是用于設(shè)定命令要操作的對(duì)象(即參數(shù)),SQL所用的子句如下:
          ????????????  ⑴、子句:FROM?
          ????????????  中文意思:數(shù)據(jù)表
          ????????????  說(shuō)明:用于指定數(shù)據(jù)表
          ????????????  ⑵、子句:WHERE
          ????????????  中文意思:條件
          ????????????  說(shuō)明:用于設(shè)定條件
          ????????????  ⑶、GROUP?BY
          ????????????  中文意思:分組(合并)
          ????????????  說(shuō)明:用于設(shè)定分組
          ????????????  ⑷、ORDER?BY
          ????????????  中文意思:排序
          ????????????  說(shuō)明:用于設(shè)定輸出的順序及字段
          ????????????  3、運(yùn)算符
          ????????????  子句參數(shù)中的運(yùn)算符使子句構(gòu)成不同的語(yǔ)法格式,如“字段1='100'”、“字段1>'100'”等。運(yùn)算符又分邏輯運(yùn)算符與比較運(yùn)算符。
          ????????????  ◇邏輯運(yùn)算符如下:
          ????????????  ⑴、運(yùn)算符:AND
          ????????????  中文意思:并且
          ????????????  說(shuō)明:邏輯且
          ????????????  ⑵、運(yùn)算符:OR?
          ????????????  中文意思:或者
          ????????????  說(shuō)明:邏輯非
          ????????????  ⑶、運(yùn)算符:NOT
          ????????????  中文意思:取反
          ????????????  說(shuō)明:邏輯非或邏輯反
          ????????????  ◇比較運(yùn)算符如下:
          ????????????  ⑴、運(yùn)算符:<?說(shuō)明:小于
          ????????????  ⑵、運(yùn)算符:≤?說(shuō)明:小于等于
          ????????????  ⑶、運(yùn)算符:≥?說(shuō)明:大于等于
          ????????????  ⑷、運(yùn)算符:>?說(shuō)明:大于
          ????????????  ⑸、運(yùn)算符:=?說(shuō)明:等于
          ????????????  ⑹、運(yùn)算符:<>?說(shuō)明:不等于
          ????????????  ⑺、運(yùn)算符:BETWEEN?說(shuō)明:用于設(shè)定范圍?中文意思:在...之間
          ????????????  ⑻、運(yùn)算符:LIKE?說(shuō)明:用于通配設(shè)定?中文意思:如同
          ????????????  ⑼、運(yùn)算符:IN?說(shuō)明:用于集合設(shè)定?中文意思:在...之內(nèi)
          ????????????  4、加總函數(shù)
          ????????????  加總函數(shù)常常運(yùn)用在命令的參數(shù)中,如:“SELECT?SUM(數(shù)學(xué)),AVG(數(shù)學(xué))?FROM?成績(jī)單”。
          ????????????  ⑴、加總函數(shù):AVG?
          ????????????  中文意思:平均
          ????????????  說(shuō)明:用于求指定條件的平均?
          ????????????  ⑵、加總函數(shù):COUNT
          ????????????  中文意思:數(shù)量
          ????????????  說(shuō)明:用于求指定的數(shù)量
          ????????????  ⑶、加總函數(shù):SUM
          ????????????  中文意思:和
          ????????????  說(shuō)明:用于求指定條件的和
          ????????????  ⑷、加總函數(shù):MAX
          ????????????  中文意思:最大值
          ????????????  說(shuō)明:用于求指定條件的最大值
          ????????????  ⑸、加總函數(shù):MIN
          ????????????  中文意思:最小值
          ????????????  說(shuō)明:用于求指定條件的最小值
          ????????????  5、通配符
          ????????????  ⑴、通配符:%?意義:任何長(zhǎng)度的字符串(包括0)
          ????????????  ⑵、通配符:_?意義:下劃線表示任何一個(gè)字符
          ????????????  ⑶、通配符:[]?意義:中括號(hào)表示某個(gè)范圍內(nèi)的一個(gè)字符
          ????????????  在下一講將說(shuō)明SQL語(yǔ)言是怎樣把命令(函數(shù))、子句、運(yùn)算符、及加總函數(shù)等組合在一起的。

          ????????????*************************************************************************

          ????????????嵌入式SQL的應(yīng)用?

          ????????????  SQL語(yǔ)句可以單獨(dú)在數(shù)據(jù)庫(kù)系統(tǒng)本身中執(zhí)行,但如果運(yùn)用在其他編程工具所編制的程序中,一般不能單獨(dú)執(zhí)行,而要把SQL語(yǔ)句嵌入到高級(jí)語(yǔ)言(如易語(yǔ)言)中使用,通過(guò)高級(jí)語(yǔ)言的命令和方法來(lái)調(diào)用之,此時(shí)SQL稱為嵌入式SQL。調(diào)用SQL語(yǔ)句的程序稱為宿主程序,在易語(yǔ)言中一般是把SQL語(yǔ)句作為宿主程序的唯一參數(shù)來(lái)直接處理。嵌入式SQL在使用上有一些規(guī)定,在易語(yǔ)言中目前的版本規(guī)定如下:
          ????????????  ⑴、在程序中要區(qū)分SQL語(yǔ)句和宿主語(yǔ)言的語(yǔ)句。在易語(yǔ)言中好區(qū)分,因?yàn)镾QL語(yǔ)句形式是英文的,而易語(yǔ)言是中文的,但在實(shí)際應(yīng)用時(shí)仍然有可能會(huì)混亂,所以易語(yǔ)言要把SQL語(yǔ)句轉(zhuǎn)化為文本型才能調(diào)用,即嵌入式SQL語(yǔ)句兩邊要用雙引號(hào)來(lái)標(biāo)示。
          ????????????  ⑵、允許SQL語(yǔ)句使用宿主程序的變量,但使用時(shí)要將宿主程序的變量跟外部數(shù)據(jù)庫(kù)中表格的字段名區(qū)別開來(lái),區(qū)別方法如下:
          ????????????  ①、在易語(yǔ)言中要將變量類型轉(zhuǎn)化為文本型變量才能被SQL文本相加使用,比如下面的例子中有一個(gè)叫“數(shù)字1”的整數(shù)類型變量,插入到SQL文本中是這樣表達(dá):
          ????????????  外部數(shù)據(jù)庫(kù)1.查詢?(“select?*?from?chj?where?”?+?組合框1.內(nèi)容?+?“=”?+?到文本?(數(shù)字1))
          ????????????  ②、包含字段名的SQL文本兩邊加雙引號(hào),變量名不能在雙引號(hào)內(nèi),如上例。
          ????????????  ⑶、要將字段名跟字段值區(qū)別開來(lái),區(qū)別方法如下:
          ????????????  ①、對(duì)于文本類型的字段,在其字段值兩邊要加上“'”號(hào)標(biāo)示其文本值,代表語(yǔ)法是:字段名稱=‘文本值’。如下:
          ????????????  外部數(shù)據(jù)庫(kù)1.查詢?(“select?*?from?chj?where?姓名='山大王'”)
          ????????????  又如下面“查找編輯框.內(nèi)容”中的字段值是文本型,嵌入式SQL語(yǔ)句如下:
          ????????????  外部數(shù)據(jù)庫(kù)1.查詢?(“select?*?from?chj?where?姓名==”?+?“'”?+?查找編輯框.內(nèi)容?+?
          “'”)
          ????????????  ②、對(duì)于數(shù)字類型的字段,在SQL語(yǔ)句中表示其字段值,兩邊不加符號(hào)標(biāo)示,代表語(yǔ)法是:字段名稱=數(shù)字值。如下兩例:
          ????????????  外部數(shù)據(jù)庫(kù)1.查詢?(“select?*?from?chj?where?”?+?組合框1.內(nèi)容?+?“=”?+?查找編輯框.內(nèi)容)?
          ????????????  外部數(shù)據(jù)庫(kù)1.查詢?(“select?*?from?chj?where?學(xué)號(hào)=17”)
          ????????????  ③、對(duì)于日期時(shí)間類型的字段,在其字段值兩邊要加上“#”號(hào)標(biāo)示其時(shí)間值,代表語(yǔ)法是:字段名稱=#時(shí)間值#。如下兩例:
          ????????????  外部數(shù)據(jù)庫(kù)1.查詢?(“select?*?from?chj?where?入學(xué)時(shí)間?BETWEEN?#2001-01-01#?and?
          ????????????#2002-01-01#”)
          ????????????  外部數(shù)據(jù)庫(kù)1.查詢?(“select?*?from?chj?where?”?+?組合框1.內(nèi)容?+?“=”?+?“#”?+?
          ????????????查找編輯框.內(nèi)容?+?“#”)
          ????????????  ④、也可以將SQL語(yǔ)句中的字段名(尤其是中文名)可用中括號(hào)括住,如:[字段名]。
          ????????????  
          ????????????  ⑷、SQL語(yǔ)句要用半角輸入法輸入,否則可能會(huì)出錯(cuò)。
          ????????????  那么在易語(yǔ)言中怎樣調(diào)用SQL語(yǔ)句呢?一般是在外部數(shù)據(jù)庫(kù)對(duì)象(控件)的方法中調(diào)用,試概括如下:
          ????????????  ⑴、對(duì)外部數(shù)據(jù)庫(kù)進(jìn)行查詢的方法。
          ????????????  對(duì)外部數(shù)據(jù)庫(kù)的查詢就是在對(duì)外部數(shù)據(jù)庫(kù)不加編輯改動(dòng)的前提下,只通過(guò)記錄集來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行顯示、查詢、篩選、排序和記錄集的合并等操作。
          ????????????  所有查詢類的方法起源于下面這個(gè)語(yǔ)句,其他查詢類語(yǔ)句是對(duì)這個(gè)語(yǔ)句的調(diào)用(將此語(yǔ)句作為唯一的參數(shù)),該語(yǔ)句如下:
          ????????????  外部數(shù)據(jù)庫(kù).查詢?(查詢類SQL語(yǔ)句)
          ????????????  也可這樣表達(dá):
          ????????????  外部數(shù)據(jù)庫(kù).查詢?(“SELECT...FROM...[WHERE]...[GROUP?BY]...[ORDER?BY]...?”)
          ????????????  該方法是對(duì)當(dāng)前被打開數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)查詢,返回的結(jié)果稱為“記錄集句柄”(即記錄集的標(biāo)記)。注意當(dāng)不再使用此記錄集時(shí),必須使用“關(guān)閉記錄集”將其關(guān)閉,如果失敗,返回0。在易語(yǔ)言中,將以上語(yǔ)句等同于記錄集句柄以作為其他查詢類語(yǔ)句的參數(shù)。為了使該參數(shù)在所有子程序中都能應(yīng)用,我們一般把它設(shè)置為整數(shù)型全局變量,并將其值設(shè)置如下:
          ????????????  記錄集句柄=外部數(shù)據(jù)庫(kù).查詢?(查詢類SQL語(yǔ)句)
          ????????????  由于易語(yǔ)言要把SQL語(yǔ)句轉(zhuǎn)化為文本型才能調(diào)用,所以嵌入式SQL語(yǔ)句兩邊要有雙引號(hào),例句:
          ????????????  記錄集句柄?=?外部數(shù)據(jù)庫(kù)1.查詢?(“select?*?from?chj?”)
          ????????????  ※?“chj”是外部數(shù)據(jù)庫(kù)中一個(gè)表的名稱
          ????????????  又如,欲得到排序的記錄集,應(yīng)象下面這樣賦值:
          ????????????  記錄集句柄?=?外部數(shù)據(jù)庫(kù)1.查詢?(“SELECT?*?FROM?chj?ORDER?BY?語(yǔ)文?DESC”)
          ????????????  現(xiàn)將外部數(shù)據(jù)庫(kù)控件中其他的查詢類方法列舉如下:
          ????????????  ①、外部數(shù)據(jù)庫(kù).重新查詢?(記錄集句柄)?即:
          ????????????  外部數(shù)據(jù)庫(kù).重新查詢?(外部數(shù)據(jù)庫(kù).查詢?(查詢類SQL語(yǔ)句))
          ????????????  例句:外部數(shù)據(jù)庫(kù)1.重新查詢?(外部數(shù)據(jù)庫(kù)1.查詢?(“select?*?from?chj?”))?
          ????????????  ②、外部數(shù)據(jù)庫(kù).首記錄前?(記錄集句柄)?即:
          ????????????  外部數(shù)據(jù)庫(kù).首記錄前?(外部數(shù)據(jù)庫(kù).查詢?(查詢類SQL語(yǔ)句))
          ????????????  例句:外部數(shù)據(jù)庫(kù)1.首記錄前?(記錄集句柄)
          ????????????  ③、外部數(shù)據(jù)庫(kù).尾記錄后?(記錄集句柄)
          ????????????  ④、外部數(shù)據(jù)庫(kù).到首記錄?(記錄集句柄)
          ????????????  ⑤、外部數(shù)據(jù)庫(kù).到尾記錄?(記錄集句柄)
          ????????????  ⑥、外部數(shù)據(jù)庫(kù).到前一記錄?(記錄集句柄)
          ????????????  ⑦、外部數(shù)據(jù)庫(kù).到后一記錄?(記錄集句柄)
          ????????????  ⑧、外部數(shù)據(jù)庫(kù).讀?(記錄集句柄,字段名稱或位置)
          ????????????  例句:語(yǔ)文編輯框.內(nèi)容?=?到文本?(外部數(shù)據(jù)庫(kù)1.讀?(記錄集句柄,?“語(yǔ)文”))
          ????????????  ⑵、對(duì)外部數(shù)據(jù)庫(kù)進(jìn)行編輯的方法。
          ????????????  所謂對(duì)外部數(shù)據(jù)庫(kù)的編輯,就是變更改動(dòng)外部數(shù)據(jù)庫(kù)本身,包括添加、更新、刪除等,對(duì)數(shù)據(jù)庫(kù)進(jìn)行編輯不必通過(guò)記錄集。所有非查詢類SQL語(yǔ)句都嵌入下面這個(gè)語(yǔ)句來(lái)執(zhí)行:
          ????????????  外部數(shù)據(jù)庫(kù).執(zhí)行?(非查詢類SQL語(yǔ)句)
          ????????????  ①、添加記錄,其語(yǔ)法如下:
          ????????????  外部數(shù)據(jù)庫(kù).執(zhí)行?(“insert?into?表名稱(字段1,字段2...)?values?(字段值1,字段值2...)?”)
          ????????????  例句:
          ????????????  外部數(shù)據(jù)庫(kù)1.執(zhí)行?(“INSERT?INTO?chj?”?+?“(學(xué)號(hào),姓名,語(yǔ)文,數(shù)學(xué),英語(yǔ))”?+?“?valueS?”?+?
          ????????????“(”?+?學(xué)號(hào)編輯框.內(nèi)容?+?“,'”?+?姓名編輯框.內(nèi)容?+?“','”?+?語(yǔ)文編輯框.內(nèi)容?+?“','”?+?
          ????????????數(shù)學(xué)編輯框.內(nèi)容?+?“','”?+?英語(yǔ)編輯框.內(nèi)容?+?“')”)
          ????????????  ②、更新記錄,其語(yǔ)法如下:
          ????????????  外部數(shù)據(jù)庫(kù).執(zhí)行?(“UPDATE?表名稱?SET?字段1=字段值1,字段2=字段值2...WHERE?條件式”)?
          ????????????  例句:
          ????????????  外部數(shù)據(jù)庫(kù)1.執(zhí)行?(“UPDATE?chj?SET?學(xué)號(hào)=”?+?“'”?+?學(xué)號(hào)編輯框.內(nèi)容?+?“',”?+?“姓名=”?
          ????????????+?“'”?+?姓名編輯框.內(nèi)容?+?“',”?+?“語(yǔ)文=”?+?“'”?+?語(yǔ)文編輯框.內(nèi)容?+?“',”?+?“數(shù)學(xué)=”?
          ????????????+?“'”?+?數(shù)學(xué)編輯框.內(nèi)容?+?“',”?+?“英語(yǔ)=”?+?“'”?+?英語(yǔ)編輯框.內(nèi)容?+?“'?”?+?“WHERE?
          ????????????姓名=”?+?“'”?+?姓名1?+?“'?”?+?“AND?語(yǔ)文=”?+?語(yǔ)文1?+?“AND?數(shù)學(xué)=”?+?數(shù)學(xué)1?+?“AND?
          ????????????英語(yǔ)=”?+?英語(yǔ)1?+?“AND?學(xué)號(hào)=”?+?學(xué)號(hào)1)
          ????????????  ③、刪除記錄,其語(yǔ)法如下:
          ????????????  外部數(shù)據(jù)庫(kù).執(zhí)行?(“DELETE?*?FROM?表名稱?WHERE?條件式”)
          ????????????  例句:
          ????????????  外部數(shù)據(jù)庫(kù).執(zhí)行?(“外部數(shù)據(jù)庫(kù)1.執(zhí)行?(“DELETE?*?FROM?chj?”?+?“WHERE?姓名=”?+?“'”?+?
          ????????????姓名1?+?“'?”?+?“AND?語(yǔ)文=”?+?語(yǔ)文1?+?“AND?數(shù)學(xué)=”?+?數(shù)學(xué)1?+?“AND?英語(yǔ)=”?+?英語(yǔ)1?+?
          ????????????“AND?學(xué)號(hào)=”?+?學(xué)號(hào)1)”)
          posted @ 2007-01-19 12:17 Lansing 閱讀(1644) | 評(píng)論 (3)編輯 收藏
          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          歡迎探討,努力學(xué)習(xí)Java哈

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          Lansing's Download

          Lansing's Link

          我的博客

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 洞口县| 辽宁省| 绥中县| 新宁县| 兖州市| 宁夏| 苗栗县| 林州市| 宣汉县| 文成县| 遂川县| 玉溪市| 朝阳区| 运城市| 额济纳旗| 绥化市| 威宁| 灵石县| 海晏县| 建昌县| 城固县| 西安市| 全州县| 滕州市| 广宗县| 江安县| 忻州市| 开远市| 屏南县| 耿马| 六安市| 四会市| 体育| 夏津县| 日喀则市| 宽城| 南阳市| 剑阁县| 威信县| 丰都县| 安西县|