SQL 表的刪除(DROP TABLE)和更新(ALTER TABLE)


學習要點

  • 使用 DROP TABLE 語句來刪除表。

  • 使用 ALTER TABLE 語句向表中添加列或者從表中刪除列。

一、表的刪除(DROP TABLE 語句)

此前介紹的都是關於 Product 表的內容的創建,下面我們就來介紹一下刪除表的方法。刪除表的 SQL 語句非常簡單,只需要一行 DROP TABLE 語句即可。

KEYWORD

  • DROP TABLE 語句

語法 3 刪除表時使用的 DROP TABLE 語句

DROP TABLE <表名>;

如果想要刪除 Product 表,只需要像代碼清單 3 那樣書寫 SQL 語句即可 [1]

代碼清單 3 刪除 Product

DROP TABLE Product;

DROP 在英語中是“丟掉”“舍棄”的意思。需要特別注意的是,刪除的表是無法恢復的 [2]。即使是被誤刪的表,也無法恢復,只能重新創建,然后重新插入數據。

如果不小心刪除了重要的業務表,那就太悲劇了。特別是存儲了大量數據的表,恢復起來費時費力,請大家務必注意!

法則 12

刪除了的表是無法恢復的。

在執行 DROP TABLE 語句之前請務必仔細確認。

二、表定義的更新(ALTER TABLE 語句)

有時好不容易把表創建出來之后才發現少了幾列,其實這時無需把表刪除再重新創建,只需使用變更表定義的 ALTER TABLE 語句就可以了。 ALTER 在英語中就是“改變”的意思。下面就給大家介紹該語句通常的使用方法。

KEYWORD

  • ALTER TABLE 語句

首先是添加列時使用的語法。

語法 4 添加列的 ALTER TABLE 語句

ALTER TABLE <表名> ADD COLUMN <列的定義>;

特定的 SQL

Oracle 和 SQL Server 中不用寫 COLUMN

ALTER TABLE <表名> ADD <列名> ;

另外,在 Oracle 中同時添加多列的時候,可以像下面這樣使用括號。

ALTER TABLE <表名> ADD (<列名>,<列名>,……);

例如,我們可以使用代碼清單 4 中的語句在 Product 表中添加這樣一列,product_name_pinyin(商品名稱(拼音)),該列可以存儲 100 位的可變長字符串。

代碼清單 4 添加一列可以存儲 100 位的可變長字符串的 product_name_pinyin

DB2 PostgreSQL MySQL

ALTER TABLE Product ADD COLUMN product_name_pinyin VARCHAR(100);

Oracle

ALTER TABLE Product ADD (product_name_pinyin VARCHAR2(100));

SQL Server

ALTER TABLE Product ADD product_name_pinyin VARCHAR(100);

反之,刪除表中某列使用的語法如下所示。

語法 5 刪除列的 ALTER TABLE 語句

ALTER TABLE <表名> DROP COLUMN <列名>;

特定的 SQL

Oracle 中不用寫 COLUMN

ALTER TABLE <表名> DROP <列名> ;

另外,在 Oracle 中同時刪除多列的時候,可以像下面這樣使用括號來實現。

ALTER TABLE <表名> DROP (<列名>,<列名>,……);

例如,我們可以使用代碼清單 5 中的語句來刪除之前添加的 product_name_pinyin 列。

代碼清單 5 刪除 product_name_pinyin

SQL Server DB2 PostgreSQL MySQL

ALTER TABLE Product DROP COLUMN product_name_pinyin;

Oracle

ALTER TABLE Product DROP (product_name_pinyin);

ALTER TABLE 語句和 DROP TABLE 語句一樣,執行之后無法恢復。誤添的列可以通過 ALTER TABLE 語句刪除,或者將表全部刪除之后重新再創建。

法則 13

表定義變更之后無法恢復。

在執行 ALTER TABLE 語句之前請務必仔細確認。

三、向 Product 表中插入數據

最后讓我們來嘗試一下向表中插入數據。從下一章開始,大家將會使用插入到 Product 表中的數據,來學習如何編寫操作數據的 SQL 語句。

Product 表中插入數據的 SQL 語句如代碼清單 6 所示。

代碼清單 6 向 Product 表中插入數據的 SQL 語句

SQL Server PostgreSQL

-- DML :插入數據
BEGIN TRANSACTION;------------------①

INSERT INTO Product VALUES ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');
INSERT INTO Product VALUES ('0002', '打孔器', '辦公用品', 500, 320, '2009-09-11');
INSERT INTO Product VALUES ('0003', '運動T恤', '衣服', 4000, 2800, NULL);
INSERT INTO Product VALUES ('0004', '菜刀', '廚房用具', 3000, 2800, '2009-09-20');
INSERT INTO Product VALUES ('0005', '高壓鍋', '廚房用具', 6800, 5000, '2009-01-15');
INSERT INTO Product VALUES ('0006', '叉子', '廚房用具', 500, NULL, '2009-09-20');
INSERT INTO Product VALUES ('0007', '擦菜板', '廚房用具', 880, 790, '2008-04-28');
INSERT INTO Product VALUES ('0008', '圓珠筆', '辦公用品', 100, NULL,'2009-11-11');

COMMIT;

特定的 SQL

DBMS 不同,代碼清單 6 中的 DML 語句也略有不同。

在 MySQL 中運行時,需要把 ① 中的 BEGIN TRANSACTION; 改寫成

START TRANSACTION;

在 Oracle 和 DB2 中運行時,無需使用 ① 中的 BEGIN TRANSACTION;(請予以刪除)。

這些在不同的 DBMS 中使用的 DML 語句,可以從這里下載。

使用插入行的指令語句 INSERT,就可以把表 2 中的數據都插入到表中了。開頭的 BEGIN TRANSACTION 語句是開始插入行的指令語句,結尾的 COMMIT 語句是確定插入行的指令語句。這些指令語句將會在 數據的插入 中詳細介紹,大家不必急於記住這些語句。

專欄

表的修改

本節將名為 Product 的表作為例子進行了講解,估計會有些讀者在匆忙中把表名誤寫成了 Poduct,創建出了名稱錯誤的表,這可怎么辦呢?

如果還沒有向表中插入數據,那么只需要把表刪除,再重新創建一個名稱正確的表就可以了。可是如果在發現表名錯誤之前就已經向表中插入了大量數據,再這樣做就麻煩了。畢竟插入大量的數據既費時又費力。抑或起初決定好的表名,之后又覺得不好想換掉,這種情況也很麻煩。

其實很多數據庫都提供了可以修改表名的指令(RENAME)來解決這樣的問題。例如,如果想把 Poduct 表的名稱變為 Product,可以使用代碼清單 A 中的指令。

KEYWORD

  • RENAME

代碼清單 A 變更表名

Oracle PostgreSQL

ALTER TABLE Poduct RENAME TO Product;

DB2

RENAME TABLE Poduct TO Product;

SQL Server

sp_rename 'Poduct', 'Product';

MySQL

RENAME TABLE Poduct to Product;

通常在 RENAME 之后按照 <變更前的名稱>、<變更后的名稱> 的順序來指定表的名稱。

各個數據庫的語法都不盡相同,是因為標准 SQL 並沒有 RENAME,於是各個數據庫便使用了各自慣用的語法。如上所述,在創建了錯誤的表名,或者想要保存表的備份時,使用這些語句非常方便。但美中不足的是,由於各個數據庫的語法不同,很難一下子想出恰當的指令。這時大家就可以來參考本專欄。

請參閱

(完)


  1. 隨后還需使用 Product 表來學習相關知識,請不要刪除 Product 表。如果已經刪除,請重新創建 Product 表。 ↩︎

  2. 其實很多 RDBMS 都預留了恢復的功能,但還是請大家認為是無法恢復的。 ↩︎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM