精华内容
下载资源
问答
  • 主要通过两种方式实现oracle数据库字段自增长,第一种方式是序列+触发器,第二种方式序列+显示调用序列,需要的朋友可以参考下
  • Oracle数据库字段自动增长

    千次阅读 2015-05-13 21:52:43
    使用Oracle数据库来完成某个字段的自动增长,oracle需要通过创建序列和触发器来达到字段自动增长的目标,解决创建触发器时遇到的“Warning: 执行完毕, 但带有警告 trigger trg_test 已编译”问题
             
    oracle在创建表时和其他的数据库有点不一样,如SQL SERVER可以在int类型的字段后加上identity(1,1),该字段就会从1开始,按照+1的方式自增,将这个字段设置为主键,有利于我们进行数据的插入操作。MySql中可以使用“auto_increment”即可。但是oracle有点麻烦,需要使用序列和触发器达到目的。
    
    示例:
    --1、创建表--
    create table t_test(
      cid number(11),
      cname varchar(20),
      age number(11)
    )
    
    
    --2、创建自动增长序列--
    create sequence seq_test
    increment by 1
    start with 1
    nomaxvalue
    nominvalue
    nocache
    
    
    --3、创建触发器--
    create or replace trigger trg_test
    before insert on t_test
    for each row
    begin
    select seq_test.nextval into :new.cid from dual;--into和new之间的冒号与into有一个空格,与new之间没空格,一定要注意--
    end;
    
    

        注意:笔者在写这段代码时出了一个错误,花费了很多时间在研究这个错误上,在网上查了一下,发现很多人都是遇到了和我相同的问题,后来经过研究,总算是解决了这个让很多人棘手的问题。

      这个问题是在创建触发器时总是显示“Warning: 执行完毕, 但带有警告      trigger trg_test 已编译。”,如果不理会警告继续执行下去,我们会发现数据根本就无法插入到表中。

    导致这个问题的有两方面的原因,一是在触发器的脚本中,写完select语句后没有加英文分号,即select seq_test.nextval into :new.cid from dual后面没有加英文分号,二也是在触发器的脚本中,end后面没有加英文分号。两者只要有一者存在,都会导致创建触发器时弹出警告信息,这些警告信息可不像java一样可以忽略,如果忽略了警告信息,我们会发现后面根本就无法继续执行下去

    对sequence说明:
      increment by :用于指定序列增量(默认值:1),如果指定的是正整数,则序列号自动递增,如果指定的是负数,则自动递减。
      start with :用于指定序列生成器生成的第一个序列号,当序列号顺序递增时默认值为序列号的最小值 当序列号顺序递减时默认值为序列号的最大值。
      Maxvalue:用于指定序列生成器可以生成的组大序列号(必须大于或等于start with,并且必须大于minvalue),默认为nomaxvalue。
      Minvalue:用于指定序列生成器可以生成的最小序列号(必须小于或等于starr with,并且必须小于maxvalue),默认值为nominvalue。
      Cycle:用于指定在达到序列的最大值或最小值之后是否继续生成序列号,默认为nocycle。
      Cache:用于指定在内存中可以预分配的序列号个数(默认值:20)。
    在sequence中应注意:
      1、 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第 一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样 的。
      2、 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。


    展开全文
  • 需求:给一个表中的某一个int类型的字段设置为自动增长标识。 问题原因:设置一个字段的标识规范时,“是或否”的选项不能够设置,导致无法设置为自动增长字段。 效果如下图: 查找原因是因为该字段设置了一...

    需求:给一个表中的某一个int类型的字段设置为自动增长标识。

    问题原因:设置一个字段的标识规范时,“是或否”的选项不能够设置,导致无法设置为自动增长的字段。

    效果如下图:

    查找原因是因为该字段设置了一个默认值为0。

    解决办法:查取消该字段的默认值,选择标识规范中的是否,选择“是”,标识增量和标识种子按自己的需求而定即可。

    效果如下图:

    问题已解决。

    注意:有默认值的int字段是无法设置为自动增长的字段。

    展开全文
  • 1. 建一张表,比如persons,保证表中有id字段,SQL语句如下: CREATE TABLE PERSONS ( ID NUMBER, LASTNAME VARCHAR2(15 BYTE) NOT NULL ENABLE, FIRSTNAME VARCHAR2(15 BYTE) NOT NULL ENABLE, ADDRESS

    1. 建一张表,比如persons,保证表中有id字段,SQL语句如下:

       CREATE TABLE PERSONS
       ( 

         ID  NUMBER,

         LASTNAME VARCHAR2(15 BYTE) NOT NULL ENABLE,
         FIRSTNAME  VARCHAR2(15 BYTE) NOT NULL ENABLE, 
         ADDRESS  VARCHAR2(20 BYTE), 
         CITY  VARCHAR2(20 BYTE)
         )

    2.d对id字段建立sequence和trigger,语句如下:

    create   sequence   persons_id   increment   by   1  minvalue 1 start   with   1   nocache;

     

    create   or   replace   trigger   persons_trigger  
      before   insert   on   persons  
      referencing   old   as   old   new   as   new   for   each   row  
      begin  
      select   persons_id.nextval   into   :new.id   from   dual;  
      end;

    展开全文
  • mysql 自增长 drop table if exists 'user1'; create table user1(id int not null auto_increment, name varchar(30) not null, password varchar(50) not null, email varchar(50), birthday date, age int...
    mysql 自增长
    
    drop table if exists 'user1';
    create table user1(id int not null auto_increment,
    name varchar(30) not null,
    password varchar(50) not null,
    email varchar(50),
    birthday date,
    age int,
    primary key(id));


    insert into user1(name,password,email,birthday,age)
    values();


    oracle自增长
    create table user1(
    id number,
    name varchar2(30),
    passwd varchar2(50),
    email varchar2(100),
    birthday date, 
    age number(3),
    primary key(id)
    );


    --创建序列
    create sequence user1_seq
    start with 1
    increment by 1
    minvalue 1
    nomaxvalue
    nocache
    nocycle;
    insert into user1(id,name,password,email,birthday,age)
    values(user1_seq.NEXTVAL,);
    展开全文
  • 数据库设置自增长

    千次阅读 2014-06-17 17:02:34
    设置字段自增长的时候报错误,错误代码:
  • 数据库建模过程中,我们通常会对列的字段...下面我们讲解使用trufun Kant studio进行数据库建模,如何将字段设置为自动增长类型!更多图例和流程可参考www.trufun.net的在线帮助 1、选择已经在trufun kant stud
  • 人大金仓数据库不支持直接修改为serial,可通过自定义序列后设置字段默认值实现字段自增长: CREATE SEQUENCE 序列名称 START 34; //创建一个序列CPT_DocTpl_id_SEQ ,从34开始自增,默认为正增长,.
  • Mybatis-plus向oracle数据库中添加自增长字段 1.首先在oracle数据库中创建一条序列,如图: 2.在实体类中添加如下代码: 在实体类上添加@KeySequence(value = “SEQ_APP_ID”) //指向当前序列 在需要自增长的id上...
  • 希望通过 程序 ,或者某个 按钮 吧 一个 表的 主键字段 设置 自增长 ,不能 手动 在 数据库 里面设置
  • 为什么数据库设置默认值呢?因为我们希望在插入数据时,有意或无意间被忽略的字段能够交由MySQL按我们事先预想的方式处理,例如一些默认正常状态码、用户插入数据时候尚未设置的文本字段,诸如此类。 假设student...
  • 设定Access数据库自增长字段 CREATE TABLE student (id autoincrement primary key, name varchar(10))  创建表结构时设定自增长字段的初始值: CREATE TABLE student (id AUTOINCREMENT(100, 2), name ...
  • 重置自增字段 重置自增字段会删除表中数据 1. truncate table 表名 - 此方法适用于要重置的表没有外键 2. delete from 表名; alter table 表名 auto_increment=1; - 此方法适用于全部情况 ...
  • postgreSQL 字段如何设置自增长

    千次阅读 2019-03-28 10:21:29
    2.先创建序列,然后设置字段的自增       CREATE SEQUENCE users_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ...
  • 二:自增长字段相关 1、当想将表中一列修改为自动增长时,可用下面命令: Alter table alter column set generated always as identity (start with 1,increment by 1) 2、当修改表中一列自动增长...
  • phpmyadmin的id字段自增长设置

    万次阅读 2017-03-22 13:33:06
    phpmyadmin的id字段自增长设置: 1.先将id字段,设置成‘主键’。 2.在‘结构’>>‘修改’>>勾选‘A_I’。(额外:AUTO_INCREMENT)自动的增量。
  • 重置数据库自增长字段

    千次阅读 2006-12-17 11:05:00
    要投入正常使用时,会清除测表内试数据,但MSSQL中的自整长字段在用Delete删除后,基数不会归零,解决这个问题可以采用如下方法如User表:Truncate table user次操作删除User表的所有数据,并重置自增长字段
  • 设定Access数据库自增长字段初始值! 值得下载看看!资源免费,大家分享!! 更多免费资源 http://ynsky.download.csdn.net/
  • mysql数据库查看自增长字段下一个值

    千次阅读 2018-05-27 19:39:22
    select AUTO_INCREMENT from INFORMATION_SCHEMA.TABLES where TABLE_NAME='数据库名称';
  • 数据库中自动增长字段类型

    千次阅读 2012-12-24 17:38:43
    1.informix中自动增长列: create temp table aaa_tmp (id serial, idno char(18) ) ; insert into aaa_tmp select 0,dddd from dddd_tmp ; 2.Teradata中自动增长列: CREATE SET TABLE test ,NO ...
  • 电脑资料 作者WhyWin 字体[增加 减小] 类型转载 这篇文章介绍了两种oracle创建字段自增长的实现方式一是序列+触发器二是序列+显示调用序列,需要的朋友可以参考下 mysql等其他数据库中有随着记录的插入而表ID自动增长...
  • 首先说说如何设置主键,...为字段设置自增长的前提是你得有一个字键,如果你没有为任何字段的话是不能设置的,然后设置自增长还要注意的是要把之前的格式全部打算去。就像这样~ alter table stuinfo modify num i...
  • 设定Access数据库自增长字段初始

    千次阅读 2009-09-01 09:43:00
    例如表src, 表dest都有一个id自增长字段,(都是access数据库,起始值1 ,步长1) 表src中id,char两字段的值为 1、a 2、b 3、c 6、d 7、e 9、f 这样在将src中的记录插入表dest的时候会有麻烦,使得表dest中记录...
  • h2数据库自增长字段不按顺序增加

    千次阅读 2020-04-22 23:04:41
    刚刚使用了sql建表语句里声明自增长,代码如下: create table mobile.MESSAGE ( MSG_ID INTEGER auto_increment, DATE VARCHAR(255), RECEIVER_ID INTEGER, SENDER_ID INTEGER, SENDER_NAME VARCHAR...
  • java程序是这样插入的ps=ct.prepareStatement("insert into ...其中wtb_wtid字段设置自增长,每次加一 问题:为什么字段wtb_wtid在72和74会不连续,怎么解决。 补充两点:wtb_wtid字段是主键, 数据库是sqlserver2008
  • 主键的设计主要有使用自动增长字段和使用Guid字段两种,上网搜了一些内容就对自动增量字段与Guid字段的性能作一下比较 2.简介  1.增量字段  增量字段每次都会按顺序递增,可以保证在一个表里的...
  • 自动增长字段

    2016-02-08 20:38:32
    不同的数据库设置自增长的方法是不同的。 SQLServer设置自增长 SQL Server中设定一个字段为自动增长字段只要在表定义中指定字段为IDENTITY即可,格式为IDENTITY(startvalue,step),其中startvalue参数值起始数字,...
  • 在oracle中设置自增长字段设置触发器trigger来实现自增长: oracle中日期处理的方法: 在DAO中往数据库中插入日期类的方法:
  • 数据库——Navicat如何设置主键自增长

    万次阅读 多人点赞 2016-12-06 22:49:12
    Navicat如何设置主键自增长? 1、在表上右键,选择设计表。 2、选中主键,在下方“自动递增”勾选,即可。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 101,108
精华内容 40,443
关键字:

数据库字段设置自增长