用SQL建立資料庫
首先說說怎麼用SQL語句建立資料庫,建立資料庫的語句有如下幾種:
1. CREATE TABLE(建立新表)
2. CREATE INDEX(增加索引)
3. DROP INDEX(刪除索引)
4. CONSTRAINT(約束語句)
5. ALTER TABLE(修改表)
6. DROP TABLE(刪除表)
CREATE TABLE語句:
在資料庫中產生新表,表中欄位的類型可以為:INTEGER(整型)、LONG(長整型)、 SINGLE(單精確度浮點數)、DOUBLE(雙精確度浮點數)、DATETIME(日期型,也可以寫成DATE)、BIT(布爾型)、 TEXT(字串型,最大255個位元組)、MEMO(字串型,最大可達1.2G位元組)、 COUNTER(自動遞增長整型,可確定記錄的唯一性)、CURRENCY(貨幣型,精確到小數點左邊15位,右邊4位)、 BINARY(位元組型,最大255個)、LONGBINARY(用於OLE對象)、GUID(通用唯一識別碼)。
產生表NewTable,該表有文字欄位Field1和整型欄位Field2,表名和欄位名可以隨便你取,不區分大小寫,但是,有些保留字不能用作表名欄位名,比如Number
CREATE TABLE NewTable(Field1 TEXT(30), Field2 INTEGER);
CREATE INDEX語句:
INDEX是為了加快尋找記錄的速度,或者是為了增加欄位約束關係而設定的。
建立索引語句執行前表中可以有記錄,但存在的記錄必須滿足該索引語句的約束關係,否則語句不能執行,另外要注意的是在同一個資料庫中(而不僅僅是在同一個表中),索引名不能相同,否則語句也會失敗。
產生欄位Field1的索引欄位NewIndex,兩條語句作用相同
產生後Field1欄位可以有相同的值,可以有空值(NULL)
CREATE INDEX NewIndex ON NewTable (Field1);
CREATE INDEX NewIndex ON NewTable (Field1) WITH IGNORE NULL;
產生欄位Field1的索引欄位NewIndex,注意,每個表裡只能有一個主索引(PRIMARY)。產生後Field1欄位不能有相同的值,不能有空值(當然,如果是TEXT類型,可以有一個空串,但是空串不是空值)
CREATE INDEX NewIndex ON NewTable(Field1) WITH PRIMARY;
欄位Field1不能有相同的值,但可以有空值(兩個空值不算相同的值)
CREATE UNIQUE INDEX NewIndex ON NewTable(Field1);
欄位Field1可以有相同的值,但不能有空值
CREATE INDEX NewIndex ON NewTable(Field2) WITH DISALLOW NULL
可以在索引語句中加入ASC(升序)或DESC(降序)來控制記錄排列順序如果不使用順序字,SQL則預設使用ASC順序
CREATE INDEX NewIndex ON NewTable(Field1 ASC, Field2 DESC);
DROP INDEX語句:刪除表NewTable中的索引NewIndex,語句執行前索引NewIndex必須存在
DROP INDEX NewIndex ON NewTable;
CONSTRAINT語句:
CONSTRAINT子句用於建立資料庫完整性的索引,它和INDEX語句作用一樣,有些地方可以互相替代,它可以使用PRIMARY KEY(主關鍵字),UNIQUE(唯一)和FOREIGN KEY(外部關鍵字),和INDEX相比不能使用IGNOR NULL和DISALLOW NULL,但多了FOREIGN KEY(這也是它最強大的地方)。另外, CONSTRAINT語句必須和CREATE TABLE或ALTER TABLE語句一起使用。
產生表NewTable,主關鍵字段是Field1,主索引是NewPK
CREATE TABLE NewTable(Field1 LONG CONSTRAINT NewPK PRIMARY KEY, Field2 MEMO, Field3 DATETIME);
產生索引為NewUK的表NewTable,Field1不能有相同值,可以有空值
CREATE TABLE NewTable(Field1 INTEGER CONSTRAINT NewUK UNIQUE);
產生多列的主索引,兩條記錄的Field1和Field2不能全部相同,也不可為空值
CREATE TABLE NewTable(Field1 INTEGER, Field2 CURRENCY, CONSTRAINT NewPK PRIMARY KEY(Field1, Field2));
產生多列的UNIQUE索引,兩條記錄的Field1和Field2不能全部相同注意,如果兩條記錄其中一個欄位相同而另一個欄位都是空值,那也算兩個欄位不同
CREATE TABLE NewTable(Field1 INTEGER, Field2 CURRENCY, CONSTRAINT NewUK UNIQUE(Field1, Field2));
要在幾個不同的表之間建立聯絡,就要使用FOREIGN KEY REFERENCES子句,它可以限定某個表的欄位內容必須存在於另外一個表中。
第一個例子:
首先,產生主關鍵字段為Field1的表NewTable1
CREATE TABLE NewTable1(Field1 INTEGER CONSTRAINT NewPK PRIMARY KEY);
然後,再產生外部索引,兩個表的Field1必須類型相同,並且第一個表的Field1是主關鍵字段或UNIQUE欄位。產生外部索引後,表NewTable2要增加記錄,它的Field1欄位值必須已經存在於表NewTable1的Field1欄位中。
下面兩條語句作用相同,因為Field1是NewTable1的主關鍵字段,可以省略不寫
CREATE TABLE NewTable2(Field1 INTEGER CONSTRAINT NewFK REFERENCES NewTable1);
CREATE TABLE NewTable2(Field1 INTEGER CONSTRAINT NewFK REFERENCES NewTable1(Field1));
第二個例子:
首先,產生主關鍵字段為Field1和Field2的表NewTable1
CREATE TABLE NewTable1(Field1 INTEGER, Field2 TEXT(20), CONSTRAINT NewPK PRIMARY KEY(Field1, Field2));
然後,產生多列外部索引
CREATE TABLE NewTable2(Field1 INTEGER, Field2 TEXT(20), CONSTRAINT NewFK FOREIGN KEY(Field1, Field2) REFERENCES NewTable1(Field1, Field2));
ALTER TABLE語句:
在表產生之後,如果想修改表的結構,就使用這條語句,它能增加或刪除欄位以及約束關係。
給表NewTable增加日期型欄位Field3,語句執行前表NewTalbe必須沒有欄位Field3
ALTER TABLE NewTable ADD COLUMN Field3 DATE;
刪除表NewTable中的欄位Field3,語句執行前欄位Field3必須存在表NewTable中
ALTER TABLE NewTable DROP COLUMN Field3;
給表NewTable增加NewUK約束關係
ALTER TABLE NewTable ADD CONSTRAINT NewUK UNIQUE(Field1,Field2);
刪除表NewTable的NewUK約束關係
ALTER TABLE NewTable DROP CONSTRAINT NewUK;
DROP TABLE語句:刪除表NewTable,語句執行前表NewTable必須存在
DROP TABLE NewTable;