各种数据库中Id自增的处理

MySQL
ALTER TABLE your_table MODIFY id BIGINT AUTO_INCREMENT;
SQL Server
ALTER TABLE your_table ADD CONSTRAINT PK_YourTable PRIMARY KEY (id);
ALTER TABLE your_table MODIFY id BIGINT IDENTITY(1,1);
pg
ALTER TABLE your_table ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY;

Oracle数据库设置自增ID的方式如下:

  1. 使用序列(Sequence)+ 触发器(推荐传统方式)
    – 创建序列
    CREATE SEQUENCE your_table_seq
    START WITH 1
    INCREMENT BY 1
    NOCACHE;

– 创建触发器
CREATE OR REPLACE TRIGGER tr_your_table_id
BEFORE INSERT ON your_table
FOR EACH ROW
BEGIN
IF :NEW.id IS NULL THEN
SELECT your_table_seq.NEXTVAL INTO :NEW.id FROM DUAL;
END IF;
END;
Oracle 12c及以上版本推荐使用 IDENTITY 列
– 创建表时直接指定
CREATE TABLE your_table (
id NUMBER GENERATED ALWAYS AS IDENTITY,
name VARCHAR2(100)
);

– 或者修改现有表
ALTER TABLE your_table
MODIFY id NUMBER GENERATED ALWAYS AS IDENTITY;

通用的 不建议初学者使用, 应对复杂自增逻辑及Id序列化

-- 创建一个序列表
CREATE TABLE id_sequence (
    prefix VARCHAR(20),  -- 存储时间戳前缀
    current_seq BIGINT,   -- 当前序列号
    updated_at TIMESTAMP
);

-- 获取新ID的逻辑
SELECT CONCAT(
    DATE_FORMAT(NOW(), '%Y%m%d%H%i%s'),  -- 时间戳部分
    LPAD(IFNULL(MAX(current_seq), 0) + 1, 6, '0')  -- 序列号部分
) AS new_id FROM id_sequence;

// Java示例
public String generateId() {
    String timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
    String sequence = String.format("%06d", getNextSequence()); // 6位序列号
    return timestamp + sequence;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值