什么是數據庫?
大家都有過下面這樣的經歷吧?
- 收到曾經為自己診治過的牙醫寄來的明信片,上面寫著“距上次檢查已有半年,請您再來做個牙齒健康檢查”。
- 在生日的前一個月,收到曾入住過的旅店或賓館發來的“生日當月入住優惠”的郵件或者明信片。
- 在網上商城購物之后,收到內附“推薦商品列表”的郵件。
這可能是因為牙醫、旅店或商城的經營者掌握了顧客上一次的就診日期、生日和購買歷史等信息,并且擁有能夠從大量匯總信息中快速獲取所需信息(比如你的住址或愛好)的設備(計算機系統)。如果利用人工完成同樣的工作,真不知道要多長時間呢。
另外,現在所有地區的圖書館都配備了計算機,實現了圖書的自動查詢。使用該系統,可以通過檢索書名或出版年份快速查找出希望借閱的圖書的所在位置,以及是否已經借出等信息。正是因為擁有了可以保存圖書名稱、出版年份以及保管位置和外借情況等信息,并且可以按需查詢的設備,才使這一切成為可能。
像這樣將大量數據保存起來,通過計算機加工而成的可以進行高效訪問的數據集合稱為數據庫(Database,DB)。將姓名、住址、電話號碼、郵箱地址、愛好和家庭構成等數據保存到數據庫中,就可以隨時迅速獲取想要的信息了。
數據庫管理系統(DBMS)
用來管理數據庫的計算機系統稱為數據庫管理系統(Database Management System,DBMS)。為什么要使用專用系統(DBMS)來管理數據呢?
我們通過計算機管理數據的時候,通常使用文本文件或者Excel 那樣的電子制表軟件就可以完成了,非常簡單。但也有不足。下面就舉幾個有代表性的例子。
- 無法多人共享數據
保存在已連接網絡的計算機中的文件,可以通過共享設定實現多個用戶在線閱讀或編輯。但是,當某個用戶打開該文件的時候,其他用戶就無法進行編輯了。如果是網上商城的話,當某個用戶購買商品的時候,其他用戶就無法購買了。
- 無法提供操作大量數據所需的格式
要想瞬間從幾十萬或者上百萬的數據中獲取想要的數據,必須把數據保存為適當的格式,但是文本文件和Excel 工作表等無法提供相應的格式。
- 實現讀寫自動化需要編程能力
通過編寫計算機程序(以下簡稱程序)可以實現數據讀取和編輯自動化,但這必須以了解數據結構為前提,還需具備一定的計算機編程技術。
- 無法應對突發事故
當文件被誤刪、硬盤出現故障等導致無法讀取的時候,可能會造成重要數據丟失,同時數據還可能被他人輕易讀取或竊用。
DBMS 可以克服這些不足,實現多個用戶同時安全簡單地操作大量數據(圖1-2)。這也是我們一定要使用DBMS 的原因。
圖1-2 DBMS能夠實現多個用戶同時安全簡單地操作大量數據
數據庫管理系統(DBMS)的種類
DBMS 主要通過數據的保存格式(數據庫的種類)來進行分類,現階段主要有以下5 種類型。
1.層次數據庫(Hierarchical Database,HDB)
最古老的數據庫之一,它把數據通過層次結構(樹形結構)的方式表現出來。層次數據庫曾經是數據庫的主流,但隨著關系數據庫的出現和普及,現在已經很少使用了。
2.關系數據庫(Relational Database,RDB)
關系數據庫是現在應用最廣泛的數據庫。關系數據庫在1969 年誕生,可謂歷史悠久。和Excel 工作表一樣,它也采用由行和列組成的二維表來管理數據,所以簡單易懂(表1)。同時,它還使用專門的SQL(Structured Query Language,結構化查詢語言)對數據進行操作。
表1 關系數據庫中的數據
這種類型的DBMS 稱為關系數據庫管理系統(Relational Database Management System,RDBMS)。比較具有代表性的RDBMS 有如下5 種。
- Oracle Database:甲骨文公司的RDBMS(通常簡稱為Oracle)
- SQL Server :微軟公司的RDBMS
- DB2:IBM 公司的RDBMS
- PostgreSQL:開源的RDBMS
- MySQL :開源的RDBMS
3.面向對象數據庫(Object Oriented Database,OODB)
編程語言當中有一種被稱為面向對象語言的語言。把數據以及對數據的操作集合起來以對象為單位進行管理,因此得名。面向對象數據庫就是用來保存這些對象的數據庫。
4.XML數據庫(XML Database,XMLDB)
最近幾年,XMLB 作為在網絡上進行交互的數據的形式逐漸普及起來。XML 數據庫可以對XML 形式的大量數據進行高速處理。
5.鍵值存儲系統(Key-Value Store,KVS)
這是一種單純用來保存查詢所使用的主鍵(Key)和值(Value)的組合的數據庫。具有編程語言知識的讀者可以把它想象成關聯數組或者散列(hash)。近年來,隨著鍵值存儲系統被應用到google 等需要對大量數據進行超高速查詢的Web 服務當中,它正逐漸為人們所關注。
下面向大家介紹使用SQL 語言的數據庫管理系統,也就是關系數據庫管理系統(RDBMS)的操作方法。如無特殊說明,下面所提到的數據庫以及DBMS 都是指RDBMS。
數據庫的結構
RDBMS 的常見系統結構
使用RDBMS 時,最常見的系統結構就是客戶端/ 服務器類型(C/S類型)這種結構(圖1)。
圖1 使用RDBMS時的系統結構
服務器指的是用來接收其他程序發出的請求,并對該請求進行相應處理的程序(軟件),或者是安裝了此類程序的設備(計算機)。在計算機上持續執行處理,并等待接收下一條請求。RDBMS 也是一種服務器,它能夠從保存在硬盤上的數據庫中讀取數據并返回,還可以把數據變更為指定內容。
與之相對,向服務器發出請求的程序(軟件),或者是安裝了該程序的設備(計算機)稱為客戶端。訪問由RDBMS 管理的數據庫,進行數據讀寫的程序稱為RDBMS 客戶端。RDBMS 客戶端將想要獲取什么樣的數據,或者想對哪些數據進行何種變更等信息通過SQL 語句發送給RDBMS 服務器。RDBMS 根據該語句的內容返回所請求的數據,或者對存儲在數據庫中的數據進行更新。
客戶端就如同委托方,而服務器就像是受托方。由于兩者關系類似受托方執行委托方發出的指令,故而得名。
這樣就可以使用SQL 語句來實現關系數據庫的讀寫操作了。
另外,RDBMS 既可以和其客戶端安裝在同一臺計算機上,也可以分別安裝在不同的計算機上。這樣一來,不僅可以通過網絡使二者相互關聯,還可以實現多個客戶端訪問同一個RDBMS(圖2)。
圖2 通過網絡可以實現多個客戶端訪問同一個數據庫
客戶端沒有必要使用同樣的程序,只要能將SQL 發送給RDBMS,就可以操作數據庫了。并且,多個客戶端還可以同時對同一個數據庫進行讀寫操作。
另外,RDBMS 除了需要同時接收多個客戶端的請求之外,還需要操作存有大量數據的數據庫,因此通常都會安裝在比客戶端性能更優越的計算機上。操作數據量特別巨大的數據庫時,還可以將多臺計算機組合使用。
雖然RDBMS 的系統結構多種多樣,但是從客戶端發來的SQL 語句基本上都是一樣的。
什么是SQL
SQL是為操作數據庫而開發的語言。
它原本是為了提高數據庫查詢效率而開發的語言,但是現在不僅可以進行數據查詢,就連數據的插入和刪除等操作也基本上都可以通過SQL 來完成了。
國際標準化組織(ISO)為SQL 制定了相應的標準,以此為基準的SQL 稱為標準SQL。
以前,完全基于標準SQL 的RDBMS 很少,通常需要根據不同的RDBMS來編寫特定的SQL 語句。這樣一來,就會造成能夠在Oracle 中使用的SQL 語句卻無法在SQL Server 中使用,反之亦然。近來,對標準SQL 的支持取得了一些進展,因此希望準備學習SQL 的人們能夠從現在開始就牢記標準SQL 的書寫方式。
學會標準SQL 就可以在各種RDBMS 中書寫SQL 語句了。
SQL 語句及其種類
SQL 用關鍵字、表名、列名等組合而成的一條語句(SQL 語句)來描述操作的內容。關鍵字是指那些含義或使用方法已事先定義好的英語單詞,存在包含“對表進行查詢”或者“參考這個表”等各種意義的關鍵字。
根據對RDBMS 賦予的指令種類的不同,SQL 語句可以分為以下三類。
● DDL
DDL(Data Definition Language,數據定義語言) 用來創建或者刪除存儲數據用的數據庫以及數據庫中的表等對象。DDL 包含以下幾種指令。
- CREATE: 創建數據庫和表等對象
- DROP: 刪除數據庫和表等對象
- ALTER: 修改數據庫和表等對象的結構
●DML
DML(Data Manipulation Language,數據操縱語言) 用來查詢或者變更表中的記錄。DML 包含以下幾種指令。
- SELECT:查詢表中的數據
- INSERT:向表中插入新數據
- UPDATE:更新表中的數據
- DELETE:刪除表中的數據
●DCL
DCL(Data Control Language,數據控制語言) 用來確認或者取消對數據庫中的數據進行的變更。除此之外,還可以對RDBMS 的用戶是否有權限操作數據庫中的對象(數據庫表等)進行設定。DCL 包含以下幾種指令。
- COMMIT: 確認對數據庫中的數據進行的變更
- ROLLBACK: 取消對數據庫中的數據進行的變更
- GRANT: 賦予用戶操作權限
- REVOKE: 取消用戶的操作權限
SQL 根據功能不同可以分為三類,其中使用最多的是DML。
SQL 的基本書寫規則
書寫SQL 語句時必須要遵守一些規則。這些規則都非常簡單,接下來我們來逐一認識一下。
■ SQL 語句要以分號(;)結尾
一條SQL 語句可以描述一個數據庫操作。在RDBMS 當中,SQL 語句也是逐條執行的。
眾所周知,我們在句子的句尾加注標點表示結束,中文句子以句號(。)結尾,英文以點號(.)結尾,而SQL 語句則使用分號(;)結尾。
■ SQL 語句不區分大小寫
SQL 不區分關鍵字的大小寫 。例如,不管寫成SELECT 還是select,解釋都是一樣的。表名和列名也是如此。
雖然可以根據個人喜好選擇大寫還是小寫(或大小寫混雜),但為了理解起來更加容易,可以用以下規則來書寫SQL 語句。
- 關鍵字大寫
- 表名的首字母大寫
- 其余(列名等)小寫
但是插入到表中的數據是區分大小寫的。例如,在操作過程中,數據Computer、COMPUTER 或computer,三者是不一樣的。
■ 常數的書寫方式是固定的
SQL 語句常常需要直接書寫字符串、日期或者數字。例如,書寫向表中插入字符串、日期或者數字等數據的SQL 語句。
在SQL 語句中直接書寫的字符串、日期或者數字等稱為常數。常數的書寫方式如下所示。
SQL 語句中含有字符串的時候,需要像'abc'這樣,使用單引號(')將字符串括起來,用來標識這是一個字符串。
SQL 語句中含有日期的時候,同樣需要使用單引號將其括起來。日期的格式有很多種('26 Jan 2010' 或者'10/01/26' 等),也可以使用'2010-01-26' 這種' 年- 月- 日' 的格式。
在SQL 語句中書寫數字的時候,不需要使用任何符號標識,直接寫成1000 這樣的數字即可。
■ 單詞需要用半角空格或者換行來分隔
SQL 語句的單詞之間需使用半角空格或換行符來進行分隔。如下這種未加分隔的語句會發生錯誤,無法正常執行。
○ CREATE TABLE Product
× CREATETABLE Product
× CREATE TABLEProduct
但是不能使用全角空格作為單詞的分隔符,否則會發生錯誤,出現無法預期的結果。
表的內容的創建
在我們學習針對表的查詢,以及數據變更等SQL 語句之前。我們要先創建學習這些SQL 語句所需的數據庫和表。
表2 舉例用的商品表
該表是某家小商店銷售商品的一覽表。商品的數量不多,不過我們可以把它想象成大量數據中的一部分(畢竟這只是為了學習SQL 而創建的表)。像0003 號商品的登記日期以及0006 號商品的進貨單價這樣的空白內容,我們可以認為是由于店主疏忽而忘記輸入了。
我們可以看到表2 由6 列8 行所組成。最上面一行是數據的項目名,真正的數據是從第2 行開始的。
備忘
接下來,我們會逐步學習創建數據庫和表所使用的SQL 語句的書寫方式。在這之前,請先準備好學習環境(PostgreSQL)。
數據庫的創建(CREATE DATABASE語句)
前面提到,在創建表之前,一定要先創建用來存儲表的數據庫。運行CREATE DATABASE 語句就可以在RDBMS 上創建數據庫了。CREATEDATABASE 語句的語法如下所示。
這里我們僅指定了使用該語法所需的最少項目,實際開發數據庫時還需要指定各種其他項目。
語法1-1 創建數據庫的CREATE DATABASE語句
CREATE DATABASE <數據庫名稱>;
這里我們將數據庫命名為shop,然后執行代碼清單1-1 中的SQL語句。
代碼清單1-1 創建數據庫shop的CREATE DATABASE語句
CREATE DATABASE shop;
此外,數據庫名稱、表名以及列名都要使用半角字符(英文字母、數字、符號),具體內容隨后會進行介紹。
表的創建(CREATE TABLE語句)
創建好數據庫之后,接下來我們使用CREATE TABLE 語句在其中創建表。CREATE TABLE 語句的語法如下所示
語法1-2 創建表的CREATE TABLE語句
CREATE TABLE <表名> (<列名1> <數據類型> <該列所需約束>, <列名2> <數據類型> <該列所需約束>, <列名3> <數據類型> <該列所需約束>, <列名4> <數據類型> <該列所需約束>, . . . <該表的約束1>, <該表的約束2>,……);
該語法清楚地描述了我們要創建一個包含< 列名1>、< 列名2>、 ……的名稱為< 表名> 的表,非常容易理解。每一列的數據類型(后述)是必須要指定的,還要為需要的列設置約束(后述)。約束可以在定義列的時候進行設置,也可以在語句的末尾進行設置。
在數據庫中創建表1-2 中的商品表(Product 表)的CREATE TABLE 語句,如代碼清單1-2 所示。
代碼清單1-2 創建Product表的CREATE TABLE語句
CREATE TABLE Product (product_id CHAR(4) NOT NULL, product_name VARCHAR(100) NOT NULL, product_type VARCHAR(32) NOT NULL, sale_price INTEGER , purchase_price INTEGER , regist_date DATE , PRIMARY KEY (product_id));
命名規則
我們只能使用半角英文字母、數字、下劃線(_)作為數據庫、表和列的名稱 。例如,不能將product_id 寫成product-id,因為標準SQL 并不允許使用連字符作為列名等名稱。$、#、? 這樣的符號同樣不能作為名稱使用。
盡管有些RDBMS 允許使用上述符號作為列的名稱,但這也僅限于在該RDBMS 中使用,并不能保證在其他RDBMS 中也能使用。雖然大家可能會覺得限制有點太多了,但還是請遵守規則使用半角英文字母、數字和下劃線(_)吧。
此外, 名稱必須以半角英文字母開頭 。以符號開頭的名稱并不多見,但有時會碰到類似1product 或者2009_sales 這樣以數字開頭的名稱。雖然可以理解,但這在標準SQL 中是被禁止的。請大家使用product1 或者sales_2009 這樣符合規則的名稱。
最后還有一點,在同一個數據庫中不能創建兩個相同名稱的表,在同一個表中也不能創建兩個名稱相同的列。如果出現這樣的情況,RDBMS會返回錯誤信息。
接下來我們根據上述規則,使用代碼清單1-2 中的CREATE TABLE 語句來創建表2 中的商品表。表名為Product,表中的列名如表3 所示。
表3 商品表和Product表列名的對應關系
數據類型的指定
Product 表所包含的列,定義在CREATE TABLE Product( )的括號中。列名右邊的INTEGER 或者CHAR 等關鍵字,是用來聲明該列的數據類型的,所有的列都必須指定數據類型。
數據類型表示數據的種類,包括數字型、字符型和日期型等。每一列都不能存儲與該列數據類型不符的數據。聲明為整數型的列中不能存儲'abc' 這樣的字符串,聲明為字符型的列中也不能存儲1234 這樣的數字。
數據類型的種類很多,各個RDBMS 之間也存在很大差異。根據業務需要實際創建數據庫時,一定要根據不同的RDBMS 選用最恰當的數據類型。在學習SQL 的時候,使用最基本的數據類型就足夠了。下面我們就來介紹四種基本的數據類型。
● INTEGER型
用來指定存儲整數的列的數據類型(數字型),不能存儲小數。
● CHAR型
CHAR 是CHARACTER(字符)的縮寫,是用來指定存儲字符串的列的數據類型(字符型)。可以像CHAR(10) 或者CHAR(200) 這樣,在括號中指定該列可以存儲的字符串的長度(最大長度)。字符串超出最大長度的部分是無法輸入到該列中的。RDBMS 不同,長度單位也不一樣,既存在使用字符個數的情況,也存在使用字節長度的情況。
字節是計算機內部的數據單位。一個字符通常需要1到3個字節來表示(根據字符的種類和表現方式有所不同)。
字符串以定長字符串的形式存儲在被指定為CHAR 型的列中。所謂定長字符串,就是當列中存儲的字符串長度達不到最大長度的時候,使用半角空格進行補足。例如,我們向CHAR(8) 類型的列中輸入'abc'的時候,會以'abc '(abc 后面有5 個半角空格)的形式保存起來。
另外,雖然之前我們說過SQL 不區分英文字母的大小寫,但是表中存儲的字符串卻是區分大小寫的。也就是說,'ABC' 和'abc' 代表了兩個不同意義的字符串。
● VARCHAR型
同CHAR 類型一樣,VARCHAR 型也是用來指定存儲字符串的列的數據類型(字符串類型),也可以通過括號內的數字來指定字符串的長度(最大長度)。但該類型的列是以 可變長字符串 的形式來保存字符串的。定長字符串在字符數未達到最大長度時會用半角空格補足,但可變長字符串不同,即使字符數未達到最大長度,也不會用半角空格補足。例如,我們向VARCHAR(8) 類型的列中輸入字符串'abc'的時候,保存的就是字符串'abc'。
該類型的列中存儲的字符串也和CHAR 類型一樣,是區分大小寫的。
特定的SQL
Oracle中使用VARCHAR2型(Oracle中也有VARCHAR這種數據類型,但并不推薦使用)。
● DATE型
用來指定存儲日期(年月日)的列的數據類型(日期型)。
特定的SQL
除了年月日之外,Oracle中使用的DATE型還包含時分秒。
約束的設置
約束是除了數據類型之外,對列中存儲的數據進行限制或者追加條件的功能。Product 表中設置了兩種約束。
Product 表的product_id 列、product_name 列和product_type 列的定義如下所示。
product_id CHAR(4) NOT NULL, product_name VARCHAR(100) NOT NULL, product_type VARCHAR(32) NOT NULL,
數據類型的右側設置了NOT NULL 約束。NULL 是代表空白(無記錄)的關鍵字。在NULL 之前加上了表示否定的NOT,就是給該列設置了不能輸入空白,也就是必須輸入數據的約束(如果什么都不輸入就會出錯)。
NULL這個詞是無或空的意思,NULL是使用SQL時的常見關鍵字,請大家牢記。
這樣一來,Product 表的product_id(商品編號)列、product_name(商品名稱)列和product_type(商品種類)列就都成了必須輸入的項目。
另外,在創建Product 表的CREATE TABLE 語句的后面,還有下面這樣的記述。
PRIMARY KEY (product_id)
這是用來給product_id 列設置主鍵約束的。所謂鍵,就是在指定特定數據時使用的列的組合。鍵種類多樣,主鍵(primary key)就是可以特定一行數據的列B。也就是說,如果把product_id 列指定為主鍵,就可以通過該列取出特定的商品數據了。
反之,如果向product_id 列中輸入了重復數據,就無法取出唯一的特定數據了(因為無法確定唯一的一行數據)。這樣就可以為某一列設置主鍵約束了。
表的刪除(DROP TABLE語句)
此前介紹的都是關于Product 表的內容的創建,下面我們就來介紹一下刪除表的方法。刪除表的SQL 語句非常簡單, 只需要一行DROP TABLE 語句即可。
語法1-3 刪除表時使用的DROP TABLE語句
DROP TABLE <表名>;
如果想要刪除Product 表,只需要像代碼清單1-3 那樣書寫SQL語句即可。
代碼清單1-3 刪除Product表
DROP TABLE Product;
DROP 在英語中是“丟掉”“舍棄”的意思。需要特別注意的是,刪除的表是無法恢復的。即使是被誤刪的表,也無法恢復,只能重新創建,然后重新插入數據。
其實很多RDBMS 都預留了恢復的功能,但還是請大家認為是無法恢復的。
如果不小心刪除了重要的業務表,那就太悲劇了。特別是存儲了大量數據的表,恢復起來費時費力,請大家務必注意!
表定義的更新(ALTER TABLE語句)
有時好不容易把表創建出來之后才發現少了幾列,其實這時無需把表刪除再重新創建,只需使用變更表定義的ALTER TABLE 語句就可以了。ALTER 在英語中就是“改變”的意思。下面就給大家介紹該語句通常的使用方法。
首先是添加列時使用的語法。
語法1-4 添加列的ALTER TABLE語句
ALTER TABLE <表名> ADD COLUMN <列的定義>;
特定的SQL
Oracle 和SQL Server 中不用寫COLUMN。
ALTER TABLE <表名> ADD <列名> ;
另外,在Oracle 中同時添加多列的時候,可以像下面這樣使用括號。
ALTER TABLE <表名> ADD (<列名>,<列名>,……);
例如,我們可以使用代碼清單1-4 中的語句在Product 表中添加這樣一列,product_name_pinyin(商品名稱(拼音)),該列可以存儲100 位的可變長字符串。
代碼清單1-4 添加一列可以存儲100位的可變長字符串的product_name_pinyin列
DB2 PostgreSQL MySQL ALTER TABLE Product ADD COLUMN product_name_pinyin VARCHAR(100); Oracle ALTER TABLE Product ADD (product_name_pinyin VARCHAR2(100)); SQL Server ALTER TABLE Product ADD product_name_pinyin VARCHAR(100);
反之,刪除表中某列使用的語法如下所示。
語法1-5 刪除列的ALTER TABLE語句
ALTER TABLE <表名> DROP COLUMN <列名>;
特定的SQL
Oracle 中不用寫COLUMN。
ALTER TABLE <表名> DROP <列名> ;
另外,在Oracle 中同時刪除多列的時候,可以像下面這樣使用括號來實現。
ALTER TABLE <表名> DROP (<列名>,<列名>,……);
例如,我們可以使用代碼清單1-5 中的語句來刪除之前添加的product_name_pinyin 列。
代碼清單1-5 刪除product_name_pinyin列
SQL Server DB2 PostgreSQL MySQL ALTER TABLE Product DROP COLUMN product_name_pinyin; Oracle ALTER TABLE Product DROP (product_name_pinyin);
ALTER TABLE 語句和DROP TABLE 語句一樣,執行之后無法恢復。誤添的列可以通過ALTER TABLE 語句刪除,或者將表全部刪除之后重新再創建。
向Product表中插入數據
最后讓我們來嘗試一下向表中插入數據。向Product 表中插入數據的SQL 語句如代碼清單1-6 所示。
代碼清單1-6 向Product表中插入數據的SQL語句
SQL Server PostgreSQL -- DML :插入數據 BEGIN TRANSACTION;—————————① INSERT INTO Product VALUES ('0001', 'T恤衫', '衣服',1000, 500, '2009-09-20'); INSERT INTO Product VALUES ('0002', '打孔器', '辦公用品',500, 320, '2009-09-11'); INSERT INTO Product VALUES ('0003', '運動T恤', '衣服',4000, 2800, NULL); INSERT INTO Product VALUES ('0004', '菜刀', '廚房用具',3000, 2800, '2009-09-20'); INSERT INTO Product VALUES ('0005', '高壓鍋', '廚房用具',6800, 5000, '2009-01-15'); INSERT INTO Product VALUES ('0006', '叉子', '廚房用具',500, NULL, '2009-09-20'); INSERT INTO Product VALUES ('0007', '擦菜板', '廚房用具',880, 790, '2008-04-28'); INSERT INTO Product VALUES ('0008', '圓珠筆', '辦公用品',100, NULL,'2009-11-11'); COMMIT;
特定的SQL
DBMS 不同,代碼清單1-6中的DML語句也略有不同。
在MySQL 中運行時,需要把①中的BEGIN TRANSACTION;改寫成
START TRANSACTION;
在Oracle 和DB2中運行時,無需使用①中的BEGIN TRANSACTION;(請予以刪除)。
使用插入行的指令語句INSERT,就可以把表1-2 中的數據都插入到表中了。開頭的BEGIN TRANSACTION 語句是開始插入行的指令語句,結尾的COMMIT 語句是確定插入行的指令語句。
怎么入門SQL?
近年來,和其他系統領域一樣,數據庫領域也實現了飛速發展,應用范圍不斷擴大,不但出現了具有新功能的數據庫,而且操作的數據量也大幅增長。
估計很多讀者今后都會慢慢積累各個領域、各種規模的系統開發經驗(或者可能已經開始從事開發方面的工作了),到那時,所有的系統必定都需要使用數據庫。它們使用的數據庫,即便不是關系數據庫,也一定是以關系數據庫為基礎的數據庫。從這個意義上看,如果掌握了關系數據庫和 SQL,就能成為任何系統開發都需要的數據庫專家了。
下面分享一本口碑不錯的SQL入門書,它介紹了時下最流行的數據庫——關系數據庫,這也是理解其他數據庫的基礎。在系統領域,通常所講的數據庫指的就是關系數據庫,其重要性可見一斑。
- 日本知名數據庫工程師寫給初學者的實用指南!
- 107張圖表+209段代碼+88個法則,讓菜鳥完美進階!
- 基于標準SQL編寫,明示各RDBMS(PostgreSQL/DB2/MySQL/Oracle/SQL Server)的差異!
本書是編程學習系列的 SQL 和關系數據庫篇。該系列注重對初學者編程能力的培養,本書秉承了這一宗旨。本書不僅可以用于自學,也可以作為大學、專科學校和企業新人的培訓用書。書中提供了大量的示例程序和詳實的操作步驟說明,大家可以親自動手解決具體的問題,切實提高自身的編程能力。
另外,在各章的結尾處還安排了習題來幫助大家復習該章的知識要點,習題的答案和講解收錄在附錄中。
本文內容節選自《SQL基礎教程(第2版)》。