国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

SQL數(shù)據(jù)操作基礎(初級)  4

2019-11-18 22:17:10
字體:
供稿:網(wǎng)友
用SQL創(chuàng)建新表

注意:

如果你還沒有建立自己的數(shù)據(jù)庫,現(xiàn)在就跳回到第三章創(chuàng)建這個庫。你絕不能向master,tempdb或任何其他任何系統(tǒng)數(shù)據(jù)庫中添加數(shù)據(jù)。

從SQL Sever程序組(在任務欄中)中啟動ISQL/w程序。出現(xiàn)查詢窗口后,從窗口頂部的下拉列表中選擇你在第三章所創(chuàng)建的數(shù)據(jù)庫。下一步,在查詢窗口中鍵入下面的SQL語句,單擊執(zhí)行查詢按鈕,執(zhí)行這個語句:

CREATE TABLE guestbook (visitor VARCHAR(40),comments TEXT,entrydate

DATETIME)

如果一切正常,你會在結(jié)果窗口中看到如下的文字(如果出現(xiàn)異常,請參閱第三章):

This command dit not return data ,and it did not return any rows

祝賀你,你已經(jīng)建立了你的第一個表!

你所創(chuàng)建的表名為guestbook,你可以使用這個表來存儲來字你站點訪問者的信息。你是用REEATE TABLE語句創(chuàng)建的這個表,這個語句有兩部分:第一部份指定表的名子;第二部份是括在括號中的各字段的名稱和屬性,相互之間用逗號隔開。

表guestbook有三個字段:visitor,comments 和entrydate。visitor字段存儲訪問者的名字,comments字段存儲訪問者對你站點的意見,entrydate字段存儲訪問者訪問你站點的日期和時間。

注意每個字段名后面都跟有一個專門的表達式。例如,字段名comments后面跟有表達式TEXT。這個表達式指定了字段的數(shù)據(jù)類型。數(shù)據(jù)類型決定了一個字段可以存儲什么樣的數(shù)據(jù)。因為字段comments包含文本信息,其數(shù)據(jù)類型定義為文本型。

字段有許多不同的數(shù)據(jù)類型。下一小節(jié)講述SQL所支持的一些重要的數(shù)據(jù)類型。

字段類型

不同的字段類型用來存放不同類型的數(shù)據(jù)。創(chuàng)建和使用表時,更你應該理解五種常用的字段類型:字符型,文本型,數(shù)值型,邏輯性和日期型。

字符型數(shù)據(jù)

字符型數(shù)據(jù)非常有用。當你需要存儲短的字符串信息時,你總是要用到字符型數(shù)據(jù)。例如,你可以把從HTML form的文本框中搜集到的信息放在字符型字段中。

要建立一個字段用來存放可變長度的字符串信息,你可以使用表達式 VARCHAR??紤]你前面創(chuàng)建的表guestbook:

CREATE TABLE guestbook (visitor VARCHAR(40),comments TEXT,entrydate

DATETIME)

在這個例子中,字段visitor的數(shù)據(jù)類型為VARCHAR。注意跟在數(shù)據(jù)類型后面的括號中的數(shù)字。這個數(shù)字指定了這個字段所允許存放的字符串的最大長度。在這個例子中,字段visitor能存放的字符串最長為四十個字符。如果名字太長,字符串會被截斷,只保留四十個字符。

VARCHAR類型可以存儲的字符串最長為255個字符。要存儲更長的字符串數(shù)據(jù),可以使用文本型數(shù)據(jù)(下一節(jié)中講述)。

另一種字符型數(shù)據(jù)用來存儲固定長度的字符數(shù)據(jù)。下面是一個使用這種數(shù)據(jù)類型的例子:

CREATE TABLE guestbook (visitor CHAR(40),comments TEXT,entrydate

DATETIME)

在這個例子中,字段visitor被用來存儲四十個字符的固定長度字符串。表達式CHAR指定了這個字段應該是固定長度的字符串。

VARCHAR型和CHAR型數(shù)據(jù)的這個差別是細微的,但是非常重要。假如你向一個長度為四十個字符的VARCHAR型字段中輸入數(shù)據(jù)Bill Gates。當你以后從這個字段中取出此數(shù)據(jù)時,你取出的數(shù)據(jù)其長度為十個字符——字符串Bill Gates的長度。

現(xiàn)在假如你把字符串輸入一個長度為四十個字符的CHAR型字段中,那么當你取出數(shù)據(jù)時,所取出的數(shù)據(jù)長度將是四十個字符。字符串的后面會被附加多余的空格。

當你建立自己的站點時,你會發(fā)現(xiàn)使用VARCHAR型字段要比CHAR型字段方便的多。使用VARCHAR型字段時,你不需要為剪掉你數(shù)據(jù)中多余的空格而操心。

VARCHAR型字段的另一個突出的好處是它可以比CHAR型字段占用更少的內(nèi)存和硬盤空間。當你的數(shù)據(jù)庫很大時,這種內(nèi)存和磁盤空間的節(jié)省會變得非常重要。

文本型數(shù)據(jù)

字符型數(shù)據(jù)限制了字符串的長度不能超過255個字符。而使用文本型數(shù)據(jù),你可以存放超過二十億個字符的字符串。當你需要存儲大串的字符時,應該使用文本型數(shù)據(jù)。

這里有一個使用文本型數(shù)據(jù)的例子:

CREATE TABLE guestbook (visitor VARCHAR(40),comments TEXT,entrydate

DATETIME)

在這個例子中,字段comments被用來存放訪問者對你站點的意見。注意文本型數(shù)據(jù)沒有長度,而上一節(jié)中所講的字符型數(shù)據(jù)是有長度的。一個文本型字段中的數(shù)據(jù)通常要么為空,要么很大。

當你從HTML form的多行文本編輯框(TEXTAREA)中收集數(shù)據(jù)時,你應該把收集的信息存儲于文本型字段中。但是,無論何時,只要你能避免使用文本型字段,你就應該不適用它。文本型字段既大且慢,濫用文本型字段會使服務器速度變慢。文本型字段還會吃掉大量的磁盤空間。

警告:

一旦你向文本型字段中輸入了任何數(shù)據(jù)(甚至是空值),就會有2K的空間被自動分配給該數(shù)據(jù)。除非刪除該記錄,否則你無法收回這部分存儲空間。

數(shù)值型數(shù)據(jù)

SQL Sever支持許多種不同的數(shù)值型數(shù)據(jù)。你可以存儲整數(shù)、小數(shù)、和錢數(shù)。

通常,當你需要在表中的存放數(shù)字時,你要使用整型(INT)數(shù)據(jù)。INT型數(shù)據(jù)的表數(shù)范圍是從-2,147,483,647到2,147,483,647的整數(shù)。下面是一個如何使用INT型數(shù)據(jù)的例子:

CREATE TABLE visitlog (visitor VARCHAR(40),numvisits INT)

這個表可以用來記錄你站點被訪問的次數(shù)。只要沒有人訪問你的站點超過2,147,483,647次,nubvisits字段就可以存儲訪問次數(shù)。

為了節(jié)省內(nèi)存空間,你可以使用SMALLINT型數(shù)據(jù)。SMALLINT 型數(shù)據(jù)可以存儲從-32768到32768的整數(shù)。這種數(shù)據(jù)類型的使用方法與INT型完全相同。

最后,如果你實在需要節(jié)省空間,你可以使用TINYINT型數(shù)據(jù)。同樣,這種類型的使用方法也與INT型相同,不同的是這種類型的字段只能存儲從0到255的整數(shù)。TINYINT型字段不能用來存儲負數(shù)。

通常,為了節(jié)省空間,應該盡可能的使用最小的整型數(shù)據(jù)。一個TINYINT型數(shù)據(jù)只占用一個字節(jié);一個INT型數(shù)據(jù)占用四個字節(jié)。這看起來似乎差別不大,但是在比較大的表中,字節(jié)數(shù)的增長是很快的。另一方面,一旦你已經(jīng)創(chuàng)建了一個字段,要修改它是很困難的。因此,為安全起見,你應該預測以下,一個字段所需要存儲的數(shù)值最大有可能是多大,然后選擇適當?shù)臄?shù)據(jù)類型。

為了能對字段所存放的數(shù)據(jù)有更多的控制,你可以使用NUMERIC型數(shù)據(jù)來同時表示一個數(shù)的整數(shù)部分和小數(shù)部分。NUMERIC型數(shù)據(jù)使你能表示非常大的數(shù)——比INT型數(shù)據(jù)要大得多。一個NUMERIC型字段可以存儲從-1038到1038范圍內(nèi)的數(shù)。NUMERIC型數(shù)據(jù)還使你能表示有小數(shù)部分的數(shù)。例如,你可以在NUMERIC型字段中存儲小數(shù)3.14。

當定義一個NUMERIC型字段時,你需要同時指定整數(shù)部分的大小和小數(shù)部分的大小。這里有一個使用這種數(shù)據(jù)類型的例子:

CREATE TABLE numeric_data (bignumber NUMERIC(28,0),

fraction NUMERIC (5,4) )

當這個語句執(zhí)行時,將創(chuàng)建一個名為numeric_data的包含兩個字段的表。字段bignumber可以存儲直到28位的整數(shù)。字段fraction可以存儲有五位整數(shù)部分和四位小數(shù)部分的小數(shù)。

一個NUMERIC型數(shù)據(jù)的整數(shù)部分最大只能有28位,小數(shù)部分的位數(shù)必須小于或等于整數(shù)部分的位數(shù),小數(shù)部分可以是零。

你可以使用INT型或NUMERIC型數(shù)據(jù)來存儲錢數(shù)。但是,專門有另外兩種數(shù)據(jù)類型用于此目的。如果你希望你的網(wǎng)點能掙很多錢,你可以使用MONEY型數(shù)據(jù)。如果你的野心不大,你可以使用SMALLMONEY型數(shù)據(jù)。MONEY型數(shù)據(jù)可以存儲從-922,337,203,685,477.5808到922,337,203,685,477.5807的錢數(shù)。如果你需要存儲比這還大的金額,你可以使用NUMERIC型數(shù)據(jù)。

SMALLMONEY型數(shù)據(jù)只能存儲從-214,748.3648到214,748.3647 的錢數(shù)。同樣,如果可以的話,你應該用SMALLMONEY型來代替MONEY型數(shù)據(jù),以節(jié)省空間。下面的例子顯示了如何使用這兩種表示錢的數(shù)據(jù)類型:

CREATE TABLE PRoducts (product VARCHAR(40),price MONEY,

Discount_price SMALLMONEY)

這個表可以用來存儲商品的折扣和普通售價。字段price 的數(shù)據(jù)類型是MONEY,字段discount_price的數(shù)據(jù)類型是SMALLMONEY。

存儲邏輯值

如果你使用復選框(CHECKBOX)從網(wǎng)頁中搜集信息,你可以把此信息存儲在BIT型字段中。BIT型字段只能取兩個值:0或1。這里有一個如何使用這種字段的例子:

CREATE TABLE opinion (visitor VARCHAR(40),good BIT)

這個表可以用來存放對你的網(wǎng)點進行民意調(diào)查所得的信息。訪問者可以投票表示他們是否喜歡你的網(wǎng)點。如果他們投YES,就在BIT型字段中存入1。反之,如果他們投NO,就在字段中存入0(在下一章里,你將學會如何計算投票)。

當心,在你創(chuàng)建好一個表之后,你不能向表中添加BIT型字段。如果你打算在一個表中包含BIT型字段,你必須在創(chuàng)建表時完成。

存儲日期和時間

當你建立一個網(wǎng)點時,你也許需要記錄在一段時間內(nèi)的訪問者數(shù)量。為了能夠存儲日期和時間,你需要使用DATETIME型數(shù)據(jù),如下例所示:

CREATE TABL visitorlog( visitor VARCHAR (40), arrivaltime DATETIME ,

departuretime DATETIME)

這個表可以用來記錄訪問者進入和離開你網(wǎng)點的時間和日期。一個DATETIME型的字段可以存儲的日期范圍是從1753年1月1日第一毫秒到9999年12月31日最后一毫秒。

如果你不需要覆蓋這么大范圍的日期和時間,你可以使用SMALLDATETIME型數(shù)據(jù)。它與DATETIME型數(shù)據(jù)同樣使用,只不過它能表示的日期和時間范圍比DATETIME型數(shù)據(jù)小,而且不如DATETIME型數(shù)據(jù)精確。一個SMALLDATETIME型的字段能夠存儲從1900年1月1日到2079年6月6日的日期,它只能精確到秒。

DATETIME型字段在你輸入日期和時間之前并不包含實際的數(shù)據(jù),認識這一點是重要的。在下一章,你將學習怎樣使用大量的SQL函數(shù)來讀取和操作日期和時間(參見下面的“缺省值”一節(jié))。你也可以在VBScript和JScript 中使用日期和時間函數(shù)來向一個DATETIME型字段中輸入日期和時間。

字段屬性

上一節(jié)介紹了如何建立包含不同類型字段的表。在這一節(jié)中,你將學會如何使用字段的三個屬性。這些屬性允許你控制空值,缺省值和標識值。

允許和禁止空值

大多數(shù)字段可以接受空值(NULL)。當一個字段接受了空值后,如果你不改變它,它將一直保持空值??罩担∟ULL)和零是不同的,嚴格的說,空值表示沒有任何值。

為了允許一個字段接受空值,你要在字段定義的后面使用表達式NULL。例如,下面的表中兩個字段都允許接受空值:

CREATE TABLE empty (empty1 CHAR (40) NULL,empty2 INT NULL(

注意:

BIT型數(shù)據(jù)不能是空值。一個這種類型的字段必須取0或者1。

有時你需要禁止一個字段使用空值。例如,假設有一個表存儲著信用卡號碼和信用卡有效日期,你不會希望有人輸入一個信用卡號碼但不輸入有效日期。為了強制兩個字段都輸入數(shù)據(jù),你可以用下面的方法建立這個表:

CREATE TABLE creditcards (creditcard_number CHAR(20) NOT NULL,

Creditcard_expire DATETIME NOT NULL)

注意字段定義的后面跟有表達式NOT NULL。通過包含表達式NOT NULL,你可以禁止任何人只在一個字段中插入數(shù)據(jù),而不輸入另一個字段的數(shù)據(jù)。

你將會發(fā)現(xiàn),在你建設自己的網(wǎng)點過程中,這種禁止空值的能力是非常有用的。如果你指定一個字段不能接受空值,那么當你試圖輸入一個空值時,會有錯誤警告。這些錯誤警告可以為程序調(diào)試提供有價值的線索。

缺省值

假設有一個存儲地址信息的表,這個表的字段包括街道、城市、州、郵政編碼和國家。如果你預計地址的大部分是在美國,你可以把這個值作為country字段的缺省值。

為了在創(chuàng)建一個表時指定缺省值,你可以使用表達式DEFAULT。請看下面這個在創(chuàng)建表時使用缺省值的例子:

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的缺省值被指定為美國。注意單引號的使用,引號指明這是字符型數(shù)據(jù)。為了給非字符型的字段指定缺省值,不要把該值擴在引號中:

CREATE TABLE orders(price MONEY DEFAULT $38.00,

quantity INT DEFAULT 50,

entrydate DATETIME DEFAULT GETDATE())

在這個CREATE TABLE語句中,每個字段都指定了一個缺省值。注意DATETIME型字段entrydate所指定的缺省值,該缺省值是函數(shù)Getdate()的返回值,該函數(shù)返回當前的日期和時間。

標識字段

每個表可以有一個也只能有一個標識字段。一個標識字段是唯一標識表中每條記錄的特殊字段。例如,數(shù)據(jù)庫pubs中的表jobs包含了一個唯一標識每個工作標識字段:

job_id job_desc

…………………………………………………………….

New Hire Job not specified
Chief Executive officer
Bushness Operations Manager
Chief Financial Officier
Publisher
字段job_id為每個工作提供了唯一的一個數(shù)字。如果你決定增加一個新工作,新增記錄的job_id字段會被自動賦給一個新的唯一值。

為了建立一個標識字段,你只需在字段定義后面加上表達式IDENTITY即可。你只能把NUMERIC型或INT型字段設為標識字段,這里有一個例子:

CREATE TABLE visitorID (theID NUBERIC(18) IDENTITY,name VARCHAR(40))

這個語句所創(chuàng)建的表包含一個名為theid的標識字段。每當一個新的訪問者名字添加到這個表中時,這個字段就被自動賦給一個新值。你可以用這個表為你的站點的每一個用戶提供唯一標識。

技巧:

建立一個標示字段時,注意使用足夠大的數(shù)據(jù)類型。例如你使用TINYINT型數(shù)據(jù),那么你只能向表中添加255個記錄。如果你預計一個表可能會變得很大,你應該使用NUMERIC型數(shù)據(jù)。

標識字段的存在會使你想嘗試許多不可能的事情。例如,你也許想利用標識字段來對記錄進行基于它們在表中位置的運算。你應該拋棄這種意圖。每個記錄的標識字段的值是互不相同的,但是,這并不禁止一個標識字段的標識數(shù)字之間存在間隔。例如,你永遠不要試圖利用一個表的標識字段來取出表中的前十個記錄。這種操作會導致失敗,比如說6號記錄和7號記錄根本不存在。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 彩票| 白朗县| 拉萨市| 美姑县| 东乡县| 陈巴尔虎旗| 定远县| 淮北市| 密云县| 伽师县| 纳雍县| 香港 | 且末县| 息烽县| 德令哈市| 岳阳县| 锦屏县| 青海省| 都江堰市| 雷山县| 五大连池市| 石渠县| 台北县| 苍溪县| 林州市| 北京市| 连城县| 那曲县| 长阳| 鄂尔多斯市| 景泰县| 利辛县| 武城县| 丽江市| 当雄县| 富裕县| 台中市| 美姑县| 乌苏市| 五大连池市| 和政县|