MySql之SQL語句學習筆記(四)

文章摘要:
1、NOT NULL 約束
2、UNIQUE 約束
2.1、在用法上UNIQUE與Distinct有什么區別,不是都是去重復行嗎?
3、PRIMARY KEY
4、FOREIGN KEY
5、CHECK
6、DEFAULT


1、NOT NULL 約束

NOT NULL 約束強制列不接受 NULL 值。
NOT NULL 約束強制字段始終包含值。這意味著,如果不向字段添加值,就無法插入新記錄或者更新記錄。

下面的 SQL 語句強制 "Id_P" 列和 "LastName" 列不接受 NULL 值:

CREATE TABLE Persons(Id_P intNOT NULL
,LastName varchar(255)NOT NULL
,FirstName varchar(255),Address varchar(255),City varchar(255))

2、UNIQUE 約束

UNIQUE 約束唯一標識數據庫表中的每條記錄。
UNIQUE 和 PRIMARY KEY 約束均為列或列集合提供了唯一性的保證。

PRIMARY KEY 擁有自動定義的 UNIQUE 約束。
請注意,每個表可以有多個 UNIQUE 約束,但是每個表只能有一個 PRIMARY KEY 約束。

-- MySQL:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P,其他列,...,),     <!-- 允許多個列 -->
CONSTRAINT 約束名  <!-- 增加約束名 -->
)

--SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT 約束名
)
  • 使用ALTER:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD UNIQUE (Id_P)

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

MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
  • 撤銷約束:
-- MySQL:
ALTER TABLE Persons
DROP INDEX uc_PersonID

-- SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID

2.1、在用法上UNIQUE與Distinct有什么區別,不是都是去重復行嗎?

UNIQUE 是表結構選項(約束),Distinct 是查詢時候用的啊,兩個用在不同的地方,不能通用。

3、PRIMARY KEY

SQL PRIMARY KEY 約束
PRIMARY KEY 約束唯一標識數據庫表中的每條記錄。
主鍵必須包含唯一的值。【UNIQUE】
主鍵列不能包含 NULL 值。【NOT NULL】
每個表都應該有一個主鍵,并且每個表只能有一個主鍵。
例如:

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (Id_P)
)

4、FOREIGN KEY

SQL FOREIGN KEY 約束
一個表中的 FOREIGN KEY 指向另一個表中的 PRIMARY KEY。
讓我們通過一個例子來解釋外鍵。請看下面兩個表:
"Persons" 表:
| Id_P | LastName | FirstName | Address | City |
|---- |---- | ----| ----|
| 1 | Adams | John | Oxford Street | London |
| 2 | Bush | George | Fifth Avenue | New York |
| 3 | Carter | Thomas | Changan Street | Beijing |

"Orders" 表:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1

請注意,"Orders" 中的 "Id_P" 列指向 "Persons" 表中的 "Id_P" 列。
"Persons" 表中的 "Id_P" 列是 "Persons" 表中的 PRIMARY KEY。
"Orders" 表中的 "Id_P" 列是 "Orders" 表中的 FOREIGN KEY。
FOREIGN KEY 約束用于預防破壞表之間連接的動作。
FOREIGN KEY 約束也能防止非法數據插入外鍵列,因為它必須是它指向的那個表中的值之一。
例如:

CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)

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

CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
)

5、CHECK

SQL CHECK 約束
CHECK 約束用于限制列中的值的范圍。
如果對單個列定義 CHECK 約束,那么該列只允許特定的值。
如果對一個表定義 CHECK 約束,那么此約束會在特定的列中對值進行限制。
例如:

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)
)

如果需要命名 CHECK 約束,以及為多個列定義 CHECK 約束,請使用下面的 SQL 語法:

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
)

6、DEFAULT

SQL DEFAULT 約束
DEFAULT 約束用于向列中插入默認值。
如果沒有規定其他的值,那么會將默認值添加到所有的新記錄。
例如:

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)

或者sql支持的函數:

CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
OrderDate date DEFAULT GETDATE()
)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容