Oracle数据库中创建自增主键的实例教程_oracle

在设计数据库表的时候发现Oracle没有自增主键的设置,Google了解到Oracle本身并不支持自增主键,需要通过序列(Sequence)和触发器(Trigger)实现。
创建表Student

Create Table Student(
 id number(12) primary key, --通过序列和触发器实现id的自增
 name varchar2(20) ,
 age number(3) ,
 sex number(1)
) 

创建序列Sequence

Create Sequence SEQ_STUDENT
minvalue 1
maxvalue 99999999999999999999
start with 1   --从1开始
increment by 1 --增量为1
cache 0
order; 

创建触发器Trigger

Create or Replace Trigger STUDENT_AUTOINCREMENT
Before Insert on Student
For Each Row
When (NEW.ID IS NULL)
Begin
Select SEQ_STUDENT.NEXTVAL INTO :NEW.ID FROM DUAL;
End; 

注意点:

1:一个sequence可以被多个表共享。

2:被多个表共享的sequence生成的数字序列始终连续,不会重新开始。

3:如果不再使用的sequence请删除。

SELECT * FROM DAYSBFJ.DAYS_CARD_UPDATE3 order by id asc
--alter table DAYSBFJ.DAYS_CARD_UPDATE3 add source_Flag varchar2(2);
--create sequence DAYS_CARD_UPDATE2_SEQ_ID minvalue 1 maxvalue 999999999 start with 1;
--Update DAYSBFJ.DAYS_CARD_UPDATE2 set id = DAYS_CARD_UPDATE2_SEQ_ID.nextval;
--update DAYSBFJ.DAYS_CARD_UPDATE3 set SOURCE_FLAG = '2'

另一个例子:

新建一个缺少主键的表

create table test1(name1 varchar2(40),city varchar2(40));

--插入数据

insert into test1 values('name1','nanjing');
insert into test1 values('name1','nanjing');
insert into test1 values('name2','nanjing1');
insert into test1 values('name3','nanjing2');
insert into test1 values('name4','nanjing3');
insert into test1 values('name5','nanjing4');
insert into test1 values('name6','nanjing5');
insert into test1 values('name7','nanjing6');
insert into test1 values('name8','nanjing7');
insert into test1 values('name9','nanjing8');
insert into test1 values('name10','nanjing9');
insert into test1 values('name10','nanjing9');
insert into test1 values('name12','nanjing11');
insert into test1 values('name13','nanjing12');
insert into test1 values('name14','nanjing13');
commit;

--增加主键ID

alter table TEST1 add id number(10);

--设置sequence使ID自增

create sequence SEQ_ID
 minvalue 1
 maxvalue 999999999
 start with 1;

--将id的值设置为sequence

Update test1 set id=seq_id.nextval;
commit;

--设置id为主键

alter table TEST1
 add constraint PK_TEST1 primary key (ID);

select ID,Name1,CITY from TEST1;

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索oracle
, 主键
自增
oracle数据库主键自增、数据库主键自增、mysql数据库主键自增、数据库设置主键自增、数据库主键自增语句,以便于您获取更多的相关知识。

时间: 2024-10-30 00:32:50

Oracle数据库中创建自增主键的实例教程_oracle的相关文章

在oracle数据库里创建自增ID字段的步骤_oracle

在oracle里使用自增ID字段的步骤比较繁琐,总结如下: -- 创建表 CREATE TABLE ADVICE ( ID INT NOT NULL, ACTIVE INT DEFAULT 1 NOT NULL, TYPE INT NOT NULL, MSG VARCHAR2(512) NOT NULL, ADVICE VARCHAR2(4000) NOT NULL, PRIMARY KEY(ID), CONSTRAINT ADVICE_UNI UNIQUE(TYPE,MSG) )TABLESP

Oracle 数据库中创建合理的数据库索引_oracle

笔者认为,在创建索引时要做到三个适当,即在适当的表上.适当的列上创建适当数量的索引.虽然这可以通过一句话来概括优化的索引的基本准则,但是要做到这一点的话,需要数据库管理员做出很大的努力.具体的来说,要做到这个三个适当有如下几个要求. 一. 根据表的大小来创建索引. 虽然给表创建索引,可以提高查询的效率.但是数据库管理员需要注意的是,索引也需要一定的开销的.为此并不是说给所有的表都创建索引,那么就可以提高数据库的性能.这个认识是错误的.恰恰相反,如果不管三七二十一,给所有的表都创建了索引,那么其反

在Oracle数据库中同时更新两张表的简单方法_oracle

以前只会写一些简单的updaet语句,比如updae table set c1='XXX' 之类的 今天遇到一个数据订正的问题,项目背景如下,有个表A,有两个字段a1,a2还有一个关联表B,其中也有两个字段,b1和b2.其中a2和b2是关联的,想把A中的字段a1更新成B中的b1 理论上sql应该挺好写的,但是在oralce中实现了半天一直报语法错误.而且确实还有些小小细节没有注意到. 首先上测试数据 表1,ZZ_TEST1 表2,ZZ_TEST2 要把表一的text更新成表二的text1值,对应

oracle数据库如何创建自增列的技巧教程

Oracle没有自增字段这样的功能,但是通过触发器(trigger)和序列(sequence)可以实现. 先建一个测试表了: create table userlogin (      id   number(6) not null,      name   varchar2(30)   not null primary key ) tablespace users /   第一步:创建SEQUENCE create sequence userlogin_seq increment by 1 s

Mysql自增主键ID重新排序方法详解

Mysql数据库表的自增主键ID号乱了,需要重新排列. 原理:删除原有的自增ID,重新建立新的自增ID. 1,删除原有主键:  代码如下 复制代码 ALTER TABLE `table_name` DROP `id`; 2,添加新主键字段:  代码如下 复制代码 ALTER TABLE `table_name` ADD `id` MEDIUMINT( 8 ) NOT NULL FIRST; 3,设置新主键:  代码如下 复制代码 ALTER TABLE `table_name` MODIFY C

主键自增-数据库如何实现某主键以另一自增主键id为前缀自增

问题描述 数据库如何实现某主键以另一自增主键id为前缀自增 比如说,建立比赛和队伍两个表,想让队伍id在这个队伍参加的比赛的id前实现自增.有什么办法?顺便问一下,数据库操作入门有什么好的推荐吗?只掌握基础的增删改查-T-T希望大家帮我一下,谢谢大家 解决方案 你查询的时候, select (队伍id + 比赛id) as 编号 from 表 解决方案二: 如果这样,没有必要写在数据库中,增加数据冗余,只要查询的时候拼接就可以了. 解决方案三: 关于资料,自己google下有很多,关键是没有说你

数据库自增主键可能产生的问题

在MySQL中经常会配置自增长属性的字段作为主键,特别是使用InnoDB存储引擎, 因为InnoDB的聚集索引的特性,使用自增长属性的字段当主键性能更好,但是使用自增主键也可能会带来一些问题. 举个例子,使用自增主键对数据库做分库分表,可能出现一些诸如主键重复等的问题,或者在数据库导入的时候,可能会因为主键出现一些问题. 主要业务表的主键应该配置一个合理的策略,尽量避免自增AUTO_INCREMENT. 针对主键自增可能产生的问题,下面这两篇文章有相关的讨论: INNODB自增主键的一些问题my

SQLite3中自增主键相关知识总结_SQLite

一.SQLite清空表并将自增列归零 SQL标准中有TRUNCATE TABLE语句,用来清空表的所有内容.但SQLite不支持这个语句.在SQLite中直接使用 DELETE FROM TableName 就可以了.对于大多数DBMS来说,用DELETE不如用TRUNCATE 速度快,因为TRUNCATE 不用访问整个表,不用记录数据的变动. SQLite虽然不支持TRUNCATE,但它对DELETE做了优化:通常在清空表的时候,还需要把自增列归零.在SQLite中定义自增列的方法如下: 复制

MyBatis中insert操作返回主键的实现方法_java

在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:如果业务层需要得到记录的主键时,可以通过配置的方式来完成这个功能 针对Sequence主键而言,在执行insert sql前必须指定一个主键值给要插入的记录,如Oracle.DB2,可以采用如下配置方式: <insert id="add" parameterType="vo.Category"> <selectKey resultType="