TSQL建主键索引语句 / 外键

1. 创建表
   create table Student(StudentOID varchar(50), Age integer)
  //表是可以没有主键的

2. 创建表时指定主键
   create table MyCustomer (CustomerID int Identity(100,1) Primary Key,CompanyName nvarchar(50))
   //设置主键后,在控制台上"Keys","Indexs"节点下,默认出现一个Item,名称又系统自动生成。也就是说,主键自动对应一个聚簇索引
   //主键是一种特殊的约束,但是在"Constraint"节点下是无法看到主键Item的

3.  删除主键索引
   drop index MyCustomer.PK__MyCustomer__014935CB  //失败,因为Index Object正在使用它
   alter table MyCustomer drop Constraint PK__MyCustomer__014935CB //成功,主键被全部删除,但是主键列还是存在的

4. 对某存在的列,指定其为主键
    alter table MyCustomer ADD CONSTRAINT
 PK_MyCustomer PRIMARY KEY CLUSTERED
 (
 OID
 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

5. 在某个列上添加Unique约束
    alter table MyCustomer add CompanyOwnerName nvarchar(10) Constraint Unq_CompanyOwnerName Unique
  //类似于主键,在控制台上"Keys","Indexs"节点下,默认出现一个Item,Unique约束自动创建一个非聚簇索引
  //删除时,类似于删除主键所以操作

6. 为某列添加Default约束
  alter table MyCustomer add Constraint Def_CustomerAddress default 'Shanghai' for CustomerAddress
 //在"Constraint"节点下,出现一个Item,该约束一个列只能有一个

7. 为某列添加Check约束
  alter table MyCustomer add Constraint Chk_AddressValue check(CustomerAddress!='ssfd')
 //在"Constraint"节点下,出现一个Item

8. 删除约束
  alter table MyCustomer drop Constraint PL_OID

9. 删除列
  alter table MyCustomer drop column CustomerAddress
  //必须保证没有其他对象,如该列上的约束存在,否则操作失败

10.修改列的定义
  alter table MyCustomer alter column CustomerAddress nvarchar(500) null
 //如果列数据类型改变了,而且有这个列上的约束有冲突,那么修改失败

11.Check约束和Default约束都可以改名,但是后者的改名需要Refresh才可以在UI上看得到

12. select * from sys.default_constraints  //查看所有Default约束
select * from sys.key_constraints       //查看所有Primary Key, Unique约束

13. exec sp_helpconstraint MyCustomer
exec sp_helpindex  MyCustomer
exec sp_help  MyCustomer    //查看表范围内的约束,索引,表信息

14.

ALTER TABLE 表名 ADD CONSTRAINT fk_表名_外鍵到的表名
FOREIGN KEY (列名)
REFERENCES 外鍵到的表名(列名);

原文地址:https://www.cnblogs.com/jes_shaw/p/1929416.html