MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)囱淋,由瑞典MySQL AB 公司開發(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ǔ)言是用于訪問數(shù)據(jù)庫(kù)的最常用標(biāo)準(zhǔn)化語(yǔ)言较解。MySQL 軟件采用了雙授權(quán)政策畜疾,它分為社區(qū)版和商業(yè)版,由于其體積小印衔、速度快啡捶、總體擁有成本低,尤其是開放源碼這一特點(diǎn)当编,一般中小型網(wǎng)站的開發(fā)都選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫(kù)届慈。由于其社區(qū)版的性能卓越,搭配 PHP 和 Apache 可組成良好的開發(fā)環(huán)境忿偷。
創(chuàng)建表
MySQL不僅用于表數(shù)據(jù)操縱金顿,而且還可以用來執(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)隔開猪狈。
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值就是沒有值或缺值。允許NULL值的列也允許在插入行時(shí)不給出該列的值灶伊。不允許NULL值的列不接受該列沒有值的行疆前,換句話說,在插入或更新行時(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列砸泛,而且它必須被索引(如十籍,通過使它成為主鍵)蛆封。
五、指定默認(rèn)值
如果在插入行時(shí)沒有給出值勾栗,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楷拳。
六绣夺、引擎類型
與其他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ā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)存(不是磁盤)中,速度很快(特別適合于臨時(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ù)類型。刪除剛添加的列:
ALTER TABLE vendors DROP COLUMN vend_phone;
二答憔、刪除表
刪除表(刪除整個(gè)表而不是其內(nèi)容)味赃,使用DROP TABLE語(yǔ)句即可:
DROP TABLE customers2;
這條語(yǔ)句刪除customers2(假設(shè)它存在)。刪除表沒有確認(rèn)虐拓,也不能撤銷心俗,執(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;