上一篇
场景引入:
凌晨3点,你盯着屏幕里报错的ORA-00001: 违反唯一约束条件
,第N次手动计算ID值…💢 其实Oracle早备好了「自增武器库」!今天就用最白话的方式,带你玩转Oracle自增ID~
-- 创建自增序列(2025年最新语法兼容) CREATE SEQUENCE user_id_seq START WITH 1001 -- 起始值 INCREMENT BY 1 -- 步长 NOCACHE -- 防止断号(生产环境建议) NOCYCLE; -- 不循环 -- 使用时直接调用 INSERT INTO users VALUES(user_id_seq.NEXTVAL, '张三');
💡 特点:
.NEXTVAL
-- 创建序列(同上) CREATE SEQUENCE order_id_seq START WITH 5001; -- 创建触发器自动填充 CREATE OR REPLACE TRIGGER trg_auto_id BEFORE INSERT ON orders FOR EACH ROW BEGIN SELECT order_id_seq.NEXTVAL INTO :new.id FROM dual; END;
🚀 优势:
-- 建表时直接声明(Oracle 12c及以上) CREATE TABLE products ( id NUMBER GENERATED ALWAYS AS IDENTITY, -- 强制自增 name VARCHAR2(50) ); -- 插入时无需指定ID INSERT INTO products(name) VALUES('智能手表');
⚠️ 注意:
-- 使用CACHE加速(评估业务容忍断号风险) CREATE SEQUENCE log_seq CACHE 100;
-- 不删重建的情况下重置(2025年仍适用) ALTER SEQUENCE user_seq INCREMENT BY -123; SELECT user_seq.NEXTVAL FROM dual; -- 消耗当前值 ALTER SEQUENCE user_seq INCREMENT BY 1;
-- 添加机器标识位(原始但有效) CREATE SEQUENCE global_id_seq START WITH 1 INCREMENT BY 10 -- 每台机器设置不同步长 MAXVALUE 9999;
方案 | 10万次插入耗时 | 适用场景 |
---|---|---|
纯序列 | 2秒 | 需要灵活控制的OLTP |
序列+触发器 | 8秒 | 传统系统改造 |
IDENTITY列 | 5秒 | 新项目开发 |
下次再遇到ID问题,记得Oracle这三大法宝! 🛠️ 如有其他坑点,欢迎评论区交流~
本文由 鲍寻双 于2025-07-31发表在【云服务器提供商】,文中图片由(鲍寻双)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/497171.html
发表评论