在SQL Server 中有5 种约束:
1)主关键字约束(Primary Key Constraint)
2)外关键字约束(Foreign Key Constraint)
3)惟一性约束(Unique Constraint)
4)检查约束(Check Constraint)
5)非null约束其中主关键字,外关键字,检查约束都可以通过添加CONSTRAINT的方式显式的添加,那么请问,not null和unique这两种约束,是否也可以显式的通过constraint添加呢?
CREATE TABLE StockAdjustment
(VideoCode SmallInt not null,
AdjustmentQty Int,
DateAdjusted DateTime,
WhoAdjust nvarchar(20),
AdjustReason nvarchar(50),
CONSTRAINT Con_VideoCode CHECK (VideoCode BETWEEN 0 AND 99999))
例如以上代码中的VideoCode,是否可以像下面的check那样,通过constraint显式添加呢?
1)主关键字约束(Primary Key Constraint)
2)外关键字约束(Foreign Key Constraint)
3)惟一性约束(Unique Constraint)
4)检查约束(Check Constraint)
5)非null约束其中主关键字,外关键字,检查约束都可以通过添加CONSTRAINT的方式显式的添加,那么请问,not null和unique这两种约束,是否也可以显式的通过constraint添加呢?
CREATE TABLE StockAdjustment
(VideoCode SmallInt not null,
AdjustmentQty Int,
DateAdjusted DateTime,
WhoAdjust nvarchar(20),
AdjustReason nvarchar(50),
CONSTRAINT Con_VideoCode CHECK (VideoCode BETWEEN 0 AND 99999))
例如以上代码中的VideoCode,是否可以像下面的check那样,通过constraint显式添加呢?
但是unique则不行,因为unique可以含有空.而有空,则一般不能做为外键.
(
id int,
testname varchar(50),
sex bit,
class varchar(50),
score float default(0)
constraint pk_test primary key/*这里可以指定是创建聚集或非聚集索引clustered|nonclustered可选项*/(id)
constraint ix_test unique(testname)
constraint ck_test check/*这里可以使用 not for replication可选项,用于指定当从其他表中复制数据时,不检查约束条件*/(score>=0)
)
go
not null 是列级约束,直接写在列定义后面,逗号前面.
create table tb(id int not null,col varchar(10))unique 约束也可以用于列级和表级,添加方式与 Primary key 类似:
列级:
create table tb(id int unique)表级:
create table tb(id int,col nvarchar(10),contraint UQ_tb unique(id,col)表级约束写在列的定义后面,与列定义之间加分隔号,用contraint引导.
create table tb(id int,col nvarchar(10),contraint UQ_tb unique(id,col))