《SQL必知必會》筆記8-建表create、插入insert絮宁、更新update梆暮、刪除delete

1 創(chuàng)建和操縱表(CREATE)

1.1 創(chuàng)建表CREATE

利用CREATE TABLE創(chuàng)建表,需給出以下信息:

  1. 新表的名字绍昂,在關(guān)鍵字CREATE TABLE之后給出啦粹。
  2. 表列的名字和定義,用逗號分隔窘游。
  3. 有的DBMS還要求指定表的位置唠椭。

創(chuàng)建產(chǎn)品Products表:

CREATE TABLE Products
(
 prod_id      char(10)       NOT NULL ,
 vend_id      char(10)       NOT NULL ,
 prod_name    char(255)      NOT NULL ,
 prod_price   decimal(8,2)   NOT NULL ,
 prod_desc    text           NULL 
);

添加默認(rèn)值的時候,使用關(guān)鍵字DEFAULT忍饰。

創(chuàng)建訂單明細(xì)OrderItems表:

CREATE 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 
);

1.2 更新表ALTER

利用ALTER TABLE更新表贪嫂,要考慮:

  1. 理想情況下,不要在表中包含數(shù)據(jù)的時候?qū)ζ溥M(jìn)行更新喘批,應(yīng)該在創(chuàng)建表的時候,考慮未來的擴(kuò)展性铣揉,避免對表的結(jié)構(gòu)做大改動饶深。
  2. 所有的DBMS都允許對現(xiàn)有表增加列,不過對所增加列的數(shù)據(jù)類型(以及NULL和DEFAULT的使用)有所限制逛拱。
  3. 多數(shù)DBMS允許重命名表中的列敌厘,不允許刪除或更改表中的列。

給供應(yīng)商Vendors表添加vend_phone列:

ALTER TABLE Vendors
ADD vend_phone CHAR(20);

刪除供應(yīng)商Vendors表的vend_phone列:

ALTER TABLE Vendors
DROP COLUMN vend_phone;

2 插入數(shù)據(jù)(INSERT)

2.1 數(shù)據(jù)插入

INSERT用來將行插入(或添加)到數(shù)據(jù)庫表朽合。

插入有幾種方式:

  1. 插入完整的行俱两。
  2. 插入行的一部分饱狂。
  3. 插入某些查詢的結(jié)果。

2.2 插入完整的行

INSERT指定表名和插入到新行中的值宪彩。

INSERT INTO Customers
VALUES('1000000006','Toy Land','123 Any Street',
       'New York','NY','11111','USA',NULL,NULL);

插入數(shù)據(jù)時休讳,各列必須以它們在表定義中出現(xiàn)的次序填充。

上面的SQL語句高度依賴于表中列的定義次序尿孔,還依賴于其容易獲得的次序信息俊柔。即使可以得到這種次序信息,也不能保證各列在下一次表結(jié)構(gòu)變動后保持完全相同的次序活合。因此雏婶,編寫依賴于特定列次序的SQL語句是很不安全的。

實(shí)際上白指,在插入數(shù)據(jù)的時候留晚,最好給出填充列的順序。

INSERT INTO Customers(cust_id,cust_contact,cust_email,
                      cust_name,cust_address,cust_city,
                      cust_state,cust_zip)
VALUES('1000000006',NULL,NULL,'Toy Land','123 Any Street',
       'New York','NY','11111');

注意:不管使用哪種INSERT語法告嘲,VALUES的數(shù)目都必須正確错维。


2.3 插入部分行

插入部分行,表示可以只給某些列提供值状蜗,其他列不提供值需五。

INSERT INTO Customers(cust_id,cust_name,cust_address,
                      cust_city,cust_state,cust_zip)
VALUES('1000000006','Toy Land','123 Any Street',
       'New York','NY','11111');

省略的列必須滿足以下某個條件:

  1. 該列定義為允許NULL值(無值或空值)。
  2. 在表定義中給出默認(rèn)值轧坎。這表示如果不給出值宏邮,將使用默認(rèn)值。

2.4 插入檢索出的數(shù)據(jù)

INSERT可以將SELECT語句的查詢結(jié)果插入表中缸血,這就是所謂的INSERT SELECT蜜氨。它由一條INSERT語句和一條SELECT語句組成。

假如想把另一個表中的顧客列合并到Customers表中捎泻。

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;

INSERT SELECT中SELECT語句可以包含WHERE子句飒炎,以過濾插入的數(shù)據(jù)。

INSERT通常只插入一行笆豁,需要插入多行郎汪,必須執(zhí)行多個INSERT語句。INSERT SELECT是個例外闯狱,它可以用一條INSERT插入多行煞赢,不管SELECT語句返回多少行,都將被INSERT插入哄孤。


2.5 從一個表復(fù)制到另一個表

有一種數(shù)據(jù)插入不使用INSERT語句照筑。要將一個表的內(nèi)容復(fù)制到一個全新的表(運(yùn)行中創(chuàng)建的表),可以使用SELECT INTO語句。

MariaDB凝危、MySQL波俄、Oracle、PostgreSQL和SQLite的語法如下:

CREATE TABLE CustCopy AS SELECT * FROM Customers;

在使用SELECT INTO時蛾默,需要知道的事情:

  1. 任何SELECT選項(xiàng)和子句都可以使用懦铺,包括WHERE和GROUP BY。
  2. 可利用聯(lián)結(jié)從多個表插入數(shù)據(jù)趴生。
  3. 不管從多少個表中檢索數(shù)據(jù)阀趴,數(shù)據(jù)都只能插入到一個表中。

3 更新和刪除數(shù)據(jù)(UPDATE苍匆、DELETE)

3.1 更新數(shù)據(jù)UPDATE

兩種使用UPDATE的方式:

  1. 更新表中的特定行刘急。
  2. 更新表中的所有行。

基本的UPDATE語句由三部分組成:

  • 要更新的表浸踩。
  • 列名和它們的新值叔汁。
  • 確定要更新哪些行的過濾條件。
UPDATE 表名
SET key1 = value1, key2 = value2
WHERE  滿足條件检碗、過濾條件

顧客ID為1000000005現(xiàn)在有了Email据块,需要更新他的記錄。

UPDATE Customers
SET cust_email = 'kim@thetoystore.com'
WHERE cust_id = '1000000005';

更新多個列:

UPDATE Customers
SET cust_contact = 'Sam Roberts',
    cust_email = 'sam@toyland.com'
WHERE cust_id = '1000000006';

要刪除某個列的值折剃,可設(shè)置它為NULL(加入表定義允許NULL值)另假。

UPDATE Customers
SET cust_email = NULL
WHERE cust_id = '1000000005';

注意:UPDATE語句也可使用子查詢,使得能用SELECT語句檢索出的數(shù)據(jù)更新列數(shù)據(jù)怕犁。


3.2 刪除數(shù)據(jù)DELETE

兩種使用DELETE的方式:

  1. 從表中刪除特定的行边篮。
  2. 從表中刪除所有行。

基本的DELETE語句由兩部分組成:

  • 要刪除的表奏甫。
  • 確定要刪除哪些行的過濾條件戈轿。
DELETE FROM 表名
WHERE  滿足條件、過濾條件
DELETE FROM Customers
WHERE cust_id = '1000000006';

DELETE不需要列名或通配符阵子,刪除的是整行而不是刪除列思杯。要刪除指定的列,可以使用UPDATE語句挠进。

DELETE語句從表中刪除行色乾,甚至是刪除表中的所有行,但是领突,DELETE不刪除表本身暖璧。

如果想從表中刪除所有行,不要使用DELETE攘须∑嶙玻可使用TRUNCATE TABLE語句,它完成相同的工作于宙,而速度更快(因?yàn)椴挥涗洈?shù)據(jù)的變動)浮驳。


3.3 使用UPDATE和DELETE的指導(dǎo)原則

  1. 除非確實(shí)打算更新和刪除每一行,否則絕對不要使用不帶WHERE子句的UPDATE或DELETE語句捞魁。
  2. 在UPDATE或DELETE語句使用WHERE子句前至会,應(yīng)該先用SELETE進(jìn)行測試,保證它過濾的是正確的記錄谱俭,以防編寫的WHERE子句不正確奉件。
  3. 增加DBMS更新和刪除數(shù)據(jù)庫的權(quán)限,防止執(zhí)行不帶WHERE子句的UPDATE或DELETE語句昆著。

如果您發(fā)現(xiàn)文中有不清楚或者有問題的地方县貌,請?jiān)谙路皆u論區(qū)留言,我會根據(jù)您的評論凑懂,更新文中相關(guān)內(nèi)容煤痕,謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末接谨,一起剝皮案震驚了整個濱河市摆碉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脓豪,老刑警劉巖巷帝,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扫夜,居然都是意外死亡楞泼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門历谍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來现拒,“玉大人,你說我怎么就攤上這事望侈∮∈撸” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵脱衙,是天一觀的道長侥猬。 經(jīng)常有香客問我,道長捐韩,這世上最難降的妖魔是什么退唠? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮荤胁,結(jié)果婚禮上瞧预,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好垢油,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布盆驹。 她就那樣靜靜地躺著,像睡著了一般滩愁。 火紅的嫁衣襯著肌膚如雪躯喇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天硝枉,我揣著相機(jī)與錄音廉丽,去河邊找鬼。 笑死妻味,一個胖子當(dāng)著我的面吹牛正压,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播责球,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蔑匣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了棕诵?” 一聲冷哼從身側(cè)響起裁良,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎校套,沒想到半個月后价脾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡笛匙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年侨把,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妹孙。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡秋柄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蠢正,到底是詐尸還是另有隱情骇笔,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布嚣崭,位于F島的核電站笨触,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏雹舀。R本人自食惡果不足惜芦劣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望说榆。 院中可真熱鬧虚吟,春花似錦寸认、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至模庐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間油宜,已是汗流浹背掂碱。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留慎冤,地道東北人疼燥。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像蚁堤,于是被迫代替她去往敵國和親醉者。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容