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

首頁 > 開發(fā) > 綜合 > 正文

跟我學SQL:(五)創(chuàng)建和修改表格

2024-07-21 02:31:04
字體:
供稿:網(wǎng)友
再次歡迎您來到SQL(結(jié)構(gòu)化查詢語言)基礎(chǔ)系列教程。本文將介紹數(shù)據(jù)庫定義語言(DDL)用于創(chuàng)建數(shù)據(jù)庫和表格以及修改表格結(jié)果的指令。 

  
當你使用這些指令時一定要小心——它很容易刪去你的數(shù)據(jù)庫中的主要結(jié)構(gòu)令您丟失數(shù)據(jù)。所以,在您開始修改數(shù)據(jù)庫之前,您需要知道數(shù)據(jù)庫是什么。


--------------------------------------------------------------------------------

數(shù)據(jù)庫之間的差異 
本文中的樣品查詢系統(tǒng)遵循SQL92 ISO標準。并不是所有的數(shù)據(jù)庫都遵循該標準,有些數(shù)據(jù)庫做了改進,這會產(chǎn)生不可預料的結(jié)果。如果你不能確定你的數(shù)據(jù)庫是否支持該標準,請參考相應(yīng)的文檔。


--------------------------------------------------------------------------------

創(chuàng)建數(shù)據(jù)庫
為了創(chuàng)建表格,你首先需要需要創(chuàng)建一個可以容納表格的數(shù)據(jù)庫。SQL用于創(chuàng)建數(shù)據(jù)庫的基本語句是:
CREATE DATABASE dbname;

你的數(shù)據(jù)庫用戶必須有建立數(shù)據(jù)庫的適當權(quán)限。如果與你有關(guān)的用戶不能發(fā)出用于創(chuàng)建新數(shù)據(jù)庫的命令,要求數(shù)據(jù)庫管理員為你建立數(shù)據(jù)庫,你也作為管理員登錄然后建立數(shù)據(jù)庫并設(shè)置權(quán)限。

舉個例子,用CREATE指令為一個應(yīng)用程序建立一個數(shù)據(jù)庫用于顯示一個目錄:
CREATE DATABASE Catalog;

這給你一個用于在查詢時與其它表格區(qū)分的表格名字。下一步是創(chuàng)建用于輸入它的表格。

創(chuàng)建表格
如你所知,表格是有若干個欄目所組成。當創(chuàng)建表格時,你可以定義欄目并分配字段屬性。表格建立后,可以用ALTER表格指令來修改它,我們稍后將提到這一點。

你可以用下面這條指令來創(chuàng)建數(shù)據(jù)庫,命令行的參數(shù)為表格名字、欄目名字,還有每一欄的數(shù)據(jù)類型。
CREATE TABLE table_name
(column1 data_type, column2 data_type, column3 data_type);

不同的數(shù)據(jù)庫提供商的標準差別很大。你的幫助文檔中應(yīng)該有一段詳細說明如何使用每一種數(shù)據(jù)、接受何種參數(shù)。為了通用,我在表A中列出了一些常用的數(shù)據(jù)類型。

表A
 
數(shù)據(jù)類型
 用法
 詳細說明
 
Char
 Char(8)
 它包含了一個固定長度的字符串,其值常常是字符串長度。
 
Varchar
 Varchar(128)
 它包含了一個長度不大于指定值的長度可變的字符串。
 
Int
 Int(32)
 這是一個不大于指定值得整數(shù),也做Number或Integer。
 
Decimal
 Decimal(12,2)
 這是一個總位數(shù)和小數(shù)點后位數(shù)不大于指定值得小數(shù),也被稱為Numeric或Number。
 
Binary
 Binary
 用于存儲二進制對象,在數(shù)據(jù)庫中它一般不可分解和顯示,也稱為Raw或Blob。
 
Boolean
 Boolean
 用來只是真或假,也成為Bit或Byte。
 

通用數(shù)據(jù)類型


在本例中,我們建立了一個存放庫存商品信息的表格。所用到的欄目和數(shù)據(jù)類型如表B所示:

表B
 
欄目名稱:
 PRod_id
 prod_color
 prod_descr
 prod_size
 
數(shù)據(jù)類型:
 Int(16)
 Varchar(20)
 Varchar(255)
 Decimal(8,2)
 



在本例中,我使用了三種基本數(shù)據(jù)類型;然而,在實際使用時,根據(jù)數(shù)據(jù)庫支持的內(nèi)容,我可能還用用上tinyint、文本和mediumtext數(shù)據(jù)類型。

發(fā)出如下指令來建立表格:
CREATE TABLE Products
(prod_id INT(16), prod_color VARCHAR(20), prod_descr VARCHAR(255), prod_size DECIMAL(8,2));

如果這些指令順利完成,你就可以在表格中正常地插入信息。你可以參到文章SQL基礎(chǔ)一:數(shù)據(jù)查詢"得到詳細說明。


除了數(shù)據(jù)類型,你還可以在創(chuàng)建表格時定義自動增量字段(auto-incremented field)、關(guān)鍵字、索引和特殊數(shù)值限制。在表格定義時,這些參數(shù)與數(shù)據(jù)類型一同傳遞。如果在創(chuàng)建表格Product時定義具有特殊數(shù)值限制的自動增量prod_id,命令如下:
CREATE TABLE Products
(prod_id INT(16)AUTO_INCREMENT, prod_color VARCHAR(20), prod_descr VARCHAR(255), prod_size DECIMAL(8,2), UNIQUE (`prod_id`));

如果把prod_id做為索引字段定義,可以用CREATE INDEX:
CREATE INDEX ProdIndex ON Product (prod_id);

這里有必要重申:數(shù)據(jù)庫提供商在關(guān)鍵字的處理上有所不同。所以,具體情況請參考你的數(shù)據(jù)庫提供商的文檔。


--------------------------------------------------------------------------------

關(guān)于索引的更多內(nèi)容:

索引是一個比較深的課題。除了介紹有關(guān)關(guān)鍵字和索引的理論,Builder.com的供稿人Eric Roland寫了幾篇很好的文章,你可以通過它們來學到更多的相關(guān)知識。

修改表格
  
當你開始對表格進行操作時,你也許覺得有必要修改表格的結(jié)構(gòu)、字段類型等等。在前面,我強烈建議你避免在生產(chǎn)環(huán)境(production environment)這么做。因為有些操作,如添加、刪除和修改字段可能會刪除或破壞相關(guān)字段中的數(shù)據(jù)。

好,現(xiàn)在讓我們看看如何修改表格。首先,在表格Product中加入一欄。你可以指定該欄插入的相對其它欄的位置,也可以讓它插到表格末端(默認):
ALTER TABLE Product ADD prod_name VARCHAR(20) AFTER prod_id;

用類似的語句刪除一個欄目:
ALTER TABLE Product DROP prod_size;

最后,更改一個欄目的數(shù)據(jù)類型:
ALTER TABLE Product CHANGE prod_color prod_color_id INT(20);

現(xiàn)在,你的表格如表C所示:

表C
 
欄目名稱:
 prod_id
 prod_name
 prod_color_id
 prod_descr
 
數(shù)據(jù)類型:
 Int(16)
 Varchar(20)
 Int(20)
 Varchar(255))
 


注意,有些數(shù)據(jù)庫不支持關(guān)鍵字DROP。另外,如果你改變現(xiàn)有的某一欄的數(shù)據(jù)類型,大多數(shù)數(shù)據(jù)庫會試圖轉(zhuǎn)化該欄目現(xiàn)有數(shù)據(jù)的數(shù)據(jù)類型。然而,如果是轉(zhuǎn)為一個不支持的數(shù)據(jù)類型,數(shù)據(jù)就有可能丟失。舉例來說,如果把一個類型為Varchar的包含人名字的字段改為Int類型,轉(zhuǎn)換的結(jié)果可能是整型的默認值。

刪除表格和數(shù)據(jù)庫
在刪除表格和數(shù)據(jù)庫之前,你需要確保丟失這些數(shù)據(jù)不會造成惡果。如果你刪除數(shù)據(jù)庫,庫中的所有表格和內(nèi)容都會被清除。如果你刪除一個表格,表格中的所有內(nèi)容都會丟失,但是庫中的其它表格沒有影響。

在刪除表格或整個欄目之前,你必須清楚數(shù)據(jù)庫的結(jié)構(gòu)。如果你進入一個已經(jīng)存在的數(shù)據(jù)庫并錯誤刪除了某個元素,可能會影響到促發(fā)條件(?trigger)、存儲過程和視圖。有些數(shù)據(jù)庫支持用關(guān)鍵字RESTRICT和CASCADE去預防由于刪除表格帶來的損失。RESTRICT一般按默認設(shè)置,預防丟失表格,而CASCADE用于刪除與該表格有關(guān)的實體。

現(xiàn)在上面建立的表格Product是可以被刪除的,我們開始刪除它:
DROP TABLE Product;

現(xiàn)在刪除數(shù)據(jù)庫:
DROP DATABASE Catalog;


大多數(shù)數(shù)據(jù)庫軟件提供商支持DROP DATABASE命令,盡管它是在SQL99標準中被定義而不是SQL92。

部分數(shù)據(jù)庫提供了FLUSH命令,該命令可以讓你刪除表格中的內(nèi)容但又可以保持表格的結(jié)果,:
FLUSH TABLE Product;

如你所見,刪除數(shù)據(jù)庫中的主要結(jié)構(gòu)并丟失所存的所有數(shù)據(jù)的容易程度令人難以想象,所以,一定要小心使用這些命令,而當你不清楚數(shù)據(jù)庫中的內(nèi)容時,就不要使用這些命令。 
數(shù)據(jù)庫管理
在前一篇文章中,你學會了如何在一個或多個表格中查找數(shù)據(jù)。現(xiàn)在,你學會了如何把你操作數(shù)據(jù)庫結(jié)構(gòu)。你學會了創(chuàng)建、修改并銷毀表格和數(shù)據(jù)。這些都是設(shè)計數(shù)據(jù)庫驅(qū)動的應(yīng)用程序的必須用的操作。



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 班玛县| 武陟县| 泰顺县| 抚松县| 河东区| 南城县| 余干县| 寿阳县| 若尔盖县| 工布江达县| 广东省| 汉阴县| 宿迁市| 茶陵县| 武山县| 河间市| 连城县| 郧西县| 泰顺县| 昭平县| 自贡市| 辽宁省| 阿拉善左旗| 花莲县| 呼伦贝尔市| 汾阳市| 射洪县| 三河市| 安图县| 成都市| 图木舒克市| 福建省| 枝江市| 南宁市| 息烽县| 滨州市| 福海县| 漯河市| 庆元县| 高淳县| 湟中县|