SQLServer、MySQL、PostgreSQL自增长列

本文详细介绍了在SQLServer、MySQL及PostgreSQL三种数据库中,如何在创建表时设置列名为自增ID,以及如何在已有表中添加自增ID列的方法。包括SQLServer使用IDENTITY,MySQL使用AUTO_INCREMENT,PostgreSQL使用SERIAL或SEQUENCE的具体实现。

1、SQLServer
创建时

列名 INTEGER IDENTITY(1, 1) 	# 第一个1为开始值,第二个为步长

添加时(先删除要添加自增的列,适合没有添加数据的表)

ALTER TABLE 表名 DROP COLUMN 列名

ALTER TABLE 表名 ADD 列名 INTEGER IDENTITY(1, 1)

添加时(适用于有数据的表)

DECLARE @I INTEGER 

SET @I = 0	# 这里是@i的初始值,不是列的初始值,列要比@i多1

UPDATE TEST SET @I = @I + 1, 列名 = @I	# 注意这里的初始值为0 + 1 = 1

2、MySQL

创建时

列名 INTEGER AUTO_INCREMENT

添加时

ALTER TABLE 表名 MODIFY 列名 INTEGER AUTO_INCREMENT

3、PostgreSQL
创建时

列名 SERIAL	#4字节,默认为整型

添加时

CREATE SEQUENCE AUTO_INCREMENT
START WITH 1	# 初始值
INCREMENT BY 1	# 增加值
NO MINVALUE
NO MAXVALUE
CACHE 1
ALTER TABLE 表名 ALTER COLUMN 列名 SET DEFAULT NEXTVAL('AUTO_INCREMENT')
SQL 中,视图(View)本质上是一个虚拟表,它不存储实际数据,而是基于一个或多个表的查询结果。由于视图不具备物理存储结构,因此不能直接在视图中定义 `AUTO_INCREMENT` 主键字段[^2]。 如果需要在视图中模拟自增主键的效果,可以通过以下方法实现: 1. **使用 `ROW_NUMBER()` 函数(适用于支持窗口函数的数据库系统,如 MySQL 8.0+、PostgreSQLSQL Server 等)** 可以通过在视图的定义中添加一个行号来模拟自增主键。例如: ```sql CREATE VIEW v_with_auto_increment AS SELECT ROW_NUMBER() OVER (ORDER BY some_column) AS id, column1, column2 FROM your_table; ``` 在此示例中,`ROW_NUMBER()` 函数会为每一行生成一个唯一的序号,从而模拟自增主键的效果[^2]。 2. **在视图的基础上创建临时表或物化视图** 如果数据库支持物化视图(Materialized View)或临时表,可以将视图的结果存储到一个带有自增主键的表中。例如: ```sql CREATE TABLE temp_table AS SELECT NULL AS id, -- 自增主键字段 column1, column2 FROM your_table; ALTER TABLE temp_table MODIFY id INT AUTO_INCREMENT; ``` 这样,`temp_table` 表中的 `id` 字段即可作为自增主键使用。 3. **使用数据库特定的扩展功能** 某些数据库系统可能提供特定的扩展功能来支持视图的自增行为。例如,在 MySQL 中,可以通过在视图的基础上创建一个触发器或存储过程来实现类似效果,但这通常较为复杂且性能可能受到影响[^1]。 综上所述,虽然无法在视图中直接定义自增主键,但可以通过模拟行号、创建临时表或使用数据库特定功能来实现类似需求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值