--约束
--主键: prymary key constraint
--唯一: unique constraint
--检查: check constraint
--默认: default constraint
--外键: foreing key constraint

--非空: not null

--主键:

--1.在建表时创建

USE test;

CREATE TABLE [表名]
(
id INT NOT NULL PRIMARY KEY IDENTITY(1,1)
,name VARCHAR(20)
)
--在创建表时创建多列主键
CREATE TABLE [表名]
(
id INT NOT NULL IDENTITY(1,1)
,name VARCHAR(20)
,PRIMARY KEY (id,name)
)
--在创建好表之后创建主键
ALTER TABLE [表名] add constraint PK_表名id primary key(id);
--删除主键:
ALTER TABLE [表名] drop constraint PK
表名_id;

--主键名命名规范:以:PK_表名_列名
--语法格式:ALTER TABLE [表名] add constraint 主键名 primary key (列名);

--唯一约束:unique
CREATE TABLE [表名]
(
id INT NOT NULL PRIMARY KEY IDENTITY(1,1)
,name VARCHAR(20) unique --建表的时候创建唯一约束
)
--在建表时另起一行来创建唯一约束(没什么优点,可以不学)
--CREATE TABLE [表名]
--(
-- id INT NOT NULL PRIMARY KEY IDENTITY(1,1)
-- ,name VARCHAR(20)
-- ,constraint UQ_表名name unique(name)
--)
--在表存在的情况下创建唯一约束
alter table [表名] add constraint UQ
表名name unique (name);
--语法:alter table [表名] add constraint 约束名 unique (列名);
--唯一约束命名规范:UQ
表名_列名
--删除语法:
--alter table [表名] drop constraint 约束名;

--检查约束 check
CREATE TABLE [表名]
(
id INT NOT NULL PRIMARY KEY IDENTITY(1,1) --主键
,name VARCHAR(20) unique --建表的时候创建唯一约束
,age int check(age between 0 and 208) --检查约束
)
--在已存在的表中创建检查约束
alter table [表名] add constraint CK_表名age check (age between 0 and 208);
--删除
alter table [表名] drop constraint CK
表名age;
--语法:alter table [表名] add constraint 约束名 check (列名与条件);
--唯一约束命名规范:CK
表名_列名
--删除语法:
--alter table [表名] drop constraint 约束名;

--外键 (外键之前要创建一个表)

create table [班级表]
(
id int not null primary key
,name varchar(20)
)
CREATE TABLE [表名]
(
id INT NOT NULL PRIMARY KEY IDENTITY(1,1) --主键
,name VARCHAR(20) unique --建表的时候创建唯一约束
,age int check(age between 0 and 208) default 0 --检查约束
,classid int REFERENCES 班级表(id) --外键约束
)
--在一个已存在的表中创建外键
alter table [表名]
add constraint FK_表名classid foreign key (classid) references 班级表 (id);
--删除外键
alter table [表名] drop constraint FK
表名classid;
--唯一约束命名规范:FK
表名_列名

--默认值