筆記參考自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