SQL學習筆記|三
SQL 約束 (Constraints)
約束用於限制鍵入表中的資料型別。
可以在建立表時規定約束(通過CREATE TABLE 語句),
或者在建立表之後也可以(通過ALTER TABLE語句)。
- NOT NULL 設定該列資料不能為空
- UNIQUE (唯一的)
- PRIMARY KEY(主鍵)
- FOREIGN KEY(外來鍵)
- CHECK
- DEFAULT
UNIQUE
UNIQUE KEY的用途:主要是用來防止資料插入的時候重複的。
UNIQUE 約束唯一標識資料庫表中的每條資料。
UNIQUE 和 PRIMARY KEY 約束為列或列的集合提供了唯一性的保證。
PRIMARY KEY 擁有自動定義的UNIQUE約束。
每一個表可以有多個UNIQUE約束。
MySQL:
CREATE TABLE Persons(
d_P int NOT NULL,
LastName varcher(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE(Id_P)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Persons(
Id_p int NOT NULL UNIQUE,
LastName varcher(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
)
多列定義UNIQUE
MySQL / SQL Server /Oracle / MS Assess:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varcher(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonsID UNIQUE (Id_p,LastName)
)
新增UNIQUE
當表已經被建立時,如果需要“Id_P”列建立UNIQUE約束。
MySQL / SQL server /Oracle /MS Access:
ALTER TABLE Persons
ADD UNIQUE (Id_P)
MySQL / SQL Sever / Oracle /MS Access:
ATER TABLE Persons
ADD CONSTRAINT uc_PersonsID UNIQUE (Id_P,LastName)
撤銷UNIQUE約束:
MySQL:
ALTER TABLE Persons
DROP INDEX uc_PeronsID
SQL Server / Oracle MS Access:
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonsID
SQL Primary Key(主鍵)
PRIMARY KEY 約束唯一標識資料庫表中的每條每條記錄。
主鍵必須包含唯一的值。
主鍵列不能為NULL值。
每一個表都應該用一個主鍵,並且每一個表只能有一個主鍵。
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varcher(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRTMARY KEY (Id_P)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL PRIMARY KEY,
LastName varcher(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
MySQL / SQL Server / Oracle / MS Assess:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varcher(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonsID PRIMARY KEY (Id_P,LastName)
)
新增主鍵約束
MySQL / SQL Server / Oracle / MS Assess:
ALTER TABLE Persons
ADD PRIMARY KEY (Id_P)
MySQL / SQL Server / Oracle /Ms Access:
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
撤銷主鍵約束:
MYSQL:
ALTER TABLEPersons
DROP PRIMARY KEY
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT pk_PersonsID
SQlL FOREIGN KEY 約束
一個表中的FOREGIN KEY 指向另一個表中的PRIMARY KEY.
SQL FORRGIN KEY Constraint on CREATE TABLE
MYSQL:
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOTNULL,
Id_P int,
PRIMARY KEY (Id_0),
FOREIGN KEY (Id_p) REFERENCES Persons(Id_P)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNO int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
Id_P int FOREIGN KEY REFERENCES Persosn(Id_P)
)
命名的FOREIGM KEY 約束
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders
(
Id_P int not NOT NULL,
OrdersNo int NOT NULL,
Id_P int ,
PRIMARY KEY (iD_O),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
)
新增外來鍵
MySQL / SQL Server / Orders / MS Access:
ALTER TABLE orders
ADD FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
MySQL / SQL Server / Oracle / Ms Access:
ALTER TABLE Orders
ADD CONSYRAINT fk_PerOrders
FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
撤銷資料FOREIGN KEY約束
MySQL:
ALTER TABLE orders
DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access:
DROP CONSTRAINT fk_PerOrders
SQL CHECK 約束
CHECK 約束用於限制列中的值的範圍
如果對單個列定義CHECK約束,那麼該列只允許特定的值。
如果對一個表定義CHECK約束,那麼此約束在特定的列中對值進行限定。
SQL CHECK Constraint on CREAYE TABLE
MYSQL :
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varcher(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P > 0)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varcher(255) NOT NULL, CHECK (Id_P>0)
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
命名的CHECK
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varcher(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT CHECK (Id_P > 0 AND City = 'Sandnes')
)
新增CHECK
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CHECK (Id_p>0)
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTAINT chl_Person CHECK (Id_P > 0 AND City = 'Sandes')
撤銷CEHCK
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT chk_Person
MySQL:
ALTER TABLE Persons
DROP CHECK chk_Person
SQL DEFAULT 約束
DEFAULT 約束用於向列中插入預設值。
如果沒有規定其他值,那麼那麼會將預設值新增到所有的新紀錄。
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) not null ,
FirstName varchar(255),
Address varchar(255),
City varchar (255),
City varchar(255) DEFAULT 'Sandnes'
)