久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

輕松學(xué)SQL(1)

 夜貓速讀 2022-05-05 發(fā)布于湖北

1,、數(shù)據(jù)庫的結(jié)構(gòu)學(xué)習(xí)重點

● RDBMS通常使用客戶端/服務(wù)器這樣的系統(tǒng)結(jié)構(gòu)。


● 通過從客戶端向服務(wù)器端發(fā)送SQL語句來實現(xiàn)數(shù)據(jù)庫的讀寫操作,。


● 關(guān)系數(shù)據(jù)庫采用被稱為數(shù)據(jù)庫表的二維表來管理數(shù)據(jù)。


● 數(shù)據(jù)庫表由表示數(shù)據(jù)項目的列(字段)和表示一條數(shù)據(jù)的行(記錄)所組成,,以記錄為單位進(jìn)行數(shù)據(jù)讀寫,。


● 本書將行和列交匯的方格稱為單元格,每個單元格只能輸入一個數(shù)據(jù),。RDBMS的常見系統(tǒng)結(jié)構(gòu)使用RDBMS時,,最常見的系統(tǒng)結(jié)構(gòu)就是客戶端/服務(wù)器類型(C/S類型)這種結(jié)構(gòu)

                           圖1-3 使用RDBMS時的系統(tǒng)結(jié)構(gòu)

服務(wù)器指的是用來接收其他程序發(fā)出的請求,并對該請求進(jìn)行相應(yīng)處理的程序(軟件),,或者是安裝了此類程序的設(shè)備(計算機(jī)),。在計算機(jī)上持續(xù)執(zhí)行處理,并等待接收下一條請求,。RDBMS也是一種服務(wù)器,,它能夠從保存在硬盤上的數(shù)據(jù)庫中讀取數(shù)據(jù)并返回,還可以把數(shù)據(jù)變更為指定內(nèi)容,。與之相對,,向服務(wù)器發(fā)出請求的程序(軟件),或者是安裝了該程序的設(shè)備(計算機(jī))稱為客戶端,。訪問由RDBMS管理的數(shù)據(jù)庫,,進(jìn)行數(shù)據(jù)讀寫的程序稱為RDBMS客戶端。RDBMS客戶端將想要獲取什么樣的數(shù)據(jù),,或者想對哪些數(shù)據(jù)進(jìn)行何種變更等信息通過SQL語句發(fā)送給RDBMS服務(wù)器,。RDBMS根據(jù)該語句的內(nèi)容返回所請求的數(shù)據(jù),或者對存儲在數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行更新,??蛻舳司腿缤蟹剑?wù)器就像是受托方,。由于兩者關(guān)系類似受托方執(zhí)行委托方發(fā)出的指令,,故而得名。這樣就可以使用SQL語句來實現(xiàn)關(guān)系數(shù)據(jù)庫的讀寫操作了,。本書為了給大家講解SQL,,使用了可以顯示如何將SQL語句發(fā)送到RDBMS,以及接收返回信息(數(shù)據(jù))的客戶端,。具體內(nèi)容請參考第0章,。另外,RDBMS既可以和其客戶端安裝在同一臺計算機(jī)上,也可以分別安裝在不同的計算機(jī)上,。這樣一來,,不僅可以通過網(wǎng)絡(luò)使二者相互關(guān)聯(lián),還可以實現(xiàn)多個客戶端訪問同一個RDBMS,。

              圖1-4 通過網(wǎng)絡(luò)可以實現(xiàn)多個客戶端訪問同一個數(shù)據(jù)庫

客戶端沒有必要使用同樣的程序,,只要能將SQL發(fā)送給RDBMS,就可以操作數(shù)據(jù)庫了,。并且,,多個客戶端還可以同時對同一個數(shù)據(jù)庫進(jìn)行讀寫操作。另外,,RDBMS除了需要同時接收多個客戶端的請求之外,,還需要操作存有大量數(shù)據(jù)的數(shù)據(jù)庫,因此通常都會安裝在比客戶端性能更優(yōu)越的計算機(jī)上,。操作數(shù)據(jù)量特別巨大的數(shù)據(jù)庫時,,還可以將多臺計算機(jī)組合使用。雖然RDBMS的系統(tǒng)結(jié)構(gòu)多種多樣,,但是從客戶端發(fā)來的SQL語句基本上都是一樣的,。表的結(jié)構(gòu)讓我們再具體了解一下RDBMS的結(jié)構(gòu)。上一節(jié)我們講到了關(guān)系數(shù)據(jù)庫通過類似Excel工作表那樣的,、由行和列組成的二維表來管理數(shù)據(jù),。用來管理數(shù)據(jù)的二維表在關(guān)系數(shù)據(jù)庫中簡稱為表。表存儲在由RDBMS管理的數(shù)據(jù)庫中,,如圖1-5所示,。一個數(shù)據(jù)庫中可以存儲多個表。


圖1-5 數(shù)據(jù)庫和表的關(guān)系

根據(jù)SQL語句的內(nèi)容返回的數(shù)據(jù)同樣必須是二維表的形式,,這也是關(guān)系數(shù)據(jù)庫的特征之一,。返回結(jié)果如果不是二維表的SQL語句則無法執(zhí)行。另外,,圖1-5中只有一個數(shù)據(jù)庫,,我們還可以創(chuàng)建多個數(shù)據(jù)庫分別用于不同用途。圖1-6所示為1-3節(jié)之后的學(xué)習(xí)中實際用到的商品表的內(nèi)容,。

圖1-6 表的示例(商品表)

表的列(垂直方向)稱為字段,,它代表了保存在表中的數(shù)據(jù)項目。在表1-2的商品表中,,從商品編號到登記日期一共有6列,。對于列的約束比Excel更加嚴(yán)格,定義為數(shù)字的列只能輸入數(shù)字,,定義為日期的列只能輸入日期(將在1-4節(jié)詳細(xì)介紹),。

                                            表1-2 商品表

與之相對,表的行(水平方向)稱為記錄,它相當(dāng)于一條數(shù)據(jù),。商品表中總共有8行數(shù)據(jù),。關(guān)系數(shù)據(jù)庫必須以行為單位進(jìn)行數(shù)據(jù)讀寫,請大家牢記,。


法則1-1

關(guān)系數(shù)據(jù)庫以行為單位讀寫數(shù)據(jù),。


一個單元格中只能輸入一個數(shù)據(jù)。像圖1-7那樣,,在一個單元格中輸入2個或2個以上的數(shù)據(jù)是不允許的,,請大家牢記。

                          圖1-7 一個單元格中只能輸入一個數(shù)據(jù)

單元格是本書特有的表述方式,。實際上關(guān)系數(shù)據(jù)庫對于行和列交匯的方格并沒有專門的稱謂,。但就像圖1-6那樣,,這個方格通過類似Excel單元格的方式管理數(shù)據(jù),,因此把它稱為單元格似乎也很恰當(dāng)。


法則1-2

一個單元格中只能輸入一個數(shù)據(jù),。

                                                專欄

RDBMS的用戶管理為了防止重要數(shù)據(jù)被竊讀或篡改,,RDBMS只允許注冊用戶接觸數(shù)據(jù)庫。這里的用戶并不是指Windows等操作系統(tǒng)的注冊用戶,,而是只能用于RDBMS的用戶,。RDBMS允許注冊多個用戶。

注冊用戶的時候除了設(shè)定用戶名(賬號),,還需要設(shè)定密碼,。雖然密碼并不是必需的,但為了防止重要信息的泄露,,還是希望大家能夠設(shè)定密碼,。

學(xué)習(xí)要點

● SQL是為操作數(shù)據(jù)庫而開發(fā)的語言。

● 雖然SQL也有標(biāo)準(zhǔn),,但實際上根據(jù)RDBMS的不同SQL也不盡相同,。

● SQL通過一條語句來描述想要進(jìn)行的操作,發(fā)送給RDBMS,。

● 原則上SQL語句都會使用分號結(jié)尾,。

● SQL根據(jù)操作目的可以分為DDL、DML和DCL,。

標(biāo)準(zhǔn)SQL如前所述,,所要學(xué)習(xí)的SQL是用來操作關(guān)系數(shù)據(jù)庫的語言。它原本是為了提高數(shù)據(jù)庫查詢效率而開發(fā)的語言,,但是現(xiàn)在不僅可以進(jìn)行數(shù)據(jù)查詢,,就連數(shù)據(jù)的插入和刪除等操作也基本上都可以通過SQL來完成了。

國際標(biāo)準(zhǔn)化組織(ISO)為SQL制定了相應(yīng)的標(biāo)準(zhǔn),以此為基準(zhǔn)的SQL稱為標(biāo)準(zhǔn)SQL(相關(guān)信息請參考專欄——標(biāo)準(zhǔn)SQL和特定的SQL),。以前,,完全基于標(biāo)準(zhǔn)SQL的RDBMS很少,通常需要根據(jù)不同的RDBMS來編寫特定的SQL語句,。這樣一來,,就會造成能夠在Oracle中使用的SQL語句卻無法在SQL Server中使用,反之亦然,。近來,,對標(biāo)準(zhǔn)SQL的支持取得了一些進(jìn)展,因此希望準(zhǔn)備學(xué)習(xí)SQL的讀者們能夠從現(xiàn)在開始就牢記標(biāo)準(zhǔn)SQL的書寫方式,。

原則上,,介紹的都是標(biāo)準(zhǔn)SQL[插圖]的書寫方式,但是根據(jù)RDBMS的不同也會存在一些特殊的SQL語句,。如果遇到這種情況,,將會通過其他途徑對其進(jìn)行說明。

法則1-3

學(xué)會標(biāo)準(zhǔn)SQL就可以在各種RDBMS中寫SQL語句了,。

SQL語句及其種類SQL用關(guān)鍵字,、表名、列名等組合而成的一條語句(SQL語句)來描述操作的內(nèi)容,。關(guān)鍵字是指那些含義或使用方法已事先定義好的英語單詞,,存在包含“對表進(jìn)行查詢”或者“參考這個表”等各種意義的關(guān)鍵字。

根據(jù)對RDBMS賦予的指令種類的不同,,SQL語句可以分為以下三類,。

● DDL

DDL(Data Definition Language,數(shù)據(jù)定義語言)用來創(chuàng)建或者刪除存儲數(shù)據(jù)用的數(shù)據(jù)庫以及數(shù)據(jù)庫中的表等對象,。DDL包含以下幾種指令,。

CREATE:創(chuàng)建數(shù)據(jù)庫和表等對象

DROP:刪除數(shù)據(jù)庫和表等對象

ALTER:修改數(shù)據(jù)庫和表等對象的結(jié)構(gòu)

● DML

DML(Data Manipulation Language,數(shù)據(jù)操縱語言)用來查詢或者變更表中的記錄,。DML包含以下幾種指令,。

SELECT:查詢表中的數(shù)據(jù)

INSERT:向表中插入新數(shù)據(jù)

UPDATE:更新表中的數(shù)據(jù)

DELETE:刪除表中的數(shù)據(jù)

● DCLDCL(Data Control Language,數(shù)據(jù)控制語言)用來確認(rèn)或者取消對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行的變更,。除此之外,,還可以對RDBMS的用戶是否有權(quán)限操作數(shù)據(jù)庫中的對象(數(shù)據(jù)庫表等)進(jìn)行設(shè)定。DCL包含以下幾種指令,。

COMMIT:確認(rèn)對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行的變更

ROLLBACK:取消對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行的變更

GRANT:賦予用戶操作權(quán)限

REVOKE:取消用戶的操作權(quán)限

實際使用的SQL語句當(dāng)中有90%屬于DML,,同樣會以DML為中心進(jìn)行講解。

法則1-4

SQL根據(jù)功能不同可以分為三類,,其中使用最多的是DML,。

SQL的基本書寫規(guī)則書寫SQL語句時必須要遵守一些規(guī)則,。

這些規(guī)則都非常簡單,接下來就讓我們逐一認(rèn)識一下吧,。

■ SQL語句要以分號(;)

結(jié)尾一條SQL語句可以描述一個數(shù)據(jù)庫操作,。在RDBMS當(dāng)中,SQL語句也是逐條執(zhí)行的,。

眾所周知,,我們在句子的句尾加注標(biāo)點表示結(jié)束,中文句子以句號(,。)結(jié)尾,,英文以點號(.)結(jié)尾,而SQL語句則使用分號(;)結(jié)尾,。

法則1-5

SQL語句以分號(;)結(jié)尾,。

■ SQL語句不區(qū)分大小寫

SQL 不區(qū)分關(guān)鍵字的大小寫。例如,,不管寫成SELECT還是select,,解釋都是一樣的。表名和列名也是如此,。

雖然可以根據(jù)個人喜好選擇大寫還是小寫(或大小寫混雜),,但為了理解起來更加容易,,本書使用以下規(guī)則來書寫SQL語句,。

● 關(guān)鍵字大寫

● 表名的首字母大寫

● 其余(列名等)小寫

法則1-6

關(guān)鍵字不區(qū)分大小寫。

但是插入到表中的數(shù)據(jù)是區(qū)分大小寫的,。例如,,在操作過程中,數(shù)據(jù)Computer,、COMPUTER或computer,,三者是不一樣的。

■ 常數(shù)的書寫方式是固定的SQL語句常常需要直接書寫字符串,、日期或者數(shù)字,。例如,書寫向表中插入字符串,、日期或者數(shù)字等數(shù)據(jù)的SQL語句,。

在SQL語句中直接書寫的字符串、日期或者數(shù)字等稱為常數(shù),。常數(shù)的書寫方式如下所示,。

SQL語句中含有字符串的時候,需要像’abc’這樣,,使用單引號(')將字符串括起來,,用來標(biāo)識這是一個字符串,。

SQL語句中含有日期的時候,同樣需要使用單引號將其括起來,。日期的格式有很多種('26 Jan 2010’或者’10/01/26’等),,我們統(tǒng)一使用’2010-01-26’這種’年-月-日’的格式。

在SQL語句中書寫數(shù)字的時候,,不需要使用任何符號標(biāo)識,,直接寫成1000這樣的數(shù)字即可。

法則1-7

字符串和日期常數(shù)需要使用單引號(')括起來,。

數(shù)字常數(shù)無需加注單引號(直接書寫數(shù)字即可),。

單詞需要用半角空格或者換行來分隔

SQL語句的單詞之間需使用半角空格或換行符來進(jìn)行分隔。如下這種未加分隔的語句會發(fā)生錯誤,,無法正常執(zhí)行,。

由程序不匹配、故障,、輸入錯誤等多種原因造成的系統(tǒng)或者程序未按照預(yù)定處理執(zhí)行或者無法執(zhí)行的狀況,。通常出錯時,處理會被強(qiáng)制終止,,并顯示錯誤信息,。

○ CREATE TABLE Product

× CREATETABLE Product

× CREATE TABLEProduct

但是不能使用全角空格作為單詞的分隔符,否則會發(fā)生錯誤,,出現(xiàn)無法預(yù)期的結(jié)果,。

法則1-8

單詞之間需要使用半角空格或者換行符進(jìn)行分隔。

                                                 專欄

標(biāo)準(zhǔn)SQL和特定的SQL

每隔幾年,,ANSI(美國國家標(biāo)準(zhǔn)協(xié)會)或ISO(國際標(biāo)準(zhǔn)化組織)等便會修訂SQL的標(biāo)準(zhǔn),,進(jìn)行語法的修訂并追加新功能。

1986年,,ANSI首次制定了SQL的標(biāo)準(zhǔn),,之后又進(jìn)行了數(shù)次修訂。

但是,,SQL的標(biāo)準(zhǔn)并不強(qiáng)制“每種RDBMS都必須使用”,。雖然支持標(biāo)準(zhǔn)SQL的RDBMS越來越多,但還是存在標(biāo)準(zhǔn)SQL無法執(zhí)行的情況,。這時就需要使用只能在特定RDBMS中使用的特殊SQL語句,。


其實,這也是沒有辦法的事情,,起初(大約在20世紀(jì)80年代到90年代),,標(biāo)準(zhǔn)SQL能夠?qū)崿F(xiàn)的功能非常有限,無法完全滿足實際需要,。RDBMS的供應(yīng)商為了彌補(bǔ)這些不足,,不得不再單獨追加所需要的功能,。

盡管如此,這些特定的SQL所帶來的并不都是負(fù)面的影響,。標(biāo)準(zhǔn)SQL將一些獨特的功能收錄其中,,對其自身的發(fā)展起到了積極的推進(jìn)作用。過去,,各個供應(yīng)商為了展現(xiàn)本公司的優(yōu)勢和獨特性,,也曾不遺余力地開發(fā)各自特定的SQL。

2,、表的創(chuàng)建

 學(xué)習(xí)要點

● 表通過CREATE TABLE語句創(chuàng)建而成,。

● 表和列的命名要使用有意義的文字。

● 指定列的數(shù)據(jù)類型(整數(shù)型,、字符型和日期型等),。


● 可以在表中設(shè)置約束(主鍵約束和NOT NULL約束等)。

表的內(nèi)容的創(chuàng)建

表1-2是1-2節(jié)舉例時使用的商品表,。


該表是某家小商店銷售商品的一覽表,。商品的數(shù)量不多,不過我們可以把它想象成大量數(shù)據(jù)中的一部分(畢竟這只是為了學(xué)習(xí)SQL而創(chuàng)建的表),。像0003號商品的登記日期以及0006號商品的進(jìn)貨單價這樣的空白內(nèi)容,,我們可以認(rèn)為是由于店主疏忽而忘記輸入了。

大家可以看到表1-2由6列8行所組成,。最上面一行是數(shù)據(jù)的項目名,,真正的數(shù)據(jù)是從第2行開始的。


數(shù)據(jù)庫的創(chuàng)建(CREATE DATABASE語句)

前面提到,,在創(chuàng)建表之前,,一定要先創(chuàng)建用來存儲表的數(shù)據(jù)庫,。運(yùn)行CREATE DATABASE語句就可以在RDBMS上創(chuàng)建數(shù)據(jù)庫了,。CREATE DATABASE語句的語法如下所示。

創(chuàng)建數(shù)據(jù)庫的CREATE DATABASE語句

create database 數(shù)據(jù)庫名稱;

創(chuàng)建數(shù)據(jù)庫shop的CREATE DATABASE語句

create database shop;

此外,,數(shù)據(jù)庫名稱,、表名以及列名都要使用半角字符(英文字母、數(shù)字,、符號),,具體內(nèi)容隨后會進(jìn)行介紹。

表的創(chuàng)建(CREATE TABLE語句)

創(chuàng)建好數(shù)據(jù)庫之后,,接下來我們使用CREATE TABLE語句在其中創(chuàng)建表,。CREATE TABLE語句的語法如下所示。

創(chuàng)建表的CREATE TABLE語句

create table 表名(列名1 數(shù)據(jù)類型 該列所需約束,,列名2 數(shù)據(jù)類型  該列所需的約束列名3 數(shù)據(jù)類型  該列所需的約束列名4 數(shù)據(jù)類型  該列所需的約束.......該表的約束1,,該表的約束2,,....);

該語法清楚地描述了我們要創(chuàng)建一個包含<列名1>、<列名2>,、……的名稱為<表名>的表,,非常容易理解。每一列的數(shù)據(jù)類型(后述)是必須要指定的,,還要為需要的列設(shè)置約束(后述),。約束可以在定義列的時候進(jìn)行設(shè)置,也可以在語句的末尾進(jìn)行設(shè)置,。

在數(shù)據(jù)庫中創(chuàng)建表1-2中的商品表(Product表)的CREATETABLE語句,,如代碼清單1-2所示。

代碼清單1-2 創(chuàng)建Product表的CREATE TABLE語句

create table student(id char(4) not null,name varchar(100) not null,type varchar(32) not null,sale_price integer,purchase_price integer, regist_date date,primary key(product_id));

備忘

創(chuàng)建出Product表等學(xué)習(xí)中用到的一些示例表,。創(chuàng)建這些表的SQL語句保存在本書示例程序\Sample\CreateTable\<RDBMS名>文件夾下的CreateTable<表名>.sql文件中,。

命名規(guī)則

我們只能使用半角英文字母、數(shù)字,、下劃線(_)作為數(shù)據(jù)庫,、表和列的名稱。例如,,不能將product_id寫成product-id,,因為標(biāo)準(zhǔn)SQL并不允許使用連字符作為列名等名稱。$,、#,、?這樣的符號同樣不能作為名稱使用,。


盡管有些RDBMS允許使用上述符號作為列的名稱,,但這也僅限于在該RDBMS中使用,并不能保證在其他RDBMS中也能使用,。雖然大家可能會覺得限制有點太多了,,但還是請遵守規(guī)則使用半角英文字母、數(shù)字和下劃線(_)吧,。

法則1-9

數(shù)據(jù)庫名稱,、表名和列名等可以使用以下三種字符。

● 半角英文字母 ● 半角數(shù)字 ● 下劃線(_)

此外,,名稱必須以半角英文字母開頭,。以符號開頭的名稱并不多見,但有時會碰到類似1product或者2009_sales這樣以數(shù)字開頭的名稱,。雖然可以理解,,但這在標(biāo)準(zhǔn)SQL中是被禁止的。請大家使用product1或者sales_2009這樣符合規(guī)則的名稱,。

法則1-10

名稱必須以半角英文字母作為開頭,。

最后還有一點,,在同一個數(shù)據(jù)庫中不能創(chuàng)建兩個相同名稱的表,在同一個表中也不能創(chuàng)建兩個名稱相同的列,。如果出現(xiàn)這樣的情況,,RDBMS會返回錯誤信息。

法則1-11

名稱不能重復(fù),。

接下來我們根據(jù)上述規(guī)則,,使用代碼清單1-2中的CREATETABLE語句來創(chuàng)建表1-2中的商品表。表名為Product,,表中的列名如表1-3所示,。

                     表1-3 商品表和Product表列名的對應(yīng)關(guān)系

數(shù)據(jù)類型的指定

Product表所包含的列,定義在CREATE TABLE Product( )的括號中,。列名右邊的INTEGER或者CHAR等關(guān)鍵字,,是用來聲明該列的數(shù)據(jù)類型的,所有的列都必須指定數(shù)據(jù)類型,。

數(shù)據(jù)類型表示數(shù)據(jù)的種類,,包括數(shù)字型、字符型和日期型等,。每一列都不能存儲與該列數(shù)據(jù)類型不符的數(shù)據(jù),。聲明為整數(shù)型的列中不能存儲’abc’這樣的字符串,聲明為字符型的列中也不能存儲1234這樣的數(shù)字,。


數(shù)據(jù)類型的種類很多,,各個RDBMS之間也存在很大差異。根據(jù)業(yè)務(wù)需要實際創(chuàng)建數(shù)據(jù)庫時,,一定要根據(jù)不同的RDBMS選用最恰當(dāng)?shù)臄?shù)據(jù)類型,。在學(xué)習(xí)SQL的時候,使用最基本的數(shù)據(jù)類型就足夠了,。下面我們就來介紹四種基本的數(shù)據(jù)類型,。

● INTEGER型

用來指定存儲整數(shù)的列的數(shù)據(jù)類型(數(shù)字型),不能存儲小數(shù),。

● CHAR型

CHAR是CHARACTER(字符)的縮寫,,是用來指定存儲字符串的列的數(shù)據(jù)類型(字符型)??梢韵馛HAR(10)或者CHAR(200)這樣,在括號中指定該列可以存儲的字符串的長度(最大長度),。字符串超出最大長度的部分是無法輸入到該列中的,。RDBMS不同,長度單位也不一樣,,既存在使用字符個數(shù)的情況,,也存在使用字節(jié)長度的情況,。

字符串以定長字符串的形式存儲在被指定為CHAR型的列中。所謂定長字符串,,就是當(dāng)列中存儲的字符串長度達(dá)不到最大長度的時候,,使用半角空格進(jìn)行補(bǔ)足。例如,,我們向CHAR(8)類型的列中輸入’abc’的時候,,會以’abc(abc后面有5個半角空格)的形式保存起來。

另外,,雖然之前我們說過SQL不區(qū)分英文字母的大小寫,,但是表中存儲的字符串卻是區(qū)分大小寫的。也就是說,,'ABC’和’abc’代表了兩個不同意義的字符串,。

● VARCHAR型

同CHAR類型一樣,VARCHAR型也是用來指定存儲字符串的列的數(shù)據(jù)類型(字符串類型),,也可以通過括號內(nèi)的數(shù)字來指定字符串的長度(最大長度),。但該類型的列是以可變長字符串的形式來保存字符串的[插圖]。定長字符串在字符數(shù)未達(dá)到最大長度時會用半角空格補(bǔ)足,,但可變長字符串不同,,即使字符數(shù)未達(dá)到最大長度,也不會用半角空格補(bǔ)足,。例如,,我們向VARCHAR(8)類型的列中輸入字符串’abc’的時候,保存的就是字符串’abc',。

該類型的列中存儲的字符串也和CHAR類型一樣,,是區(qū)分大小寫的。

特定的SQL

OracIe中使用VARCHAR2型(OracIe中也有VARCHAR這種數(shù)據(jù)類型,,但并不推薦使用),。

● DATE型

用來指定存儲日期(年月日)的列的數(shù)據(jù)類型(日期型)。

特定的SQL

除了年月日之外,,OracIe中使用的DATE型還包含時分秒,,但在本書中我們只學(xué)習(xí)日期部分。

約束的設(shè)置

約束是除了數(shù)據(jù)類型之外,,對列中存儲的數(shù)據(jù)進(jìn)行限制或者追加條件的功能,。Product表中設(shè)置了兩種約束。

Product表的product_id列,、product_name列和product_type列的定義如下所示,。

product_id char(4) not null,product_name  varchar(100) not null,product_varchar(32) not null.

數(shù)據(jù)類型的右側(cè)設(shè)置了NOT NULL約束。NULL是代表空白(無記錄)的關(guān)鍵字[插圖]。在NULL之前加上了表示否定的NOT,,就是給該列設(shè)置了不能輸入空白,,也就是必須輸入數(shù)據(jù)的約束(如果什么都不輸入就會出錯)。這樣一來,,Product表的product_id(商品編號)列,、product_name(商品名稱)列和product_type(商品種類)列就都成了必須輸入的項目。

另外,,在創(chuàng)建Product表的CREATE TABLE語句的后面,,還有下面這樣的記述。

primary key(product_id)

這是用來給product_id列設(shè)置主鍵約束的,。所謂鍵,,就是在指定特定數(shù)據(jù)時使用的列的組合。鍵種類多樣,,主鍵(primarykey)就是可以特定一行數(shù)據(jù)的列,。也就是說,如果把product_id列指定為主鍵,,就可以通過該列取出特定的商品數(shù)據(jù)了,。

反之,如果向product_id列中輸入了重復(fù)數(shù)據(jù),,就無法取出唯一的特定數(shù)據(jù)了(因為無法確定唯一的一行數(shù)據(jù)),。這樣就可以為某一列設(shè)置主鍵約束了。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多