MySQL——?jiǎng)?chuàng)建和操縱表(十四)

MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典MySQL AB 公司開(kāi)發(fā),目前屬于 Oracle 旗下產(chǎn)品。MySQL 最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),在 WEB 應(yīng)用方面MySQL是最好的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)) 應(yīng)用軟件之一。

MySQL是一種關(guān)聯(lián)數(shù)據(jù)庫(kù)管理系統(tǒng),關(guān)聯(lián)數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉(cāng)庫(kù)內(nèi),這樣就增加了速度并提高了靈活性。

MySQL所使用的 SQL 語(yǔ)言是用于訪問(wèn)數(shù)據(jù)庫(kù)的最常用標(biāo)準(zhǔn)化語(yǔ)言。MySQL 軟件采用了雙授權(quán)政策,它分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),一般中小型網(wǎng)站的開(kāi)發(fā)都選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫(kù)。由于其社區(qū)版的性能卓越,搭配 PHP 和 Apache 可組成良好的開(kāi)發(fā)環(huán)境。

創(chuàng)建表

MySQL不僅用于表數(shù)據(jù)操縱,而且還可以用來(lái)執(zhí)行數(shù)據(jù)庫(kù)和表的所有操作,包括表本身的創(chuàng)建和處理。一般有兩種創(chuàng)建表的方法:
(1)使用具有交互式創(chuàng)建和管理表的工具;
(2)表也可以直接用MySQL語(yǔ)句操縱。

一、表創(chuàng)建基礎(chǔ)

為利用CREATE TABLE創(chuàng)建表,必須給出下列信息:
(1)新表的名字,在關(guān)鍵字CREATE TABLE之后給出;
(2)表列的名字和定義,用逗號(hào)隔開(kāi)。
CREATE TABLE語(yǔ)句也可能會(huì)包括其他關(guān)鍵字或選項(xiàng),但至少要包括表的名字和列的細(xì)節(jié)。創(chuàng)建customers的代碼如下:

CREATE TABLE customers
(
cust_id     int     NOT NULL AUTO_INCREMENT,
cust_name  char(50)  NOT NULL,
cust_address  char(50)   NULL,
cust_city     char(50)   NULL,
cust_state    char(50)   NULL,
cust_zip      char(50)   NULL,
cust_country   char(50)   NULL,
cust_contact   char(50)   NULL,
cust_email   char(50)   NULL,
PRIMARY KEY (cust_id)
)ENGINE=InnoDB;

二、使用NULL值

NULL值就是沒(méi)有值或缺值。允許NULL值的列也允許在插入行時(shí)不給出該列的值。不允許NULL值的列不接受該列沒(méi)有值的行,換句話說(shuō),在插入或更新行時(shí),該列必須有值。

每個(gè)表列或者是NULL列,或者是NOT NULL列,這種狀態(tài)在創(chuàng)建時(shí)由表的定義規(guī)定。NULL為默認(rèn)設(shè)置,如果不指定NOT NULL,則認(rèn)為指定的是NULL。

三、主鍵介紹

主鍵值必須唯一。即,表中的每個(gè)行必須具有唯一的主鍵值。如果主鍵使用單個(gè)列,則它的值必須唯一。如果使用多個(gè)列,則這些列的組合值必須唯一。為創(chuàng)建由多個(gè)列組成的主鍵,應(yīng)該以逗號(hào)分隔的列表給出各列名,如下所示:

CREATE TABLE orderitems
(
order_num int NOT NULL,
order_item int NOT NULL,
prod_id char(10) NOT NULL,
quantity int NOT NULL,
item_price decimal(8,2) NOT NULL,
PRIMARY KEY (order_num,order_item)
)ENGINE=InnoDB;

四、使用AUTO_INCREMENT

AUTO_INCREMENT告訴MySQL,本列每當(dāng)增加一行時(shí)自動(dòng)增量。每次執(zhí)行一個(gè)INAERT操作時(shí),MySQL自動(dòng)對(duì)該列增量(從而才有了這個(gè)關(guān)鍵字AUTO_INCREMENT),給該列賦予下一個(gè)可用的值。這樣給每個(gè)行分配一個(gè)唯一的cust_id,從而可以用作主鍵值。

每個(gè)表只允許一個(gè)AUTO_INCREMENT列,而且它必須被索引(如,通過(guò)使它成為主鍵)。

五、指定默認(rèn)值

如果在插入行時(shí)沒(méi)有給出值,MySQL允許指定此時(shí)使用的默認(rèn)值。默認(rèn)值用CREATAE TABLE語(yǔ)句的列定義中的DEFAULT關(guān)鍵字指定。示例如下:

CREATAE TABLE orderitems
(
order_num int NOT NULL,
order_item int NOT NULL,
prod_id char(10) NOT NULL,
quantity int NOT NULL DEFAULT 1,
item_price decimal(8,2) NOT NULL,
PRIMARY KEY(order_num,order_item)
)ENGINE=InnoDB;

quantity列包含訂單中每項(xiàng)物品的數(shù)量。在例子中,給該列的描述添加文本DEFAULT 1指示MySQL,在未給出數(shù)量的情況下使用數(shù)量1。

六、引擎類(lèi)型

與其他DBMS一樣,MySQL有一個(gè)具體管理和處理數(shù)據(jù)的內(nèi)部引擎。在使用CREATE TABLE語(yǔ)句時(shí),該引擎具體創(chuàng)建表,而在你使用SELECT語(yǔ)句或進(jìn)行其他數(shù)據(jù)庫(kù)處理時(shí),該引擎在內(nèi)部處理你的請(qǐng)求。多數(shù)時(shí)候,此引擎都隱藏在DBMS內(nèi),不需要過(guò)多關(guān)注它。

但MySQL與其他DBMS不一樣,它具有多種引擎。它打包多個(gè)引擎,這些引擎都隱藏在MySQL服務(wù)器內(nèi),全都能執(zhí)行CREATE TABLE和SELECT等命令。每個(gè)引擎具有各自不同的功能和特性,為不同的任務(wù)選擇正確的引擎能獲得良好的功能和靈活性。如果忽略ENGINE=語(yǔ)句,則使用默認(rèn)引擎(很可能是MyISAM),多數(shù)SQL語(yǔ)句都會(huì)默認(rèn)使用它。但并不是所有的語(yǔ)句都默認(rèn)使用它,這就是為什么ENGINE=語(yǔ)句很重要的原因。以下十幾個(gè)需要知道的引擎:
(1)InnoDB是一個(gè)可靠的事務(wù)處理引擎,它不支持全文本搜索;
(2)MEMORY在功能等同于MyISAM,但由于數(shù)據(jù)存儲(chǔ)在內(nèi)存(不是磁盤(pán))中,速度很快(特別適合于臨時(shí)表);
(3)MyISAM是一個(gè)性能極高的引擎,它支持全文本搜索,但不支持事務(wù)處理。

操縱表

一、更新表

為更新表定義,可使用ALERT TABLE 語(yǔ)句。為了使用ALERT TABLE更改表結(jié)構(gòu),必須給出下邊的信息:
(1)在ALERT TABLE之后給出要改的表名(該表必須存在,否則將出錯(cuò));
(2)所做更改的列表。
給表添加一個(gè)列:

ALTER TABLE vendors ADD vend_phone CHAR(20);

這條語(yǔ)句給表vendors增加一個(gè)名為vend_phone的列,必須明確其數(shù)據(jù)類(lèi)型。刪除剛添加的列:

ALTER TABLE vendors DROP COLUMN vend_phone;

二、刪除表

刪除表(刪除整個(gè)表而不是其內(nèi)容),使用DROP TABLE語(yǔ)句即可:

DROP TABLE customers2;

這條語(yǔ)句刪除customers2(假設(shè)它存在)。刪除表沒(méi)有確認(rèn),也不能撤銷(xiāo),執(zhí)行這條語(yǔ)句將永久刪除該表。

三、重命名表

使用RENAME TABLE語(yǔ)句可以重命名一個(gè)表:

RENAME TABLE customers2 TO  customers;

RENAME TABLE語(yǔ)句所做的僅是重命名一個(gè)表。可以使用下面的語(yǔ)句對(duì)多個(gè)表重命名:

RENAME TABLE backup_customers TO customers,
             backup_vendors TO vendors,
             backup_products TO products;

學(xué)習(xí)是一個(gè)慢慢積累的過(guò)程,也是一件很快樂(lè)的事,這種快樂(lè)來(lái)自于你的思考。完成一項(xiàng)學(xué)習(xí)任務(wù)固然重要,但更重要的是在完成的過(guò)程中學(xué)到了什么,掌握了什么,遇到一些什么問(wèn)題,為什么會(huì)出現(xiàn)這種問(wèn)題,根源是什么,都有哪些解決方案,什么樣的情況適合這個(gè)方案。只有在不斷的思考,你的能力才會(huì)有所提升!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容