用SQL建立新表
注意:
如果你還沒建立自己的資料庫,現在就跳回第三章建立這個函式庫。你絕不能在master,tempdb或任何其他任何系統資料庫中加入資料。
從SQL
Sever程式組(在工作列中)啟動ISQL/w程式。出現查詢視窗後,從視窗頂部的下拉清單中選擇你在第三章所建立的資料庫。下一步,在查詢視窗中鍵入下面的SQL語句,按一下執行查詢按鈕,執行這個語句:
CREATE
TABLE guestbook (visitor VARCHAR(40),comments TEXT,entrydate
DATETIME)
如果一切正常,你會在結果視窗中看到如下的文字(如果出現異常,請參閱第三章):
This
command dit not return data ,and it did not return any rows
恭喜你,你已經建立了你的第一個表!
你所建立的表名為guestbook,你可以使用這個表來儲存來字你網站訪客的資訊。你用REEATE
TABLE語句所建立的這個表,這個語句有兩部分:第一部指定表的名子;第二部分是括在括號中的各字段的名稱和屬性,相互之間用逗號隔開。
表guestbook有三個欄位:visitor,comments
和entrydate。 visitor欄位儲存訪客的名字,comments欄位儲存訪客對你網站的意見,entrydate欄位儲存訪客造訪你網站的日期和時間。
注意每個字段名後面都跟有一個專門的表達式。例如,字段名comments後面跟著表達式TEXT。這個表達式指定了欄位的資料類型。資料類型決定了一個欄位可以儲存什麼樣的資料。因為字段comments包含文字訊息,其資料類型定義為文字型。
欄位有許多不同的資料類型。下一小節講述SQL所支援的一些重要的資料型態。
字段類型
不同的字段類型用來存放不同類型的資料。建立和使用表格時,更你應該理解五種常用的欄位類型:字元型,文字型,數值型,邏輯性和日期型。
字符型資料
字符型資料非常有用。當你需要儲存短的字串資訊時,你總是要用到字元型資料。例如,你可以把從HTML
form的文字方塊中蒐集到的資訊放在字元型欄位中。
要建立一個欄位用來存放可變長度的字串訊息,你可以使用表達式
VARCHAR。考慮你前面建立的表格guestbook:
CREATE TABLE guestbook (visitor
VARCHAR(40),comments TEXT,entrydate
DATETIME)
在這個例子中,欄位visitor的資料型別為VARCHAR。注意跟在資料類型後面的括號中的數字。這個數字指定了這個欄位所允許存放的字串的最大長度。在這個例子中,字段visitor能存放的字串最長為四十個字元。如果名字太長,字串會被截斷,只保留四十個字元。
VARCHAR類型可以儲存的字串最長為255個字元。要儲存更長的字串數據,可以使用文字型數據(下一節中講述)。
另一種字元型資料用來儲存固定長度的字元資料。以下是一個使用這種資料類型的範例:
CREATE
TABLE guestbook (visitor CHAR(40),comments TEXT,entrydate
DATETIME)
在這個例子中,字段visitor被用來儲存四十個字元的固定長度字串。表達式CHAR指定了這個欄位應該是固定長度的字串。
VARCHAR型和CHAR型資料的這個差別是細微的,但是非常重要。假如你向一個長度為四十個字元的VARCHAR型欄位輸入資料Bill
Gates。當你以後從這個欄位中取出此資料時,你取出的資料其長度為十個字元-字串Bill
Gates的長度。
現在假如你把字串輸入一個長度為四十個字元的CHAR型欄位中,那麼當你取出資料時,所取出的資料長度將是四十個字元。字串的後面會被附加多餘的空格。
當你建立自己的網站時,你會發現使用VARCHAR型欄位比CHAR型欄位方便的多。使用VARCHAR型欄位時,你不需要為剪掉你資料中多餘的空格而操心。
VARCHAR型欄位的另一個突出的好處是它可以比CHAR型欄位佔用更少的記憶體和硬碟空間。當你的資料庫很大時,這種記憶體和磁碟空間的節省會變得非常重要。
文本型資料
字符型資料限制了字串的長度不能超過255個字元。而使用文字型數據,你可以存放超過二十億個字元的字串。當你需要儲存大串的字元時,應該使用文字型資料。
這裡有一個使用文字型資料的範例:
CREATE
TABLE guestbook (visitor VARCHAR(40),comments TEXT,entrydate
DATETIME)
在這個例子中,字段comments被用來存放訪客對你網站的意見。注意文字型資料沒有長度,而上一節所講的字元型資料是有長度的。一個文字型欄位中的資料通常要麼為空,要麼很大。
當你從HTML
form的多行文字編輯框(TEXTAREA)中收集資料時,你應該把收集的資訊儲存在文字型欄位中。但是,無論何時,只要你能避免使用文字型字段,你就應該不適用它。文字型欄位既大且慢,濫用文字型欄位會使伺服器速度變慢。文字型欄位也會吃掉大量的磁碟空間。
警告:
一旦你向文字型欄位輸入了任何資料(甚至是空值),就會有2K的空間被自動分配給該資料。除非刪除該記錄,否則你無法收回這部分儲存空間。
數值型資料
SQL
Sever支持許多種不同的數值型數據。你可以儲存整數、小數、和錢數。
通常,當你需要在表中的存放數字時,你要使用整型(INT)資料。 INT型資料的表數範圍是從-2,147,483,647到2,147,483,647的整數。以下是如何使用INT型資料的範例:
CREATE
TABLE visitlog (visitor VARCHAR(40),numvisits
INT)
這個表可以用來記錄你網站被造訪的次數。只要沒有人造訪你的網站超過2,147,483,647次,nubvisits欄位就可以儲存造訪次數。
為了節省記憶體空間,你可以使用SMALLINT型資料。 SMALLINT
型資料可以儲存從-32768到32768的整數。此資料型別的使用方法與INT型完全相同。
最後,如果你實在需要節省空間,你可以使用TINYINT型資料。同樣,這種類型的使用方法也與INT型相同,不同的是這種類型的字段只能儲存從0到255的整數。 TINYINT型欄位不能用來儲存負數。
通常,為了節省空間,應該盡可能的使用最小的整型資料。一個TINYINT型資料只佔用一個位元組;一個INT型資料佔用四個位元組。這看起來似乎差異不大,但是在比較大的表中,位元組數的增長是很快的。另一方面,一旦你已經創建了一個字段,要修改它是很困難的。因此,為安全起見,你應該預測以下,一個欄位所需儲存的數值最大有可能是多大,然後選擇適當的資料類型。
為了能對字段所存放的資料有更多的控制,你可以使用NUMERIC型資料來同時表示一個數的整數部分和小數部分。 NUMERIC型資料讓你能表示非常大的數字-比INT型資料大得多。一個NUMERIC型欄位可以儲存從-1038到1038範圍內的數。 NUMERIC型資料也使你能表示有小數部分的數。例如,你可以在NUMERIC型欄位中儲存小數3.14。
當定義一個NUMERIC型欄位時,你需要同時指定整數部分的大小和小數部分的大小。這裡有一個使用這種資料類型的範例:
CREATE
TABLE numeric_data (bignumber NUMERIC(28,0),
fraction NUMERIC (5,4)
)
當這個語句執行時,將會建立一個名為numeric_data的包含兩個欄位的表。字段bignumber可以儲存直到28位元的整數。字段fraction可以儲存有五位整數部分和四位小數部分的小數。
一個NUMERIC型資料的整數部分最大隻能有28位,小數部分的位數必須小於或等於整數部分的位數,小數部分可以是零。
你可以使用INT型或NUMERIC型資料來儲存錢數。但是,專門有另外兩種資料類型用於此目的。如果你希望你的網點能賺很多錢,你可以使用MONEY型資料。如果你的野心不大,你可以使用SMALLMONEY型資料。 MONEY型資料可以儲存從-922,337,203,685,477.5808到922,337,203,685,477.5807的錢數。如果你需要儲存比這還大的金額,你可以使用NUMERIC型資料。
SMALLMONEY型資料只能儲存從-214,748.3648到214,748.3647
的錢數。同樣,如果可以的話,你應該用SMALLMONEY型來取代MONEY型數據,以節省空間。下面的範例顯示如何使用這兩種表示錢的資料類型:
CREATE
TABLE PRoducts (product VARCHAR(40),price
MONEY,
Discount_price SMALLMONEY)
這個表可以用來儲存商品的折扣和普通售價。字段price
的資料型別是MONEY,欄位discount_price的資料型別是SMALLMONEY。
儲存邏輯值
如果你使用複選框(CHECKBOX)從網頁中蒐集信息,你可以把此信息存儲在BIT型字段中。 BIT型欄位只能取兩個值:0或1。這裡有一個如何使用這種欄位的範例:
CREATE
TABLE opinion (visitor VARCHAR(40),good
BIT)
這個表可以用來存放對你的網點進行民意調查所得的資訊。訪客可以投票表示他們是否喜歡你的網點。如果他們投YES,就在BIT型字段中存入1。反之,如果他們投NO,就在字段中存入0(在下一章裡,你將學會如何計算投票)。
當心,在你建立好一個表格之後,你不能在表中新增BIT型欄位。如果你打算在一個表格中包含BIT型字段,你必須在建立表格時完成。
儲存日期和時間
當你建立一個網點時,你也許需要記錄在一段時間內的訪客數量。為了能夠儲存日期和時間,你需要使用DATETIME型數據,如下例所示:
CREATE
TABL visitorlog( visitor VARCHAR (40), arrivaltime DATETIME
,
departuretime
DATETIME)
這個表可以用來記錄訪客進入和離開你網點的時間和日期。一個DATETIME型的欄位可以儲存的日期範圍是從1753年1月1日第一毫秒到9999年12月31日最後一毫秒。
如果你不需要覆蓋這麼大範圍的日期和時間,你可以使用SMALLDATETIME型資料。它與DATETIME型資料同樣使用,只不過它能表示的日期和時間範圍比DATETIME型資料小,而且不如DATETIME型資料精確。一個SMALLDATETIME型的欄位能夠儲存從1900年1月1日到2079年6月6日的日期,它只能精確到秒。
DATETIME型欄位在你輸入日期和時間之前並不包含實際的數據,認識這一點是重要的。在下一章,你將學習如何使用大量的SQL函數來讀取和操作日期和時間(請參閱下面的「預設值」一節)。你也可以在VBScript和JScript
中使用日期和時間函數來向一個DATETIME型欄位輸入日期和時間。
欄位屬性
上一節介紹如何建立包含不同類型欄位的表格。在這一節中,你將學會如何使用字段的三個屬性。這些屬性允許你控制空值,缺省值和識別值。
允許和禁止空值
大多數欄位可以接受空值(NULL)。當一個欄位接受了空值後,如果你不改變它,它將一直保持空值。空值(NULL)和零是不同的,嚴格的說,空值表示沒有任何值。
為了允許一個欄位接受空值,你要在欄位定義的後面使用表達式NULL。例如,下面的表中兩個欄位都允許接受空值:
CREATE
TABLE empty (empty1 CHAR (40) NULL,empty2 INT
NULL(
注意:
BIT型資料不能是空值。一個這種類型的欄位必須取0或1。
有時你需要禁止一個欄位使用空值。例如,假設有一個表格儲存著信用卡號碼和信用卡有效日期,你不會希望有人輸入一個信用卡號碼但不輸入有效日期。
TABLE creditcards (creditcard_number CHAR(20) NOT NULL,
Creditcard_expire
DATETIME NOT NULL)
注意欄位定義的後面跟有表達式NOT NULL。透過包含表達式NOT
NULL,你可以禁止任何人只在一個欄位中插入數據,而不輸入另一個欄位的數據。
你將會發現,在你建立自己的網點過程中,這種禁止空值的能力是非常有用的。如果你指定一個欄位不能接受空值,那麼當你試圖輸入一個空值時,就會有錯誤警告。這些錯誤警告可以為程式調試提供有價值的線索。
缺省值
假設有一個儲存地址資訊的表,這個表的欄位包括街道、城市、州、郵遞區號和國家。如果你預期地址的大部分是在美國,你可以把這個值當作country欄位的缺省值。
為了在建立一個表格時指定缺省值,你可以使用表達式DEFAULT。請看下面這個在建立表格時使用缺省值的範例:
CREATE
TABLE addresses (street VARCHAR(60) NULL,
city VARCHAR(40)
NULL,
state VARCHAR(20) NULL
zip VARCHAR(20) NULL,
country
VARCHAR(30) DEFAULT
‘USA’)
在這個例子中,字段country的缺省值被指定為美國。注意單引號的使用,引號指明這是字元型資料。為了給非字符型的欄位指定缺省值,不要把該值擴在引號中:
CREATE
TABLE orders(price MONEY DEFAULT $38.00,
quantity INT DEFAULT
50,
entrydate DATETIME DEFAULT GETDATE())
在這個CREATE
TABLE語句中,每個欄位都指定了一個預設值。注意DATETIME型欄位entrydate所指定的缺省值,該缺省值是函數Getdate()的回傳值,該函數傳回目前的日期和時間。
標識欄位
每個表可以有一個也只能有一個識別欄位。一個識別欄位是唯一標識表中每筆記錄的特殊欄位。例如,資料庫pubs中的表jobs包含了一個唯一標識每個工作識別欄位:
job_id job_desc
………………………………………………………….
New Hire Job not
specified
Chief Executive officer
Bushness Operations Manager
Chief Financial Officier
Publisher
欄位job_id為每個工作提供了唯一的一個數字。如果你決定增加一個新工作,新增記錄的job_id欄位會被自動賦給一個新的唯一值。
為了建立一個識別字段,你只需在字段定義後面加上表達式IDENTITY即可。你只能把NUMERIC型或INT型字段設為標識字段,這裡有一個例子:
CREATE
TABLE visitorID (theID NUBERIC(18) IDENTITY,name
VARCHAR(40))
這個語句所建立的表格包含一個名為theid的識別欄位。每當一個新的訪客名字加入這個表時,這個欄位就會被自動賦給一個新值。你可以用這個表為你的網站的每一個使用者提供唯一識別。
技巧:
建立一個標示欄位時,請注意使用足夠大的資料類型。例如你使用TINYINT型數據,那麼你只能在表中增加255個記錄。如果你預期一個表可能會變得很大,你應該使用NUMERIC型資料。
標識欄位的存在會使你想嘗試許多不可能的事情。例如,你也許想利用標識欄位來對記錄進行基於它們在表中位置的運算。你應該拋棄這種意圖。每個記錄的標識欄位的值是互不相同的,但是,這並不禁止一個標識欄位的標識數字之間存在間隔。例如,你永遠不要試圖利用一個表格的識別欄位來取出表格中的前十個記錄。這種操作會導致失敗,比如說6號記錄和7號記錄根本不存在。
以上就是SQL資料操作基礎(初級)4的內容,更多相關文章請關注PHP中文網(www.php.cn)!