筆記

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 操作符可以用在子查詢中。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章