• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >oracle > Oracle数据库中创建自增主键的实例教程

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

作者:炫影魔心 字体:[增加 减小] 来源:互联网 时间:2017-05-11

炫影魔心通过本文主要向大家介绍了oracle数据库中主键,oracle数据库设置主键,oracle数据库创建主键,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) 
) 

</div>

创建序列Sequence

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

</div>

创建触发器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; 

</div>

注意点:

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'

</div>

另一个例子:

新建一个缺少主键的表

create table test1(name1 varchar2(40),city varchar2(40));
</div>

--插入数据

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;
</div>

--增加主键ID

alter table TEST1 add id number(10);
</div>

--设置sequence使ID自增

create sequence SEQ_ID
 minvalue 1
 maxvalue 999999999
 start with 1;
</div>

--将id的值设置为sequence

Update test1 set id=seq_id.nextval;
commit;
</div>

--设置id为主键

alter table TEST1
 add constraint PK_TEST1 primary key (ID);
 
select ID,Name1,CITY from TEST1;
</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Oracle数据库中创建自增主键的实例教程
  • Oracle 数据库针对表主键列并发导致行级锁简单演示

相关文章

  • 2017-05-11怎么才能限制SQL Server只能让指定的机器连接
  • 2017-05-11简单说明Oracle数据库中对死锁的查询及解决方法
  • 2017-05-1111g Oracle导出表不导出数据默认为空表的解决方法
  • 2017-05-11在ORACLE移动数据库文件
  • 2017-05-11数据库Oracle数据的异地的自动备份
  • 2017-08-07eclipse 连接oracle 12c ORA-01017: 用户名/口令无效; 登录被拒绝 [
  • 2017-05-11Oracle数据块实现原理深入解读
  • 2017-05-11oracle查看会话锁定的所有对象代码分享
  • 2017-05-11Oracle定义联合数组及使用技巧
  • 2017-05-11Oracle round()函数与trunc()函数区别介绍

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • Oracle 创建用户及数据表的方法
    • Oracle 11g Dataguard参数详解
    • oracle实现多行合并的方法
    • Oracle定义DES加密解密及MD5加密函数示例
    • Oracle回滚段的概念,用法和规划及问题的解决
    • 常见数据库系统比较 Oracle数据库
    • oracle如何恢复被覆盖的存储过程
    • 深入oracle特定信息排序的分析
    • ORACLE查看并修改最大连接数的具体步骤
    • Oracle数据库账号被锁定解决方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有