Identity标识列

SQL Server中,经常会用到Identity标识列,这种自增长的字段操作起来的确是比较方便。但它有时还会带来一些麻烦。

 

示例一 :当表中被删除了某些数据的时候,自增长列的编号就不再是一个连线的数列。这种时候我们可以用以下方案来解决。

 

SET IDENTITY_INSERT [TABLE] [ON|OFF]

 

 http://www.cnblogs.com/roucheng/p/GUID.html 

 

允许将显式值插入表的标识列中,当设置为ON时,这时可能在INSERT操作时手工指定插入到标识列中的编号,同时必须在操作完成后,将IDENTITY_INSERT还原成OFF,否则下次插入的时候必须指定编号,那不然就无法完成INSERT操作。

 

示例二:当表中的记录被全部删除,但此时标识列的值越来越大的时候,如果不加以重置,它还会无休止的增长。这个时候我们就要用到:

 

DBCC CHECKIDENT(TABLE, [RESEED|NORESEED], [1])

 

将把指定表的种子值强制重设为1。然而,你可能不想将种子重设为1,在这种情况下,你可以用你想用的种子值替代第三个参数。有时候你可能想知道当前的种子,而不是想重设种子,这时你就要用到NORESEED,而不用再去顾忌第三个参数。

http://www.cnblogs.com/roucheng/p/earth.html

<think>好的,我现在要解决用户的问题:“数据库怎么设置标识列”。首先,我需要明确用户的需求。标识列通常指的是自增列,用于生成唯一的标识符,比如主键。不同的数据库系统设置方法可能不同,所以需要分别说明常见的几种,比如MySQL、SQL Server、Oracle和PostgreSQL。 接下来,我需要回忆每种数据库如何设置自增列。对于MySQL,使用的是AUTO_INCREMENT属性,通常在创建表的候指定。例如,创建表在列定义后面加上AUTO_INCREMENT,并且可能需要设置主键。 SQL Server使用的是IDENTITY属性,语法是IDENTITY(1,1),表示从1开始,每次增加1。同样,创建表的候指定该属性,并且通常作为主键。 Oracle的情况比较复杂,因为在12c之前没有自增列,需要使用序列(SEQUENCE)和触发器(TRIGGER)来实现。12c之后引入了GENERATED BY DEFAULT AS IDENTITY,可以直接在列定义中使用。 PostgreSQL使用SERIAL类型,包括SERIAL、SMALLSERIAL和BIGSERIAL,分别对应不同的整数类型。创建表指定列的类型为SERIAL,会自动创建序列并关联。 然后,我需要考虑用户可能的疑问,比如不同的数据库系统之间的差异,或者是否有其他方法。例如,Oracle的旧版本需要手动创建序列和触发器,而新版本简化了步骤。此外,可能需要提醒用户设置主键,虽然自增列不一定必须是主键,但常见做法如此。 还需要检查是否有语法错误,比如在示例中的SQL语句是否正确,比如MySQL的AUTO_INCREMENT是否正确拼写,SQL Server的IDENTITY参数是否正确。同,确保使用$$...$$格式的独立公式,但在这个问题中可能不需要数学公式,所以可能不需要使用。但如果有示例代码,需要正确格式化,比如用代码块包裹。 另外,用户可能想知道设置标识列的用途,比如用于生成唯一的主键,确保每行有唯一的标识。是否需要解释应用场景?可能简要提一下。 最后,要确保回答结构清晰,分步骤说明每种数据库的设置方法,并给出示例。同,提醒用户注意事项,比如不同数据库的差异,设置主键的建议等。</think>设置数据库标识列(自增列)的步骤如下,不同数据库系统语法略有差异: ### 一、标识列的作用 标识列主要用于自动生成唯一递增的数值,常用于主键字段。特点: 1. 值由系统自动分配 2. 保证唯一性 3. 通常不允许手动修改 ### 二、主流数据库实现方式 #### 1. MySQL ```sql CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, -- 自增列 name VARCHAR(50) ); ``` ⚠️ 注意:需同设置主键约束 #### 2. SQL Server ```sql CREATE TABLE products ( product_id INT IDENTITY(1,1) PRIMARY KEY, -- 从1开始,步长1 product_name VARCHAR(100) ); ``` #### 3. Oracle(12c及以上版本) ```sql CREATE TABLE orders ( order_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, -- 自增列 order_date DATE ); ``` #### 4. PostgreSQL ```sql CREATE TABLE employees ( emp_id SERIAL PRIMARY KEY, -- 自动创建序列 emp_name VARCHAR(50) ); ``` ### 三、特殊场景处理 1. **指定起始值和步长**(以SQL Server为例): ```sql IDENTITY(100,5) -- 从100开始,每次增加5 ``` 2. **修改现有表添加标识列**: ```sql -- SQL Server示例 ALTER TABLE sales ADD sale_id INT IDENTITY(1,1); ``` ### 四、注意事项 1. 不同数据库的底层实现不同: - MySQL使用`AUTO_INCREMENT` - SQL Server使用`IDENTITY` - PostgreSQL使用`SERIAL`(本质是序列+默认值) 2. 插入数据需跳过标识列: ```sql INSERT INTO users (name) VALUES ('张三'); -- 无需指定id ``` 3. 部分数据库(如Oracle 11g及更早版本)需要通过`SEQUENCE`+`TRIGGER`实现自增功能 建议根据具体使用的数据库类型选择合适的实现方式,并测试验证自增逻辑是否符合预期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值