`
ljl_xyf
  • 浏览: 634428 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sql 自动增长的主键

 
阅读更多

问:SQL Server 2005中设计表时和在SQL Server Management Studio Express中如何得到自动编号字段?

答:具体步骤如下:

①像Access中的自动编号字段

右键你的表-->设计表-->找到你的id字段(类int型)-->标识-->是-->标识种子(初始值)-->标识递增量-->OK

②用IDENTITY (SEED,INCREMENT)参数

seed -启始值

increment -增量

CREATE TABLE 表名(

你的ID IDENTITY (1, 1) NOT NULL ,你的其他字段... )

CREATE TABLE 表名(

你的字段ID AUTOINCREMENT(1000,10),其他字段... )

③修改起始值和步进值

ALTER TABLE 表名 ALTER COLUMN 你的字段ID COUNTER(2000,50)

④让一个删空的表自动增加字段的开始值重新从1开始

ALTER TABLE 表名 ALTER COLUMN 你的字段ID COUNTER(1,1)

上述3 4只适用与Access,COUNTER为其一种数据类型,可以在Access中指定一不是自动编号的字段为自动编号字段,也可以让一自动编号字段重新从 指定值按指定步长自动编号。但是如果表中有数据,用户不能用该语句来将该列的数据类型改变为COUNTER 数据类型。对于SQL Server并不支持。

对于SQL Server我们或许总希望用Alter Table 表名 Alter Column 你的字段 IDENTITY(1,1)

来指定字段重新从1开始计数,但是这句话本身是错误的,好长时间我也疑惑为什么这句话不能执行。如果我们看看MS 对Alter Table语句的定义就清楚了,这句话根本是错误的。下面是MS对Alter Table语句的定义。

 

ALTER TABLE table 
{ [ ALTER COLUMN column_name 
    { new_data_type [ ( precision [ , scale ] ) ]
        [ COLLATE < collation_name > ]
        [ NULL | NOT NULL ]
        | {ADD | DROP } ROWGUIDCOL }
    ] 
    | ADD
        { [ < column_definition > ]
        | column_name AS computed_column_expression
        } [ ,n ]
    | [ WITH CHECK | WITH NOCHECK ] ADD
        { < table_constraint > } [ ,n ] 
    | DROP
        { [ CONSTRAINT ] constraint_name 
            | COLUMN column } [ ,n ] 
    | { CHECK | NOCHECK } CONSTRAINT
        { ALL | constraint_name [ ,n ] }
    | { ENABLE | DISABLE } TRIGGER
        { ALL | trigger_name [ ,n ] } 
}
< column_definition > ::=
    { column_name data_type }
    [ [ DEFAULT constant_expression ] [ WITH VALUES ]
    | [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ]
        ] 
    [ ROWGUIDCOL ]
    [ COLLATE < collation_name > ]
    [ < column_constraint > ] [ n ]
< column_constraint > ::=
    [ CONSTRAINT constraint_name ]
    { [ NULL | NOT NULL ]
        | [ { PRIMARY KEY | UNIQUE }
            [ CLUSTERED | NONCLUSTERED ]
            [ WITH FILLFACTOR = fillfactor ]
            [ ON { filegroup | DEFAULT } ]
            ] 
        | [ [ FOREIGN KEY ]
            REFERENCES ref_table [ ( ref_column ) ]
            [ ON DELETE { CASCADE | NO ACTION } ]
            [ ON UPDATE { CASCADE | NO ACTION } ]
            [ NOT FOR REPLICATION ]
            ] 
        | CHECK [ NOT FOR REPLICATION ]
            ( logical_expression ) 
    }
< table_constraint > ::=
    [ CONSTRAINT constraint_name ]
    { [ { PRIMARY KEY | UNIQUE }
        [ CLUSTERED | NONCLUSTERED ]
        { ( column [ ,n ] ) } 
        [ WITH FILLFACTOR = fillfactor ]
        [ ON { filegroup | DEFAULT } ]
        ] 
        |    FOREIGN KEY
            [ ( column [ ,n ] ) ]
            REFERENCES ref_table [ ( ref_column [ ,n ] ) ]
            [ ON DELETE { CASCADE | NO ACTION } ]
            [ ON UPDATE { CASCADE | NO ACTION } ]
            [ NOT FOR REPLICATION ]
        | DEFAULT constant_expression
            [ FOR column ] [ WITH VALUES ]
        |    CHECK [ NOT FOR REPLICATION ]
            ( search_conditions ) 
    }

 

可以看到,IDENTITY只是在< column_definition >中,也就是说,我们可以这样使用

Alter Table 表名 Add 字段名 Int IDENTITY(1,1)

即,我们可以增加一个字段并指定它为自动编号字段。但是不能更改一个字段为自动编号字段(也或许我没找到方法)。即,如果我们想给表增加自动编号字段,只能使用添加字段的方法,而不能更改一个已有的字段为自动编号字段。

至于如果需要更改自动编号字段计数起始值可以使用DBCC命令:

DBCC CHECKIDENT (表名,RESEED,100)

自动编号字段下一个从101开始计。

 

 

分享到:
评论

相关推荐

    sqlserver自动增长字段设置方法.rar

    在SQL Server数据库管理系统中,自动增长(Identity)字段是一个非常重要的特性,主要用于为表中的记录生成唯一的标识符,通常作为主键使用。本教程将详细解释如何在SQL Server中设置和管理自动增长字段。 首先,...

    oracle主键自动增长

    ### Oracle主键自动增长知识点详解 #### 一、Oracle序列(Sequence)的使用方法 在Oracle数据库中,并没有像MySQL那样的自动增长字段特性,因此在实际应用中,我们常常需要手动实现这一功能。序列(Sequence)是...

    oracle设置主键自动增长

    ### Oracle 设置主键自动增长详解 #### 一、概述 在数据库设计中,为了方便管理和维护数据表,经常需要为主键设置自动增长的功能。Oracle 数据库提供了强大的工具和语法支持来实现这一需求。本文主要介绍如何在 ...

    SQL Server设置主键自增长列(使用sql语句实现)

    当创建新表时,你可以直接定义一个字段为`identity`类型,这会使其成为主键并自动增长。以下示例创建了一个名为`tb`的表,其中`id`字段是主键,并且设置自增长起始值为1,每次增加1: ```sql CREATE TABLE tb ( ...

    Oracle数据库创建表tuser设置主键自动增长

    在Oracle数据库中,创建一张包含自动增长主键的表是一项常见的需求。本文将详细介绍如何在Oracle环境中创建一个名为`tuser`的表,并实现其主键自动增长的功能。此外,还将介绍如何通过序列(sequence)来管理这个自动...

    oracle触发器实现主键自动增长

    在Oracle数据库中,实现主键自动增长是一种常见的需求,尤其在设计高并发、大数据量的系统时,确保每个记录都有一个唯一且连续的标识符变得至关重要。本文将深入探讨如何利用Oracle触发器来实现这一功能,同时也会...

    sql主键产生器

    例如,在大量并发插入的情况下,自动增长主键可能会成为性能瓶颈,因为每次插入都需要获取下一个主键值,可能导致锁竞争。此时,预生成一批主键或者使用UUID可能是更好的选择。 此外,对于分布式系统,全局唯一性的...

    powerdesigner创建oracle_数据库表,设置表主键列为自动增长

    #### 三、创建表及设置自动增长主键 **步骤1:创建表** 1. 打开PowerDesigner 12.5。 2. 在项目管理界面选择一个现有的或新建一个物理数据模型(PDM)项目。 3. 在物理数据模型中,通过“Table”工具绘制一个新的表...

    深入Mysql,SqlServer,Oracle主键自动增长的设置详解

    2. 删除具有自动增长主键的记录后,通常无法直接插入已跳过的主键值,除非你禁用了自动增长特性。 3. 在SQL Server中,`IDENTITY_INSERT`的开关允许在特定情况下插入特定的主键值,但应谨慎使用,因为它可能破坏数据...

    oracle设置主外键即主键序列自动增长

    ### Oracle 设置主外键及主键序列自动增长 在Oracle数据库管理系统中,为了确保数据的一致性和完整性,经常需要设置主键(Primary Key)和外键(Foreign Key)。此外,为了方便管理和操作,通常还会使用序列...

    oracle 自增长主键.doc

    Oracle数据库系统中,自增长主键是一种常见的设计模式,用于创建具有自动递增的唯一标识符。在Oracle中,我们通常使用序列(Sequence)来实现这个功能,而不是像其他数据库系统那样使用内置的自增机制。以下是对...

    小议sqlserver数据库主键选取策略

    自动增长字段是最常用的一种主键策略,尤其是在SQL Server中。这种类型的字段在插入新记录时由数据库系统自动分配唯一的值,避免了手动设置主键的困扰。例如,SQL Server提供了Identity特性,可以在插入数据时不指定...

    hibernate中自动生成主键的办法

    综上所述,Hibernate提供了丰富的主键生成策略,涵盖了从简单的自动增长到复杂的分布式唯一ID生成。开发者应根据具体的应用需求和数据库特性,选择最合适的主键生成策略,以确保系统的稳定性和性能。无论是追求高...

    sql语句查询数据库中的表名/列名/主键/自动增长值实例

    在SQL语言中,查询数据库中的元数据,如表名、列名、主键以及自动增长值,是数据库管理员和开发人员日常工作中常见的任务。以下是一些具体的SQL查询语句实例,用于获取这些信息: 1. **查询用户创建的表**: ```...

    SQL Server 打开或关闭自增长

    在SQL Server中,自增长(IDENTITY)列是一种特殊类型的字段,它会在每次插入新行时自动为该列提供一个唯一的、递增的值。这种功能对于创建序列化的主键非常有用,因为它们确保了数据的唯一性。然而,有时在特定情况...

    oracle序列主键自增长

    为了实现主键自动增长,Oracle提供了序列(Sequences)这一特性,它能按照预设的规则(通常是递增)生成唯一的整数。本文将深入探讨Oracle序列主键自增长的工作原理、创建方法以及如何在表中应用。 **1. Oracle序列...

    编号自动增长

    ##### SQL自动增长编号的理解与实现 在数据库设计中,为了方便管理记录以及确保唯一性,常常需要为每一条新记录分配一个唯一的编号。对于某些场景,比如订单号、流水号等,我们希望这个编号能够连续且递增。本篇...

Global site tag (gtag.js) - Google Analytics