數據庫(DB)與數據庫管理系統(DBMS)

“數據庫”這個詞已經被濫用,可能用來指一個數據系統(如中國移動的號碼數據庫),可能用來指一種數據存儲技術(如關係數據庫和NoSQL數據庫),還可能用來指DBMS(如人們常說SQL Server是數據庫軟件)。這種混亂已然形成,恐怕難以改變(比如上文的描述即是如此)。我們只能根據上下文來判斷具體含義。
按最狹義的技術含義,數據庫(Database)是指位於一個數據庫服務器實例上的一個庫,而DBMS則是指類似SQL Server、Oracle等等此類軟件。初學者要注意這些概念之間的差別。論壇上常常見到這樣的帖子:“連不上數據庫”、“數據庫打不開了”,又沒有上下文,可見發問者概念混亂,搞得解答者也是一頭霧水。


SQL是一個關係數據庫查詢語言的標準,而SQL方言則是各種DBMS在SQL標準上進行的擴展,如增加新的關鍵字、查詢功能、特有的數據類型、支持過程化的控制流語句等。例如SQL Server的T-SQL和Oracle的PL/SQL都是常見的SQL方言。
這就好比ANSI C標準與各種編譯器實現的C語言的差別。但不同SQL方言之間的差異遠大於不同C編譯器之間的差異。SQL方言之間的差異,對於跨DBMS的學習和開發,都是必須注意的。



語句(statement)是SQL中一個可以單獨執行的單元。如SELECT * FROM table;即是一個語句,其中包含了SELECT子句(clause)和FROM子句。SQL標準規定用分號作爲語句的結束,但在目前的T-SQL中,語句結束的分號是可選的。

表達式(expression)是SQL中的一個值(可能是變量、常量、查詢字段或計算結果),對應一種特定的數據類型。SQL中的表達式分爲標量表達式和表值表達式,其中表值表達式作爲單獨語句則是SELECT語句,作爲語句的一部分則稱爲子查詢。比如0, col + 2, DATEADD(second, 30, GETDATE())都是(標量)表達式。

需要特別說明的是,SQL中的CASE WHEN是標題表達式,而不是條件語句。比如CASE WHEN中可以使用表達式,卻不能使用語句;CASE WHEN的結果是一個特定數據類型的標量值;CASE WHEN可以用在SELECT、GROUP BY或ORDER BY子句中,但IF ELSE則不行。

斷言(predicate)是SQL中進行比較的結果,即真值,可理解爲布爾表達式,因爲SQL中沒有bool數據類型,所以將斷言特別從表達式中區分出來。比如1是一個標量表達式,而1 = 1則是一個斷言,後者可以用在WHERE、ON、HAVING、CHECK等需要真值條件的地方,但前者則不可以。由於NULL的存在,SQL中的斷言是三值邏輯,即True/False/Unknown,詳見下文“NULL與三值邏輯”。

下文中多次用到計算和比較兩個詞。表達式和表達式進行計算,結果是新的表達式;表達式和表達式進行比較,結果是一個斷言;斷言和斷言可以進行邏輯運行(AND/OR/NOT),結果是新的斷言。注意其中的區別。



SQL是數據庫的查詢語言,因而可以對系統數據產生持久化影響。在常規編程中,一個錯誤通常只會造成程序的crash或bug,修改並重新調試往往就可以了;而在SQL中,一個不小心就可能造成系統數據的破壞和丟失。常常有新手執行SQL時,不小心遺漏了DELETE或UPDATE語句中的WHERE子句,這往往是很大的麻煩。

因此,學習和使用SQL,一開始應該養成兩個習慣:
1. 細心。在執行SQL語句認真檢查一下,要清楚自己在做什麼。
2. 及時備份,並考慮對系統的元數據進行版本控制。爲偶爾的意外準備好後悔藥。

常見的可能造成破壞性影響的SQL關鍵詞:DELETE, UPDATE, DROP, TRUNCATE TABLE。



SQL擅長集合操作,而不是循環。所謂說明式語言,你只需要告訴SQL需要做什麼,而不是怎麼做。

初學SQL的人,思維往往難免帶有過程式語言的痕跡,解決問題時常常不由地考慮循環。在學習SQL編程時,每當想要用循環時,先反問一下自己:這個問題是不是必須用循環來解決?事實上,多數情況下,這個問題的答案是否定的。

有本書中講,SQL代碼中出現一次IF便要減一些分(比如-1),出現一次WHILE便要減很多分(比如-10或-50,不誇張)。可以嘗試用這樣的方法爲自己的存儲過程打分。
需要檢查的另一個組件是Microsoft數據訪問組件(MDAC)安裝程序,它作爲SQL-Server2000安裝程序的一部分啓動。
    SQL
-Server2000安裝程序會安裝MDAC2.6。MDAC安裝程序會創建名爲Dasetup.log的單獨的日誌文件;您可以查看此日誌文件並確保MDAC
    安裝程序沒有出現問題。

你說的是備份-還原吧 從你的開發環境上備份出數據庫,然後到目標機器上還原即可.是這個意思嗎
如果你是想把數據庫打包到你的應用軟件環境裏,那個好像只有msde版的可以當然具體情況你最好自己查一下微軟的說明

來源:英超直播

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章