oracle数据库主键问题-小白上路
程序员文章站
2022-03-03 20:02:25
...
1. 主键问题
mysql可以通过auto_increment 设置自增,但是oracle需要通过序列、触发器来实现。
1.1 MySQL
CREATE TABLE `DEPENDENCY_LOG` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userid` varchar(255) DEFAULT NULL COMMENT '操作者id',
`modulename` varchar(255) NOT NULL COMMENT '依赖名称',
`version` varchar(255) DEFAULT NULL COMMENT '版本号',
`type` varchar(255) DEFAULT NULL COMMENT '操作类型,删除,添加,更新',
`details` varchar(255) DEFAULT NULL COMMENT '详情',
`status` int(1) DEFAULT NULL COMMENT '修改状态(1成功 0失败)',
`time` datetime DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=98 DEFAULT CHARSET=utf8
1.2 Oracle
CREATE TABLE "ABX01"."DEPENDENCY_LOG" (
"ID" NUMBER(11,0) DEFAULT 1 NOT NULL,
"USERNAME" NVARCHAR2(255),
"MODULENAME" NVARCHAR2(255) NOT NULL,
"VERSION" NVARCHAR2(255),
"TYPE" NVARCHAR2(255),
"DETAILS" NVARCHAR2(255),
"STATUS" NUMBER(11,0),
"TIME" DATE
)
2. 如何解决
2.1 设置序列
CREATE SEQUENCE sq_log
INCREMENT BY 1 -- 每次加几个
START WITH 0 -- 迁移过来的,已经有记录了
MINVALUE 1 --最小值1
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
NOCACHE -- 不建缓冲区
2.2 设置触发器
CREATE OR REPLACE TRIGGER tri_log
BEFORE INSERT ON "DEPENDENCY_LOG" --表名
FOR EACH ROW
BEGIN
SELECT sq_log.nextval into :new.自增的ID from dual;
END tri_log;
建立序列和触发器,在表中设置id自动增长,一般一个用一个序列,如果多个表公用一个,那么id会分布到各个表中.
上一篇: Linux 下route命令详解
下一篇: Linux route命令详解