精华内容
下载资源
问答
  • 有两种方法可以设置Oracle主键,一种是自增长主键,另一种就是生成唯一序列。 一、自增长主键 --首先建一个表TEST有两种方法可以设置Oracle主键,一种是自增长主键,另一种就是生成唯一序列。一、自增长主键--首先建...

    有两种方法可以设置Oracle主键,一种是自增长主键,另一种就是生成唯一序列。 一、自增长主键 --首先建一个表TEST

    有两种方法可以设置Oracle主键,一种是自增长主键,另一种就是生成唯一序列。

    一、自增长主键

    --首先建一个表TEST

    create table TEST

    (

    NID int PRIMARY KEY,

    test1 varchar2(20),

    test2 varchar2(20),

    test3 varchar2(20),

    test4 varchar2(20),

    test5 varchar2(20)

    )-- 再建一个序列SEQ_TEST

    create sequence SEQ_TEST

    minvalue 1 --最小值

    nomaxvalue --不设置最大值

    start with 1 --从1开始计数

    increment by 1 --每次加1个

    nocycle --一直累加,不循环

    nocache; --不建缓冲区 以上代码完成了一个序列(sequence)的建立过程,名称为SEQ_TEST,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓,建议用cache,因为时间就是金钱呀!)

    你只有了表和序列还不够,,最好再建一个触发器来执行它!代码如下:

    CREATE OR REPLACE TRIGGER tg_test

    BEFORE INSERT ON test FOR EACH ROW WHEN (new.nid is null)

    begin

    select seq_test.nextval into:new.nid from dual;

    end;下面是测试

    select * from test

    insert into test(nid,test1) values(6,'aaa')

    insert into test(test1) values('bbb')

    logo.gif 本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:php中文网

    展开全文
  • ORACLE自增主键设置方法ORACLE自增主键设置方法
  • oracle主键的修改 Oracle主键自动增长的设置    1、创建表的同时创建主键约束   (1)无命名   create table student (   studentid int primary key not null,   studentname varchar(8),   age...

    oracle主键的修改  Oracle主键自动增长的设置 

     

    1、创建表的同时创建主键约束

     

    (1)无命名

     

    create table student (

     

    studentid int primary key not null,

     

    studentname varchar(8),

     

    age int);

     

    (2)有命名

     

    create table students (

     

       studentid int ,

     

       studentname varchar(8),

     

       age int,

     

       constraint yy primary key(studentid));

     

    2、删除表中已有的主键约束

     

    (1)有命名

     

    alter table students drop constraint yy;

     

    (2)无命名

     

    可用 SELECT   *   from   user_cons_columns;

     

    查找表中主键名称得student表中的主键名为SYS_C002715

     

    alter table students drop constraint SYS_C002715;

     

    3、向表中添加主键约束

     

    alter table students add constraint pk_students primary key(studentid);

     

    4、为主键设置自增长

    在Oracle中,可以为每张表的主键创建一个单独的序列,然后从这个序列中获取自动增加的标识符,把它赋值给主键。例如一下语句创建了一个名为customer_id_seq的序列,这个序列的起始值为1,增量为2。

     

    create sequence customer_id_seq increment by 2 start with 1

     

    一旦定义了customer_id_seq序列,就可以访问序列的curval和nextval属性。

    curval:返回序列的当前值

    nextval:先增加序列的值,然后返回序列值

     

    以下sql语句先创建了customers表,然后插入两条记录,在插入时设定了id和name字段的值,其中id字段的值来自于customer_id_seq序列。最后查询customers表中的id字段。

     

    create table customers(id int primary key not null, name varchar(15));

    insert into customers values(customer_id_seq.nextval, 'name1');

    insert into customers values(customer_id_seq.nextval, 'name2');

    select id from customers;

    oracle主键的修改  Oracle主键自动增长的设置 

     

     

    展开全文
  • oracle主键设置

    2010-01-12 10:18:00
    最近总结了一下oracle主键设置方法,贴到这保存一下吧。有两种方法可以设置主键,一种是自增长主键,另一种就是生成唯一序列。一、自增长主键--首先建一个表TEST create tableTEST ( NID int PRIMARY KEY, test1 ...

    最近总结了一下oracle主键的设置方法,贴到这保存一下吧。

    有两种方法可以设置主键,一种是自增长主键,另一种就是生成唯一序列。

    一、自增长主键

    --首先建一个表TEST
    create tableTEST (
      NID int PRIMARY KEY,
      test1 varchar2(20),
      test2 varchar2(20),
      test3 varchar2(20),
      test4 varchar2(20),
      test5 varchar2(20)
    )
    -- 再建一个序列SEQ_TEST
    create sequence SEQ_TEST
    minvalue 1        --最小值
    nomaxvalue        --不设置最大值
    start with 1      --从1开始计数
    increment by1    --每次加1个
    nocycle           --一直累加,不循环
    nocache;          --不建缓冲区

        以上代码完成了一个序列(sequence)的建立过程,名称为SEQ_TEST,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓,建议用cache,因为时间就是金钱呀!)
    你只有了表和序列还不够,最好再建一个触发器来执行它!代码如下:
    CREATE ORREPLACE TRIGGER tg_test BEFORE INSERTON test FOR EACH ROW WHEN (new.nid is null)
    begin
    select seq_test.nextval into:new.nid from dual;
    end;

    下面是测试
    select * from test

    insert into test(nid,test1) values(6,'aaa')
    insert into test(test1) values('bbb')

     

    二、唯一序列

            SYS_GUID() 生成32位的唯一编码。

            序列生成器所生成的数字只能保证在单个实例里是唯一的,这就不适合将它用作并行或者远程环境里的主关键字,因为各自环境里的序列可能会生成相同的数字,从而导致冲突的发生。SYS_GUID会保证它创建的标识符在每个数据库里都是唯一的。
    此外,序列必须是DML陈述式的一部分,因此它需要一个到数据库的往返过程(否则它就不能保证其值是唯一的)。SYS_GUID源自不需要对数据库进行访问的时间戳和机器标识符,这就节省了查询的消耗。

            很多应用程序都依靠序列生成器来创建数据行的主关键字,这些数据行没有一个明显的主值,这也就是说,在这样的数据集里一条记录的创建就会让数据列发生改变。因此,管理员可能会对在表格中将SYS_GUID用作主关键字而不使用序列数感兴趣。这在对象在不同机器的不同数据库里生成以及需要在后来合并到一起的情况下很有用。

            使用SYS_GUID或者序列会在数据库使用周期里的某些地方造成性能上的消耗;问题就是在哪里。对于SYS_GUID而言,性能上的影响在查询时间和创建时间上(在表格里要创建更多的块和索引以容纳数据)。对序列而言,性能上的影响在查询期间,在这个时候,SGA序列的缓冲区被用光。在缺省情况下,一个序列一次会缓冲20个值。如果数据库没有使用这些值就关闭了,它们就会被丢失。

            SYS_GUID生成的值的另一个显著的不足之处是,管理这些值会变得困难得多。你必须(手动)输入它们或者通过脚本来填充它们,或者将它们作为Web参数来传递。出于这些原因,将SYS_GUID作为一个主关键字不是一个很好主意,除非是在一个并行的环境里或者希望避免使用管理序列生成器的情况下。

    博文来源:http://blog.csdn.net/tianping168/archive/2008/08/29/2847747.aspx

    展开全文
  • ORACLE主键自增

    万次阅读 2018-08-23 19:01:14
    Oracle实现主键自增

    用习惯了MySQL突然转到Oracle确实很不习惯

    首先MySQL主键可以设置自增,但是在Oracle中并没有主键自增

    Oracle没有主键自增但是可以通过另一种办法来实现,让主键自增

    首先设置序列

    在plsql界面的左边有一个窗口显示的是一些类似文件夹的东西:

    找到Sequences,右键新建

    我这是中文的,就不多说了,其中所有者就是哪一个账号

    一般开始于1,增量也一般是1,名字看你个人爱好,最小值一般也是1,最大值我一般都设的好多9,防止不够用,高速缓存这个我还不是很明白,默认是20,据说是可以提高速度,不清楚,循环我也没试过,我个人理解就是超过了最大值就开始循环,排序这个貌似没什么用可能我用错了

    填完点下面那一排有一个应用按钮,这就设置好了一个序列了

    第二步就是设置触发器

    同样在那些文档一样的地方找到Triggers:

    同样也是新建

    第一行是触发器名字

    第二行是触发时机,语句执行前还是执行后before是之前

    第三行是什么时候触发,比如insert的时候触发

    第四行是关联表

    第五行什么等级我也忘了,我一直选默认

    然后确定

    确定后的画面:

    马赛克是进来后系统会帮你写好的,第一个和最后一个是触发器名称,第二个是关联表,我这选的是insert之前触发,在第二行有显示,然后在begin下面书写语句

    比如你要让a表的id自增:

    SELECT  序列名.NEXTVAL into :new.id from dual;

    序列名.NEXTVAL这个好像是当前序列的下一个!

    序列名就是你在前面创建的那个!

    应该很清楚了为什么是from dual我就不清楚了!我也刚接触Oracle!

    写完后按F8键!搞定,以后插入数据的时候可以不管主键了!

    希望知道的大牛指点一二!谢谢

    展开全文
  • 设置Oracle主键自增

    千次阅读 2013-12-09 18:57:35
    oracle没有设置主键auto increment的功能,需要自己编写序列和触发器实现主键自动递增。 示例: 创建表menu: 点击(此处)折叠或打开 create table menu( menuId number(10) not null primary ...
  • 本篇文章是对Mysql,SqlServer,Oracle主键自动增长的设置进行了详细的分析介绍,需要的朋友参考下
  • oracle主键设置方法

    千次阅读 2010-05-04 13:01:00
    主键: 1.主键约束: 一个表只能有一个主键约束。主键可以是单个字段,也可以是多个字段。无论是哪种情况,其所有字段都是NOT NULL。 2.Unique约束:一个表可以有多个Unique约束,Unique的字段可以为NULL。 3....
  • oracle主键自增

    2014-05-23 14:39:04
    oracle 数据库主键自增脚本 --第一步,创建表 --第二步,创建自增序列 --第三步,创建触发器
  • Oracle 主键自增

    2018-04-20 10:20:05
    说明:第一次做项目使用oracle发现无法像mysql那样在客户端设置主键自增长,oracle必须使用语句生成序列。(细节:oracle想要主键自增,必须创建序列,在所用的框架(已myBatis举例),加上SENDCOLLNOTICEID.nextval。...
  • Oracle中为主键设置自增长需要通过序列来完成 1建立数据表 create table Test_Increase( userid number(10) primary key, /*主键,自动增加*/ username varchar2(20) ); 2创建自动增长序列 CREATE ...
  • oracle建表设置主键自增

    千次阅读 2013-10-24 09:22:38
    oracle建表设置主键自增
  • oracle设置主键自增的方法,可以图形化界面也可以用sql语句,两种方法均亲自验证过。
  • oracle设置自增主键的方法介绍,用来设置自增
  • Oracle主键和联合主键

    千次阅读 2019-04-03 08:11:59
    oracle数据库中,一张表中的每一行数据被称为一条记录。一条记录通常都是由多个字段所组成的。 例如,employees表的四行记录: 每一条记录都包含者若干个已经定义好的字段。同一个表的所有记录都有相同的字段...
  • oracle设置自增主键(id)oracle设置自增主键(id)oracle设置自增主键(id)
  • Oracle如何设置主键自增

    千次阅读 2019-04-08 17:24:11
    本文转载: 原文地址: Oracle如何设置主键自增
  • 实战Oracle主键自增长

    2013-08-29 11:37:55
    Oracle主键自增长
  • 1.oracle主键修改 1.1)首先查看需要修改的表的主键名,默认的情况下,数据库会自动分配 select * from user_cons_columns where table_name='表名'; 注意表名可能需要大写,否则可能查不出来。 1.2)删除主键...
  • Oracle设置主键

    千次阅读 2020-12-22 10:09:56
    oracle设置主键的方法: 1、在创建表时定义主键 ,代码为【constraint TF_B_AIR_CONFIG_PK primary key(TYPE_ID)】; 2、在创建表后,使用alter table语法设置主键。 一、什么是主键 主键(primary key)是表中...
  • oracle主键自动增长

    2012-04-26 08:41:45
    oracle数据库中主键属性没有自增长,所以只能自己写程序来实现,用序列与触发器,可以解决这个 问题
  • oracle设置主键自增

    千次阅读 2018-11-13 09:35:40
    最近写一个简单的功能,根据以往的是身份证被设置为唯一标识,但也不是所有的都是如此,假如表里有id的情况下,你想把它设为主键并自增该怎么样呢,oracle中,设置一个序列并且创建一个触发器就可以了。 --设置主键...
  • oracle主键插入重复数据

    千次阅读 2018-06-21 09:21:58
    发现oracle中已经设置主键,但是还能插入重复数据,也是奇葩,后来发现主键虽然设置,但是没有启动,这才导致可以插入重复主键数据 解决办法 查询出没有启用主键的表 select a.constraint_name,b.column_...
  • Oracle没有自增主键这么一说,我们需要建立一个索引然后再设置一个触发器来添加自增主键。 创建一张表 create table t_( user_id number not null primary key, user_name varchar2(30), credits number, user_...
  • oracle 自动再取一组到 cache 。使用 cache 或许会跳号,比如数据库突然不正常 down 掉( shutdown abort),cache 中的 sequence 就会丢失 . 所以可以在 create sequence 的时候用 nocache 防止这种情况。   ...
  • oracle设置主键自增长

    千次阅读 2018-08-31 16:48:20
    oracle主键自增长不像mysql的主键自增长设置那么方便,需要先设置序列,然后在设置触发器。此表的触发器可以复制以前类似触发器,然后对特定名字进行修改。 设置完触发器,不需要再在数据表中做相关设置,因为...
  • Oracle主键约束

    千次阅读 2017-11-22 11:39:28
    一 作用 确保表当中每一行数据的唯一性   二 主键特点 非空 唯一 ...1、在创建表时设置主键约束 CREATE TABLE tabl_name( column_name datatype PRIMARY_KEY,... ) SQL> create table
  • Oracle主键自增的办法

    2011-08-23 15:51:47
    用于Oracle主键进行自增的办法,有触发器 和序列机制

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 127,207
精华内容 50,882
关键字:

oracle主键设置