1. 程式人生 > >SQL學習筆記8

SQL學習筆記8

SQL FOREIGN KEY 約束

一個表中的 FOREIGN KEY 指向另一個表中的 UNIQUE KEY(唯一約束的鍵)。

FOREIGN KEY 約束用於預防破壞表之間連線的行為。

FOREIGN KEY 約束也能防止非法資料插入外來鍵列,因為它必須是它指向的那個表中的值之一。

 

下面的 SQL 在 "Orders" 表建立時在 "P_Id" 列上建立 FOREIGN KEY 約束:

MySQL:

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),

FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)

SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)

如需命名 FOREIGN KEY 約束,並定義多個列的 FOREIGN KEY 約束,請使用下面的 SQL 語法:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)     *****************************************************************************************************************************************************************************************    

ALTER TABLE 時的 SQL FOREIGN KEY 約束

當 "Orders" 表已被建立時,如需在 "P_Id" 列建立 FOREIGN KEY 約束,請使用下面的 SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

如需命名 FOREIGN KEY 約束,並定義多個列的 FOREIGN KEY 約束,請使用下面的 SQL 語法:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

撤銷 FOREIGN KEY 約束

如需撤銷 FOREIGN KEY 約束,請使用下面的 SQL:

MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders     *****************************************************************************************************************************************************************************************  

CHECK 約束用於限制列中的值的範圍。

如果對單個列定義 CHECK 約束,那麼該列只允許特定的值。

如果對一個表定義 CHECK 約束,那麼此約束會基於行中其他列的值在特定的列中對值進行限制。

 

 

*****************************************************************************************************************************************************************************************

 

DEFAULT 約束用於向列中插入預設值。

如果沒有規定其他的值,那麼會將預設值新增到所有的新記錄。

 

通過使用類似 GETDATE() 這樣的函式,DEFAULT 約束也可以用於插入系統值:

CREATE TABLE Orders
(
    O_Id int NOT NULL,     OrderNo int NOT NULL,     P_Id int,     OrderDate date DEFAULT GETDATE() )

ALTER TABLE 時的 SQL DEFAULT 約束

當表已被建立時,如需在 "City" 列建立 DEFAULT 約束,請使用下面的 SQL:

MySQL:

ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'

SQL Server / MS Access:

ALTER TABLE Persons
ADD CONSTRAINT ab_c DEFAULT 'SANDNES' for City

Oracle:

ALTER TABLE Persons
MODIFY City DEFAULT 'SANDNES'




撤銷 DEFAULT 約束

如需撤銷 DEFAULT 約束,請使用下面的 SQL:

MySQL:

ALTER TABLE Persons
ALTER City DROP DEFAULT

SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT


****************************************************************************************************************************

CREATE INDEX 語句用於在表中建立索引。

在不讀取整個表的情況下,索引使資料庫應用程式可以更快地查詢資料。

SQL CREATE INDEX 語法

在表上建立一個簡單的索引。允許使用重複的值:

CREATE INDEX index_name
ON table_name (column_name)

SQL CREATE UNIQUE INDEX 語法

在表上建立一個唯一的索引。不允許使用重複的值:唯一的索引意味著兩個行不能擁有相同的索引值。Creates a unique index on a table. Duplicate values are not allowed:

CREATE UNIQUE INDEX index_name
ON table_name (column_name)

註釋:用於建立索引的語法在不同的資料庫中不一樣。因此,檢查您的資料庫中建立索引的語法。


***************************************************************************************************************************************************

DROP INDEX 語句

DROP INDEX 語句用於刪除表中的索引。

用於 MS Access 的 DROP INDEX 語法:

DROP INDEX index_name ON table_name

用於 MS SQL Server 的 DROP INDEX 語法:

DROP INDEX table_name.index_name

用於 DB2/Oracle 的 DROP INDEX 語法:

DROP INDEX index_name

用於 MySQL 的 DROP INDEX 語法:

ALTER TABLE table_name DROP INDEX index_name
 

DROP TABLE 語句

DROP TABLE 語句用於刪除表。

DROP TABLE table_name
 

DROP DATABASE 語句

DROP DATABASE 語句用於刪除資料庫。

DROP DATABASE database_name
 

TRUNCATE TABLE 語句

如果我們僅僅需要刪除表內的資料,但並不刪除表本身,那麼我們該如何做呢?

請使用 TRUNCATE TABLE 語句:

TRUNCATE TABLE table_name


****************************************************************************************************************************************************

SQL ALTER TABLE 語法

如需在表中新增列,請使用下面的語法:

ALTER TABLE table_name
ADD column_name datatype

如需刪除表中的列,請使用下面的語法(請注意,某些資料庫系統不允許這種在資料庫表中刪除列的方式):

ALTER TABLE table_name
DROP COLUMN column_name

要改變表中列的資料型別,請使用下面的語法:

SQL Server / MS Access:

ALTER TABLE table_name
ALTER COLUMN column_name datatype

My SQL / Oracle:

ALTER TABLE table_name
MODIFY COLUMN column_name datatype

Oracle 10G 之後版本:

ALTER TABLE table_name
MODIFY column_name datatype;