首页 > 解决方案 > “ON [PRIMARY]”和“WITH”语句在SQL Serer中创建表和约束的作用是什么?

问题描述

这两种制作表格和约束的方式有什么区别?

1.

CREATE TABLE [myDB].[dbo].[myTable]
(
[ID] [int] NOT NULL,
[Name] [Varchar] (50) NOT NULL,
CONSTRAINT [PK_myTable] PRIMARY KEY CLUSTERED ([ID] DESC ) WITH ( IGNORE_DUP_KEY = ON) ON [PRIMARY],
UNIQUE ([Name]) WITH ( IGNORE_DUP_KEY = ON) 
) ON [PRIMARY] 
CREATE TABLE [myDB].[dbo].[myTable]
(
[ID] [int] NOT NULL,
[Name] [Varchar] (50) NOT NULL,
PRIMARY KEY ([ID] DESC ),
UNIQUE ([Name])
WITH ( IGNORE_DUP_KEY = ON) 
) 

在第二种形式中,省略了“CONSTRAINT [PK_myTable]”。它只影响约束的自动名称选择吗?“CONSTRAINT”这个词有必要吗?此外,省略了两个“ON [PRIMARY]”。我认为这会改变保存表格和约束的位置。如果你不写任何“ON...”或只写其中一个会发生什么?同样在后一个中,“WITH”语句只声明了一次。它适用于这两种约束吗?或者他们每个人都必须有自己的“WITH”声明?你能告诉我这两种创建表格的方法的所有实际区别吗?

标签: sqlsql-server

解决方案


默认情况下,创建数据库时会创建PRIMARY文件组,并且所有表都存储在该文件组中。

默认情况下PRIMARY KEY不添加,您应该显式设置此约束。

因此,当您创建如下查询时:

CREATE TABLE MyTable
(
    Id int NOT NULL,
    Name varchar (50) NOT NULL
);

这在后面自动转换:

CREATE TABLE MyTable
(
    Id int NOT NULL,
    Name varchar (50) NOT NULL
) ON [PRIMARY];

推荐阅读