SQL UNIQUE 約束
UNIQUE 約束唯一標識數據庫表中的每條記錄。
UNIQUE 和 PRIMARY KEY 約束均爲列或列集合提供了唯一性的保證。
PRIMARY KEY 約束擁有自動定義的 UNIQUE 約束。
請注意,每個表可以有多個 UNIQUE 約束,但是每個表只能有一個 PRIMARY KEY 約束。
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)
撤銷 UNIQUE 約束
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
SQL PRIMARY KEY 約束
PRIMARY KEY 約束唯一標識數據庫表中的每條記錄。
主鍵必須包含唯一的值。
主鍵列不能包含 NULL 值。
每個表都應該有一個主鍵,並且每個表只能有一個主鍵。
SQL FOREIGN KEY 約束
一個表中的 FOREIGN KEY 指向另一個表中的 PRIMARY KEY。
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders
SQL DEFAULT 約束
DEFAULT 約束用於向列中插入默認值。
如果沒有規定其他的值,那麼會將默認值添加到所有的新記錄。
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
CREATE TABLE Orders11
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
OrderDate smalldatetime DEFAULT GETDATE(),
)
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT
SQL 索引
索引是一種特殊的查詢表,可以被數據庫搜索引擎用來加速數據的檢索。簡單說來,索引就是指向表中數據的指針。數據庫的索引同書籍後面的索引非常相像。
例如,如果想要查閱一本書中與某個特定主題相關的所有頁面,你會先去查詢索引(索引按照字母表順序列出了所有主題),然後從索引中找到一頁或者多頁與該主題相關的頁面。
索引能夠提高 SELECT 查詢和 WHERE 子句的速度,但是卻降低了包含 UPDATE 語句或 INSERT 語句的數據輸入過程的速度。索引的創建與刪除不會對錶中的數據產生影響。
創建索引需要使用 CREATE INDEX 語句,該語句允許對索引命名,指定要創建索引的表以及對哪些列進行索引,還可以指定索引按照升序或者降序排列。
同 UNIQUE 約束一樣,索引可以是唯一的。這種情況下,索引會阻止列中(或者列的組合,其中某些列有索引)出現重複的條目。
SQL 子查詢
子查詢(Sub Query)或者說內查詢(Inner Query),也可以稱作嵌套查詢(Nested Query),是一種嵌套在其他 SQL 查詢的 WHERE 子句中的查詢。
子查詢用於爲主查詢返回其所需數據,或者對檢索數據進行進一步的限制。
子查詢可以在 SELECT、INSERT、UPDATE 和 DELETE 語句中,同 =、<、>、>=、<=、IN、BETWEEN 等運算符一起使用。
使用子查詢必須遵循以下幾個規則:
子查詢必須括在圓括號中。
子查詢的 SELECT 子句中只能有一個列,除非主查詢中有多個列,用於與子查詢選中的列相比較。
子查詢不能使用 ORDER BY,不過主查詢可以。在子查詢中,GROUP BY 可以起到同 ORDER BY 相同的作用。
返回多行數據的子查詢只能同多值操作符一起使用,比如 IN 操作符。
SELECT 列表中不能包含任何對 BLOB、ARRAY、CLOB 或者 NCLOB 類型值的引用。
子查詢不能直接用在集合函數中。
BETWEEN 操作符不能同子查詢一起使用,但是 BETWEEN 操作符可以用在子查詢中。