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)境。
插入數(shù)據(jù)
SELECT是最常用的SQL語(yǔ)句。但是,還有其他3個(gè)經(jīng)常使用的SQL語(yǔ)句需要學(xué)習(xí)。第一個(gè)就是INSERT。INSERT是用來(lái)插入或添加行到數(shù)據(jù)庫(kù)表的。插入可以用幾種方式使用:
(1)插入完整的行;
(2)插入行的一部分;
(3)插入多行;
(4)插入某些查詢(xún)的結(jié)果。
一、插入完整的行
把數(shù)據(jù)插入表中的最簡(jiǎn)單的方法就是使用基本的INSERT語(yǔ)法,它要求指定表名和被插入到新行中的值。例如:
INSERT INTO customers VALUES(NULL ,
'Pep E.LaPew',
'100 Main Street',
'Los Angeles',
'CA',
'90046',
'USA',
NULL,
NULL);
存儲(chǔ)在每個(gè)表列中的數(shù)據(jù)在VALUES子句中給出,對(duì)每個(gè)列必須提供一個(gè)值。如果一個(gè)列沒(méi)有值,應(yīng)該使用NULL值(假定表允許對(duì)該列指定空值)。各個(gè)列必須以它們?cè)诒矶x中出現(xiàn)次序填充。
雖然這種語(yǔ)法簡(jiǎn)單但是不安全。上面的SQL語(yǔ)句高度依賴(lài)于表中列的定義次序,并且還依賴(lài)于其次序容易獲得的信息。即使可得到這種次序信息,也不能保證下次表結(jié)構(gòu)變動(dòng)后各個(gè)列保持完全相同的次序。因此,編寫(xiě)依賴(lài)于特定列次序的SQL語(yǔ)句是很不安全的。
編寫(xiě)INSERT語(yǔ)句的更安全(不過(guò)更繁瑣)的方法如下:
INSERT INTO customers(cust_name,
cust_contact,
cust_email,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
VALUES(
'Pep E.LaPew',
NULL,
NULL,
'100 Main Street',
'Los Angeles',
'CA',
'90046',
'USA');
不管使用哪種INSERT語(yǔ)法,都必須給出VALUES的正確數(shù)目。如果不提供列名,則必須給每個(gè)表列提供一個(gè)值。如果提供列名,則必須對(duì)每個(gè)列出的列給出一個(gè)值。如果不這樣,將產(chǎn)生一條錯(cuò)誤消息,相應(yīng)的行插入不成功。
二、插入多個(gè)行
INSERT可以插入一行到一個(gè)表中,但如果插入多行,可以使用多條INSERT語(yǔ)句,甚至一次提交它們,每條語(yǔ)句用一個(gè)分號(hào)結(jié)束,如下所示:
INSERT INTO customers(cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
VALUES(
'Pep E.LaPew',
'100 Main Street',
'Los Angeles',
'CA',
'90046',
'USA');
INSERT INTO customers(cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
VALUES(
'M.Martian',
'42 Galaxy Way',
'New York',
'NY',
'11213',
'USA');
或者,只要每條INSERT語(yǔ)句中的列名(和次序)相同,可以如下組合各語(yǔ)句:
INSERT INTO customers(cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
VALUES(
'Pep E.LaPew',
'100 Main Street',
'Los Angeles',
'CA',
'90046',
'USA'),
(
'M.Martian',
'42 Galaxy Way',
'New York',
'NY',
'11213',
'USA');
此語(yǔ)句的輸出如下圖所示:
三、插入檢索出的數(shù)據(jù)
INSERT一般用來(lái)給表插入一個(gè)指定列值的行。但是,INSERT還存在另一種形式,可以利用它將一條SELECT語(yǔ)句的結(jié)果插入表中,這就是INSERT SELECT。
下邊的例子把一個(gè)名為custnew的表中的數(shù)據(jù)導(dǎo)入customers表中。為了試驗(yàn)這個(gè)例子,首先應(yīng)該創(chuàng)建和填充custnew表。custnew表的結(jié)構(gòu)與customers表的相同。在填充custnew時(shí),不應(yīng)該使用已經(jīng)在customers中使用過(guò)的cust_id值(如果主鍵值重復(fù),后續(xù)的INSERT操作將會(huì)失敗)。
INSERT INTO customers(cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
SELECT cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country
FROM custnew;
這個(gè)例子在INSERT和SELECT語(yǔ)句中使用了相同的列名。但是,不一定要求列名匹配。事實(shí)上,MySQL甚至不關(guān)心SELECT返回的列名。它使用的是列的位置。INSERT SELECT中SELECT語(yǔ)句可包含WHERE子句以過(guò)濾插入的數(shù)據(jù)。