SQL讀書筆記(十)創建和操縱表

筆記參考自SQL必知必會,方便自己以後查閱,也希望能夠幫助到正在學習SQL的道友~

前面的筆記大部分全是檢索功能,書的目錄結構就是先介紹的檢索功能,我認爲也有道理,因爲數據庫的檢索功能是用的次數最多的功能,大篇幅的介紹的有必要的,接下的筆記記一下到底該如何創建和操縱表

創建表很簡單,記下就行,書中也很詳細,也就直接拿過來用了,主鍵可能需要格外注意下。。

主鍵就是一個人的身份證,十分重要

利用CREATE TABLE創建表,必須給出下列信息:

新表的名字,在關鍵字CREATE TABLE之後給出;
表列的名字和定義,用逗號分隔;
有的DBMS還要求指定表的位置。

CREATE TABLE Products 
(
    prod_id       CHAR(10)          NOT NULL,
    vend_id       CHAR(10)          NOT NULL,
    prod_name     CHAR(254)         NOT NULL,
    prod_price    DECIMAL(8,2)      NOT NULL,
    prod_desc     VARCHAR(1000)     NULL 
);

表名緊跟CREATE TABLE關鍵字。實際的表定義(所有列)括在圓括號之中,各列之間用逗號分隔。這個表由5列組 成。每列的定義以列名(它在表中必須是唯一的)開始,後跟列的數據類型,整條語句以圓括號後的分號結束。 每一列的定義都含有關鍵字NOT NULL。這就會阻止插入沒有值的列。如果插入沒有值的列,將返回錯誤,且插入失敗。

在創建新的表時,指定的表名必須不存在,否則會出錯。防止意外覆蓋已有的表,SQL要求首先手工刪除該表(請參閱後面的內容),然後再重建它,而不是簡單地用創建表語句覆蓋它。

CREATE TABLE Vendors 
(
    vend_id          CHAR(10)     NOT NULL,
    vend_name        CHAR(50)     NOT NULL,
    vend_address     CHAR(50)     ,
    vend_city        CHAR(50)     ,
    vend_state       CHAR(5)      ,
    vend_zip         CHAR(10)     ,
    vend_country     CHAR(50) 
);

這條語句創建的Vendors表。供應商ID和供應商名字列是必需的,因此指定爲NOT NULL。其餘五列全都允許NULL值,所以不指定NOT NULL。NULL爲默認設置,如果不指定NOT NULL,就認爲指定的是NULL。

主鍵是其值唯一標識表中每一行的列。只有不允許NULL值的列可作爲主鍵,允許NULL值的列不能作爲唯一標識。

指定默認值

CREATE TABLE OrderItems 
(
    order_num      INTEGER          NOT NULL,
    order_item     INTEGER          NOT NULL,
    prod_id        CHAR(10)         NOT NULL,
    quantity       INTEGER          NOT NULL      DEFAULT 1,
    item_price     DECIMAL(8,2)     NOT NULL 
);

這條語句創建OrderItems表,包含構成訂單的各項(訂單本身存儲在Orders表中)。quantity列爲訂單中每個物品的數量。在這個例子中,這 一列的描述增加了DEFAULT 1,指示DBMS,如果不給出數量則使用數量1。

默認值經常用於日期或時間戳列。例如,通過指定引用系統日期的函數或變量,將系統日期用作默認日期。

更新表

理想情況下,不要在表中包含數據時對其進行更新。應該在表的設計過程中充分考慮未來可能的需求,避免今後對錶的結構做大改動。
所有的DBMS都允許給現有的表增加列,不過對所增加列的數據類型(以及NULL和DEFAULT的使用)有所限制。
許多DBMS不允許刪除或更改表中的列。
多數DBMS允許重新命名錶中的列。
許多DBMS限制對已經填有數據的列進行更改,對未填有數據的列幾乎沒有限制。

使用ALTER TABLE更改表結構,必須給出下面的信息:
在ALTER TABLE之後給出要更改的表名(該表必須存在,否則將出錯);
列出要做哪些更改。

ALTER TABLE Vendors ADD vend_phone CHAR(20);
這條語句給Vendors表增加一個名爲vend_phone的列,其數據類型爲CHAR。

ALTER TABLE Vendors DROP COLUMN vend_phone;
更改或刪除列、增加約束或增加鍵,這些操作也使用類似的語法(注意,下面的例子並非對所有DBMS都有效):

使用ALTER TABLE要極爲小心,應該在進行改動前做完整的備份(模式和數據的備份)。數據庫表的更改不能撤銷,如果增加了不需要的 列,也許無法刪除它們。類似地,如果刪除了不應該刪除的列,可能會丟失該列中的所有數據。

刪除表

DROP TABLE CustCopy;

許多DBMS允許強制實施有關規則,防止刪除與其他表相關聯的表。在實施這些規則時,如果對某個表發佈一條DROP TABLE語句,且該表 是某個關係的組成部分,則DBMS將阻止這條語句執行,直到該關係被刪除爲止。如果允許,應該啓用這些選項,它能防止意外刪除有用的表。

重命名錶

RENAME TABLE 語法可以將一個或多個表重新命名。

RENAME TABLE tb_name TO new_tb_name, tb_name2 TO new_tb_name2, …

如果想交換兩個表的名字,可以做如下操作(假定不存在名爲 tmp_table 的表):

RENAME TABLE old_table TO tmp_table,
             new_table TO old_table,
             tmp_table TO new_table
發佈了83 篇原創文章 · 獲贊 68 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章