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的方式如下:
- 使用序列(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;
}

1万+

被折叠的 条评论
为什么被折叠?



