王麗英 魯 娟
[摘要]SQL是高級(jí)的非過(guò)程化編程語(yǔ)言,可以寫(xiě)出非常復(fù)雜的語(yǔ)句。SQL數(shù)據(jù)庫(kù)編程技術(shù)在Foxpro中的應(yīng)用是FoxPro推出的另一項(xiàng)具有革命性意義的關(guān)鍵技術(shù)。介紹SQL的定義以及SQL數(shù)據(jù)庫(kù)編程技術(shù)在Foxpro中的應(yīng)用。
[關(guān)鍵詞]SQL語(yǔ)句 非過(guò)程化語(yǔ)言 存儲(chǔ)過(guò)程
中圖分類(lèi)號(hào):TP3文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1671-7597(2009)0220071-01
當(dāng)今,數(shù)據(jù)庫(kù)聯(lián)網(wǎng)實(shí)現(xiàn)數(shù)據(jù)共享已經(jīng)成為信息系統(tǒng)建設(shè)中一個(gè)迅速發(fā)展的潮流。利用SQL Server、Oracal、Sybase等客戶(hù)機(jī)/服務(wù)器(Client/Se
rver)體系結(jié)構(gòu)的數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行信息系統(tǒng)的開(kāi)發(fā)、更新改造已成為當(dāng)前一大趨勢(shì)。而Foxpro是我國(guó)近年應(yīng)用較為廣泛的數(shù)據(jù)庫(kù)開(kāi)發(fā)軟件,許多單位、部門(mén)多年來(lái)積累了大量的寶貴的數(shù)據(jù)資料,這些部門(mén)面臨進(jìn)行計(jì)算機(jī)信息系統(tǒng)改造、更新問(wèn)題,下面主要介紹如何在DBF數(shù)據(jù)表中運(yùn)用SQL Server語(yǔ)言。
一、SQL的概念
SQL全稱(chēng)是“結(jié)構(gòu)化查詢(xún)語(yǔ)言(Structured Query Language)”是一種數(shù)據(jù)庫(kù)查詢(xún)和程序設(shè)計(jì)語(yǔ)言,用于存取數(shù)據(jù)以及查詢(xún)、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。最早的是IBM的圣約瑟研究實(shí)驗(yàn)室為其關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)SYSTEM R開(kāi)發(fā)的一種查詢(xún)語(yǔ)言,它的前身是SQUARE語(yǔ)言。SQL語(yǔ)言結(jié)構(gòu)簡(jiǎn)潔,功能強(qiáng)大,簡(jiǎn)單易學(xué),所以自從IBM公司1981年推出以來(lái),SQL語(yǔ)言,得到了廣泛的應(yīng)用。如今無(wú)論是像Oracle,Sybase,Informix,SQL server這些大型的數(shù)據(jù)庫(kù)管理系統(tǒng),還是像Visual Foxporo,PowerBuilder這些微機(jī)上常用的數(shù)據(jù)庫(kù)開(kāi)發(fā)系統(tǒng),都支持SQL語(yǔ)言作為查詢(xún)語(yǔ)言。
SQL是高級(jí)的非過(guò)程化編程語(yǔ)言,允許用戶(hù)在高層數(shù)據(jù)結(jié)構(gòu)上工作,具有完全不同底層結(jié)構(gòu)的不同數(shù)據(jù)庫(kù)系統(tǒng)可以使用相同的SQL語(yǔ)言作為數(shù)據(jù)輸入與管理的接口。它以記錄集合作為操作對(duì)象,所有SQL語(yǔ)句接受集合作為輸入,返回集合作為輸出,這種集合特性允許一條SQL語(yǔ)句的輸出作為另一條SQL語(yǔ)句的輸入,所以SQL語(yǔ)句可以嵌套,這使他具有極大的靈活性和強(qiáng)大的功能,可以寫(xiě)出非常復(fù)雜的語(yǔ)句。
SQL語(yǔ)言包括兩種主要程式設(shè)計(jì)語(yǔ)言類(lèi)別的陳述式:資料定義語(yǔ)言(DDL)與資料操作語(yǔ)言(DML)。DDL用于定義和管理物件,例如資料庫(kù)、資料表以及檢視表。DDL陳述式通常包括每個(gè)物件的CREATE、ALTER以及DROP命令。舉例來(lái)說(shuō),CREATE TABLE、ALTER TABLE以及DROP TABLE這些陳述式便可以用來(lái)建立新資料表、修改其屬性(如新增或刪除資料行)、刪除資料表等。DML利用INSERT、SELECT、UPDATE及DELETE 等陳述式來(lái)操作資料庫(kù)物件所包含的資料。
二、SQL的優(yōu)點(diǎn)
SQL廣泛地被采用正說(shuō)明了它的優(yōu)點(diǎn)。它使全部用戶(hù),包括應(yīng)用程序員、DBA管理員和終端用戶(hù)受益匪淺。
(一)非過(guò)程化語(yǔ)言
SQL是一個(gè)非過(guò)程化的語(yǔ)言,因?yàn)樗淮翁幚硪粋€(gè)記錄,對(duì)數(shù)據(jù)提供自動(dòng)導(dǎo)航。SQL允許用戶(hù)在高層的數(shù)據(jù)結(jié)構(gòu)上工作,而不對(duì)單個(gè)記錄進(jìn)行操作,可操作記錄集。所有SQL語(yǔ)句接受集合作為輸入,返回集合作為輸出。SQL的集合特性允許一條SQL語(yǔ)句的結(jié)果作為另一條SQL語(yǔ)句的輸入。SQL不要求用戶(hù)指定對(duì)數(shù)據(jù)的存放方法。這種特性使用戶(hù)更易集中精力于要得到的結(jié)果。所有SQL語(yǔ)句使用查詢(xún)優(yōu)化器,它是RDBMS的一部分,由它決定對(duì)指定數(shù)據(jù)存取的最快速度的手段。查詢(xún)優(yōu)化器知道存在什么索引,哪兒使用合適,而用戶(hù)從不需要知道表是否有索引,表有什么類(lèi)型的索引。
(二)統(tǒng)一的語(yǔ)言
SQL可用于所有用戶(hù)的DB活動(dòng)模型,包括系統(tǒng)管理員、數(shù)據(jù)庫(kù)管理員、應(yīng)用程序員、決策支持系統(tǒng)人員及許多其它類(lèi)型的終端用戶(hù)?;镜腟QL命令只需很少時(shí)間就能學(xué)會(huì),最高級(jí)的命令在幾天內(nèi)便可掌握。SQL為許多任務(wù)提供了命令,包括:
1.查詢(xún)數(shù)據(jù);
2.在表中插入、修改和刪除記錄;
3.建立、修改和刪除數(shù)據(jù)對(duì)象;
4.控制對(duì)數(shù)據(jù)和數(shù)據(jù)對(duì)象的存取;
5.保證數(shù)據(jù)庫(kù)一致性和完整性。
三、執(zhí)行存儲(chǔ)過(guò)程
JDBC調(diào)用存儲(chǔ)過(guò)程,并使用存儲(chǔ)過(guò)程的返回值。這樣可以將處理工作分為服務(wù)端和客戶(hù)端兩部分,并大大加快系統(tǒng)的設(shè)計(jì)和開(kāi)發(fā)的時(shí)間。比如可以重復(fù)使用服務(wù)器上的組件。使用存儲(chǔ)過(guò)程之后大量存儲(chǔ)計(jì)算工作可以交給數(shù)據(jù)庫(kù)服務(wù)器來(lái)處理,這將降低Web服務(wù)器的負(fù)載,從而提高整個(gè)系統(tǒng)的性能。
四、使用事務(wù)
1.事務(wù)中的操作是一個(gè)整體,要么都執(zhí)行成功要么都不成功:事務(wù)開(kāi)始后,如果所有的改變都正確,則使用commit方法將這些動(dòng)作全部存入數(shù)據(jù)庫(kù),否則就使用rollback取消所有的改變動(dòng)作,而這時(shí)數(shù)據(jù)庫(kù)中的數(shù)據(jù)和執(zhí)行事務(wù)前的是相同的。
2.使用事務(wù)時(shí)應(yīng)當(dāng)先用con.setAutoCommit(false),最后使用commit或者rollback。
3.rollback一般在catch段執(zhí)行。
五、數(shù)據(jù)庫(kù)連接池
如果有一個(gè)數(shù)據(jù)庫(kù)連接請(qǐng)求并且連接中沒(méi)有連接,則生成一個(gè)新的連接。這個(gè)連接使用完之后并不關(guān)閉它,而是將它放入連接池。在這個(gè)過(guò)程中,還要判斷連接池中的連接是否超期。如果超期則將它關(guān)閉。
六、小結(jié)
綜上所述,SQL語(yǔ)言是強(qiáng)大的數(shù)據(jù)語(yǔ)言。SQL Fox的開(kāi)發(fā)人員第一次用單一語(yǔ)句取代了整個(gè)程序過(guò)程,并且這種支持是內(nèi)含于Fox數(shù)據(jù)引擎之中的,是一次具有革命意義的技術(shù)進(jìn)步。
參考文獻(xiàn):
[1]胡維華主編,《Visual FoxPro程序設(shè)計(jì)教程》,浙江科學(xué)技術(shù)出版社,杭州,2000.
[2]陳華生主編,《Visual FoxPro教程》,蘇州大學(xué)出版社.
[3]http://www.zk168.com.cn/INFO/Study/FreeThesis/In.29K 2006-6-29.
[4]http://www.dongkai.me/blog-it-related-articles/6-history-of-sql.html,SQL發(fā)展歷史.