SQL必知必會 筆記 第十七章 建立和操縱表,sql必知
17.1建立表
一般有兩種建立表的方法
(1)多數DBMS都具有互動式建立和管理表工具
(2)表也可以直接用SQL語句操縱
文法差別:在不同的SQL實現中,CREATE TABLE語句的文法可能會有所不同。
17.1.1表建立基礎
為利用CREATE TABLE建立表,必須給出下列資訊:
(1)新表的名字,在關鍵字CREATE TABLE之後給出。
(2)表列的名字和定義,用逗號分隔。
(3)有的DBMS還要求指定表的位置。
建立Products表
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};
替換現有的表
在建立新表時,指定的表名必須不存在,否則將出錯。如果要防止以外覆蓋已有的表,SQL要求首先手工刪除該表,然後再重建它,而不是簡單地用建立表語句覆蓋它。
17.1.2使用NULL值
允許NULL值的列也允許在插入行時不給出該列的值。不允許NULL值的列不接受該列沒有值的行,換句話說,在插入或更新行時,該列必須沒有值。
指定NULL:多數DBMS在不指定NOT NULL時認為指定的是NULL,但並不是所有的DBMS都這樣。
主鍵和NULL值:主鍵是其值唯一標識表中每一行的列,只有不允許NULL值的列可用於主鍵。允許NULL值的列不能用於唯一標識。
理解NULL:不要把NULL值與空串相混淆,NULL值是沒有值,它不是空串,如果指定‘’,這在NOT NULL列種是允許的。空串是一個有效值,它不是無值。NULL值用關鍵字NULL而不是空串指定。
17.1.3指定預設值
SQL允許指定預設值,在插入行時如果不給出值,DBMS將自動採用預設值。預設值在CREATE TABLE語句的列定義中用關鍵字DEFAULT指定。
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};
獲得系統日期
17.2更新表
為更新表定義,可使用ALTER TABLE語句。
使用ALTER TABLE所考慮的內容。
(1)一般來說,在表中包含資料時不要對其進行更新。
(2)所有DBMS都允許給校友的表增加列,不過對所增加列的資料類型(以及NULL和DEFAULT的使用)有所限制。
(3)許多DBSM不允許刪除或更改表中的列。
(4)多數DBMS允許重新命名表中的列。
(5)許多DBMS對已經填有資料的列的更改有限制,對未填有資料的列幾乎沒有限制。
為了使用ALTER TABLE更改表結構,必須給出下面資訊:
(1)在ALTER TABLE之後給出要更改的表名(該表必須存在,否則將出錯)
(2)所做更改的列表
添加列
ALTER TABLE VendorsADD vend_phone CHAR(20);
刪除列
ALTER TABLE VendorsDROP COLUMN vend_phone;
小心使用ALTER TABLE:使用ALTER TABLE要極為小心,應該在進行改動前做一個完整的備份。資料庫表的更改不能撤銷,如果增加了不需要的列,可能不能刪除它們。類似地,如果刪除了不應該刪除的列,可能會丟失該列中的所有資料。
17.3刪除表
刪除表(刪除整個表而不是其內容),使用DROP TABLE語句。
DROP TABLE CustCopy;
17.4重新命名表
不同DBMS所支援的表的重新命名有所不同。
Oracle用RENAME