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 TABLE Persons
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'
)