Mysql 标识列

标识列又称为自增长列

含义:可以不用手动的插入值,系统提供默认的序列值

特点:

  • 可以不和主键搭配,但要求是一个key(unique)
  • 一个表中至多有1个标识列
  • 标识列的类型只能是数值型
  • 标识列可以通过 set_increment_increment = 3;设置步长,也可以通过手动插入值,设置初始值
  • 用delete清空表会标识列的当前序列,而truncate则不会

一、创建表时设置标识列

create table tab_identity(
        id int primary key auto_increment,
        name varchar(20)
)

insert into tab_identity values(NULL,'hee')
insert into tab_identity values(NULL,'wee')

使用auto_increment关键字使id自增长,在insert时为了符合insert 语法所以要在id处设置一个NULL。插入时并不会插入NULL,而是自动从1开始增长。不想加NULL的话,可以使用下列语法

insert into tab_identity(NAME) values('qee')

 

可以设置增长量

使用下列语句可以查看关于auto_increment有关的变量

show variables like '%auto_increment%';

可以看到有两个变量

上面那个是每次增长的量,下面那个是起始值,在mysql里这个起始值是设置不了的

只能设置增长量,可以用set来设置增长量

set auto_increment_increment =5;#每次增长5个

如果想改变初始值,可以在第一次插入的时候,指定起始值

insert into tab_increment values(10,'hhh'); #从10开始

二、修改表时设置标识列

alter table tab_identity modify id int primary key auto_increment

三、修改表时删除标识列

alter table tab_identity modify id int;

 

<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`实现自增功能 建议根据具体使用的数据库类型选择合适的实现方式,并测试验证自增逻辑是否符合预期。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值