Oracle11g实现 自增主键功能以及插入,更新自动设置当前时间

本文主要是介绍Oracle11g实现 自增主键功能以及插入,更新自动设置当前时间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在进入主题之前说明一下:Oracle数据库是严格区分大小写的,如果想使用小写的表名或者字段名,请带上双引号,否则默认是大写

例:下图中我的表中字段是大写,但是我查询语句带上了双引号,就认为是小写,所以不被识别;但是当我去除双引号时,不论是大写还是小写,都认为是大写

 

 

 

一:主键自增

首先介绍一下MySQL和Oracle的背景知识

1)MySQL建表时必须有一个主键(PRIMARY KEY), 每条主键内容必须唯一(Unique), 所以经常使用一个”ID”字段作为主键,给它一个”auto_increment”属性,让”ID”字段每条记录都自增”1″。

比如下表:

1 CREATE TABLE Demo  
2 (  
3     id INT NOT NULL auto_increment PRIMARY KEY,  
4     key1 VARCHAR2(40) NULL,  
5     key2 VARCHAR2(40) NULL  
6 );  

id是自增主键。

insert 的时候,用不着理会自增主键的value,插入新项时会自动给id赋值,插入新纪录时用不着考虑自增主键。

1 insert into Demo(key1, key2) 2 value("k1","k2")

如果是第一条纪录,插入的数据项为

id    |    key1    |    key2

1     |    k1        |    k2

2)Oracle没有这个”auto_increment”属性,所以它没法像MySQL般在表内定义自增主键。

但是,Oracle里的序列(SEQUENCE),可间接实现自增主键的作用。

序列(Sequence),又叫序列生成器,用于提供一系列的数字,开发人员使用序列生成唯一键。每次访问序列,序列按照一定的规律增加或者减少。

序列的定义存储在SYSTEM表空间中,序列不像表,它不会占用磁盘空间。

序列独立于事务,每次事务的提交和回滚都不会影响序列。

创建的方法及参数说明如下,想了解更多,可以具体查一下oracle database sequence的说明:

1 CREATE SEQUENCE SEQNAME    //序列名字         
2 INCREMENT BY 1             //每次自增1, 也可写非0的任何整数,表示自增,或自减  
3 START WITH 1               //以该值开始自增或自减  
4 MAXVALUE 1.0E20            //最大值;设置NOMAXVALUE表示无最大值  
5 MINVALUE 1                 //最小值;设置NOMINVALUE表示无最大值  
6 CYCLE or NOCYCLE           //设置到最大值后是否循环;  
7 CACHE 20            //指定可以缓存 20 个值在内存里;如果设置不缓存序列,则写NOCACHE  
8 ORDER or NOORDER           //设置是否按照请求的顺序产生序列 

 oracle实现自增主键,如上例,其表的创建语句如下:

1、建用户数据表

1 drop table dectuser;    
2 create table dectuser(    
3      userid integer primary key,  /*主键*/    
4      name varchar2(20),    
5      sex varchar2(2)    
6      ); 

 2、创建自动增长序列  

1 drop sequence dectuser_tb_seq;    
2 create sequence dectuser_tb_seq minvalue 1 maxvalue 99999999    
3          increment by 1    
4          start with 1;   /*步长为1*/ 

 3、创建触发器  

1 create or replace trigger dectuser_tb_tri      
2 before insert on dectuser  /*触发条件:当向表dectuser执行插入操作时触发此触发器*/    
3  for each row     /*对每一行都检测是否触发*/    
4 begin   /*触发器开始*/    
5 select  dectuser_tb_seq.nextval into :new.userid from dual;   /*触发器主题内容,即触发后执行的动作,在此是取得序列dectuser_tb_seq的下一个值插入到表dectuser中的userid字段中*/    
7 end;     

4、提交  

      现在就完成了自增主键的设定,搞定!可以检测一下。 

1 insert into dectuser(name,sex) values ('feng','男);    
2      commit;  /*提交*/   

   提示“已创建一行”,表示成功。

二: 插入、更新自动更新当前时间

1.建表语句

create table userinfo(id varchar2(32) not null primary key,name varchar2(200) ,age int ,create_time date default sysdate,modify_time date default sysdate)

 insert 时可以自动更新 create_time 字段,update时需要设置触发器,才能自动更新时间。

2.利用触发器设置更新时间

create or replace trigger userinfo_triggerbefore update on userinfo for each rowbegin:new.modify_time := sysdate;end;

userinfo:是表名

modify_time:执行update需要自动更新的字段 

这篇关于Oracle11g实现 自增主键功能以及插入,更新自动设置当前时间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/841824

相关文章

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

Java进行日期解析与格式化的实现代码

《Java进行日期解析与格式化的实现代码》使用Java搭配ApacheCommonsLang3和Natty库,可以实现灵活高效的日期解析与格式化,本文将通过相关示例为大家讲讲具体的实践操作,需要的可以... 目录一、背景二、依赖介绍1. Apache Commons Lang32. Natty三、核心实现代

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

python通过curl实现访问deepseek的API

《python通过curl实现访问deepseek的API》这篇文章主要为大家详细介绍了python如何通过curl实现访问deepseek的API,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... API申请和充值下面是deepeek的API网站https://platform.deepsee

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

SpringBoot实现二维码生成的详细步骤与完整代码

《SpringBoot实现二维码生成的详细步骤与完整代码》如今,二维码的应用场景非常广泛,从支付到信息分享,二维码都扮演着重要角色,SpringBoot是一个非常流行的Java基于Spring框架的微... 目录一、环境搭建二、创建 Spring Boot 项目三、引入二维码生成依赖四、编写二维码生成代码五

Oracle 通过 ROWID 批量更新表的方法

《Oracle通过ROWID批量更新表的方法》在Oracle数据库中,使用ROWID进行批量更新是一种高效的更新方法,因为它直接定位到物理行位置,避免了通过索引查找的开销,下面给大家介绍Orac... 目录oracle 通过 ROWID 批量更新表ROWID 基本概念性能优化建议性能UoTrFPH优化建议注

Java如何根据文件名前缀自动分组图片文件

《Java如何根据文件名前缀自动分组图片文件》一大堆文件(比如图片)堆在一个目录下,它们的命名规则遵循一定的格式,混在一起很难管理,所以本文小编就和大家介绍一下如何使用Java根据文件名前缀自动分组图... 目录需求背景分析思路实现代码输出结果知识扩展需求一大堆文件(比如图片)堆在一个目录下,它们的命名规

Pandas进行周期与时间戳转换的方法

《Pandas进行周期与时间戳转换的方法》本教程将深入讲解如何在pandas中使用to_period()和to_timestamp()方法,完成时间戳与周期之间的转换,并结合实际应用场景展示这些方法的... 目录to_period() 时间戳转周期基本操作应用示例to_timestamp() 周期转时间戳基