gpt4 book ai didi

Sql Server 创建表查询

转载 作者:行者123 更新时间:2023-12-04 14:02:56 24 4
gpt4 key购买 nike

我正在使用 Sql Server 迁移助手将我的数据库从 MySql 迁移到 SQL Server,并在学习 Sql Server 的过程中。

以下是自动生成架构的创建表语法。

CREATE TABLE [dbo].[TABLE1] (
[COLUMN1] BIGINT IDENTITY (131556, 1) NOT NULL,
[COLUMN2] INT CONSTRAINT [DF__TABLE_1__PRD_I__24E777C3] DEFAULT ((0)) NULL,
[COLUMN3] INT CONSTRAINT [DF__TABLE1__PROMO__2AA05119] DEFAULT ((0)) NULL,
CONSTRAINT [PK_TABLE1] PRIMARY KEY CLUSTERED ([COLUMN1] ASC)
);

GO
CREATE NONCLUSTERED INDEX [COLUMN3]
ON [dbo].[TABLE1]([COLUMN3] ASC);

GO
EXECUTE sp_addextendedproperty @name = N'MS_SSMA_SOURCE', @value = N'TABLE1',
@level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE',
@level1name = N'TABLE1';

我正在尝试理解和清理架构。有人可以帮助解决以下(幼稚的)问题吗?
  • 为什么要将主键 (COLUMN1) 指定为 PRIMARY KEY CLUSTERED ?
  • 在原来的MySql表中,COLUMN3索引。 NONCLUSTERED INDEX 是否等同于 Sql Server?的意义是什么

    创建非聚类索引 [第 3 列]
    ON [dbo].[TABLE1]([COLUMN3] ASC);
  • 我不明白以下内容:

    EXECUTE sp_addextendedproperty @name = N'MS_SSMA_SOURCE', @value = N'TABLE1',
    @level0type = N'SCHEMA',@level0name = N'dbo',@level1type = N'TABLE',
    @level1name = N'TABLE1';

    有人可以解释它的作用吗?
  • 上面的创建表语法是实现其功能的最小语法吗?
  • 我的 MySql 表中有 131555 行。我应该指定 IDENTITY (131556, 1)迁移数据后,从 131556 开始自动递增 key ?
  • 最佳答案

    1.Why should the primary key (COLUMN1) specified as a "PRIMARY KEY CLUSTERED"?



    通常最好每个SQL Server表都有一个聚集索引,每个表只允许一个聚集索引,因为聚集索引的b-tree叶子节点是实际的数据页。支持主键的索引通常是最佳候选者,但如果这对您的特定情况有利,您可以使 PK 非聚集并具有与聚集索引不同的索引。例如,如果您的查询最常在 COLUMN3 上进行范围搜索,而不是按 COLUMN1 选择或连接的查询,那么 COLUMN3 索引和 NONCLUSTERED 主键可能是更好的选择。

    2.In the original MySql table, COLUMN3 indexed. Is NONCLUSTERED INDEX the equivalent for Sql Server? What is the meaning of



    非聚集索引也是 b 树索引,允许通过索引键比表扫描更有效地定位行。

    3.I did not understand the following:

    EXECUTE sp_addextendedproperty @name = N'MS_SSMA_SOURCE', @value = N'TABLE1', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'TABLE1';

    Can someone explain what it does?



    SQL Server 具有扩展属性功能,允许您将元数据附加到数据库对象。在这种情况下,SSMA 添加了一个扩展属性来指示该表是由该工具创建的。

    4.Is the above create table syntax the minimal syntax to achieve what it does?



    不可以。例如,可以省略约束名称,SQL Server 会自动生成一个名称。但是,最佳实践是明确命名约束以促进后续的 DDL 更改,并且目的是自我记录。就个人而言,我会将默认约束命名为 DF_TABLENAME_COLUMNNAME。

    5.I have 131555 rows in my MySql table. Should I be specifying IDENTITY (131556, 1) to start auto increment of key from 131556 after I migrate data?



    如果您使用 IDENTITY(1,1) 创建表,然后使用 IDENTITY INSERT ON 选项插入行,SQL Server 将自动调整下一个 IDENTITY根据插入的最高值。我对 SSMA 了解不多,但看起来 SSMA 已经为您做到了。

    关于Sql Server 创建表查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27517439/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com