精华内容
下载资源
问答
  • Oracle数据库主键自增

    千次阅读 2019-03-07 11:07:37
    Oracle数据库主键自增 在学习mysql时,我们很容易通过auto_increment就能实现主键自增的功能,但是在Oracle数据库中,是没有这个关键字的,所以也不能通过这样来实现主键自增。下面我就为大家介绍两种实现主键自增...

                                     Oracle数据库主键自增

    在学习mysql时,我们很容易通过auto_increment就能实现主键自增的功能,但是在Oracle数据库中,是没有这个关键字的,所以也不能通过这样来实现主键自增。下面我就为大家介绍两种实现主键自增的方法。

    两种方法的基础都有一个概念就是序列(sequence)的概念,一种是利用序列显式调用的方式去实现主键自增,另一种是通过序列触发器(trigger)来实现主键自增。

    /*1.利用序列主键自增*/

    1. 第一步、创建表

           --创建表,主键为ID

           CREATE TABLE YFF (

    ID INT primary key ,

    NAME VARCHAR2(10)

    );

    --创建表的格式

    CREATE TABLE 表名(

    字段名 字段类型(可以加一些约束,例如主键约束),

    字段名 字段类型

    )

    1. 第二步、创建序列

           --创建序列  

           create sequence seq_yff

           start with 1

           increment by 1;

     

           --创建序列的格式

           create sequence 序列名称

    start with 开始数字

    increment by 增长数字

    minvalue 最小值

    maxvalue 最大值

    cycle 是否循环(cycle为循环,nocycle为不循环)

    nocache  不使用缓存

     

    1. 关于序列的其他重要操作

           --查询序列(利用nextval查询序列下一次的值)

           select seq_yff.nextval from dual;

          

    --查询序列的格式

           Select 序列名.nextval from dual

           (dual为伪表,当我们不需要从具体的表来取得表中数据,而是单纯地

    得到一些我们想得到的信息,就可以使用伪表)

     

    注意:这里第一次执行这条查询语句得到结果为1,再执行得到2,第一种实现主键自增的方法就是使用序列名.nextval使得值一直增加的

     

           --删除序列()

           DROP SEQUENCE seq_yff;

    注意:序列和表不是连接在一起的,当序列创建之后,用在这个表之后,我将该表删除,但是序列的值还是停留在之前的值上,所以需要注意这个问题

       

    1. 第三步、利用序列+显式化调用 进行自增

     

           insert into YFF values (seq_yff.nextval,'张三');

           insert into YFF values (seq_yff.nextval,'张三');

           select * from YFF;

          

    --2利用序列+触发器调用 进行主键自增     

        此处已经表和序列都用第一种方法中使用过的

          第一步、在表和序列创建好之后,创建触发器

     --创建触发器

          create or replace trigger tri_yff_insert

            before insert on YFF

            referencing old as old new as new

            for each row

          begin

            select seq_yff.nextval

              into :new.ID

              from dual;

          end tri_yff_insert;

       

        --创建触发器格式

    create [or replace] tigger 触发器名

    触发时间 触发事件

    on 表名

        [for each row]

    begin

        pl/sql语句

    end

     

    --解释上面的触发器语句

        create or replace trigger tri_yff_insert    创建触发器并命名

            before insert on YFF              触发时间为向表YFF中插入时

            referencing old as old new as new  

            for each row      对表的每一行触发一次,否则只对整表执行一次

          begin

            select seq_yff.nextval

              into :new.ID

              from dual;

          end tri_yff_insert;

     

    1. 其他对触发器的操作

          --查询表中触发器

          select * from all_triggers WHERE table_name='YFF'

     

           --删除触发器

           drop trigger tri_yff_insert;

          

    1. 第二步、插入数据

           insert into  YFF (ID,Name) values(100,'李四');

           insert into  YFF (Name) values('李四');

           --不管给不给主键赋值,这里触发器都会使得主键值为序列的值

              

    展开全文
  • 数据库主键自增策略

    2020-08-16 19:46:54
    数据库主键自增策略: 1.自增长主键策略 优点:简单,不需要程序做特别处理 缺点:这种方法对以后如果项目移植到其他数据库改动会比较大, 而且如果多表合并,就会出现重复的主键 2.使用时间戳+随机数 优点:时间...

    数据库主键自增策略:
    1.自增长主键策略
    优点:简单,不需要程序做特别处理
    缺点:这种方法对以后如果项目移植到其他数据库改动会比较大,
    而且如果多表合并,就会出现重复的主键
    2.使用时间戳+随机数
    优点:时间简单,与数据库无关,移植性较好
    缺点:长度太长,最少也得20位,不进占空间并且建索引的话性能会比较差
    3.每次取主键最大值+1作为新的主键
    优点:主键长度可控,移植性较好
    缺点:并发写可能会造成主键冲突,对并发也不太好控制
    4.单独建一个存放主键的表
    优点:实现简单,移植性较好
    缺点:需要 考虑并发问题,整个系统主键生成都依赖该表,性能影响可能较大
    5.UUID:
    优点:它能保证每个节点所生成的标识都不会重复
    缺点:生成的结果串会比较长,影响性能

    展开全文
  • 数据库主键自增插入显示值

    千次阅读 2014-06-20 15:08:12
    SQL Server 2008 数据库主键自增插入显示值

    SQL Server 2008 数据库主键自增插入显示值

    前几天在工作的时候遇到在删除数据库中表的数据的时候,删除之后,重新添加的数据没有得到原来的数据的id值(表中id为主键,且设置为自增) ,使用的是SQL Server 2008 ,现在已解决,和大家分享一下!

    具体情况:

    1.建立表t_test,设置主键自增,如下图


    2.向表中插入数据

       由于表中的主键字段id为自增在插入的时候不需要指定显示插入,所以Sql 语句为

    <span style="font-size:24px;">insert into  [xxx].[dbo].[t_test]  values ('xiaoming')
    insert into  [xxx].[dbo].[t_test]  values ('hanmei')
    insert into  [xxx].[dbo].[t_test]  values ('lilei')
    insert into  [xxx].[dbo].[t_test]  values ('ligang')
    insert into  [xxx].[dbo].[t_test]  values ('xiaozhi')</span>

    
    

    再插入的时候并没有指定显示值id字段,数据库会自动增加主键id值,数据库中数据为:

    3.删除数据,重新添加带有显示值的数据

    <span style="font-size:24px;">delete [xxx].[dbo].[t_test] where id = 1</span>
    插入带有显示值的数据:

    <span style="font-size:24px;">insert into  [guagua_new_event_system_test].[dbo].[t_test] values (1,'xiaoming')</span>
    数据库提示:

    消息 8101,级别 16,状态 1,第 1 行
    仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'xxx.dbo.t_test'中的标识列指定显式值。

    重新设置INDENTITY_INSERT为ON时,重新重加,sql 语句为:

    <span style="font-size:18px;"> SET  IDENTITY_INSERT [xxx].[dbo].[t_test]  ON </span>
    <span style="font-size:18px;"> insert into  [xxx].[dbo].[t_test]  values (1,'xiaoming')</span>
    数据库提示:

    消息 8101,级别 16,状态 1,第 2 行
    仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'xxx.dbo.t_test'中的标识列指定显式值。

    明明已经设置了INDENTITY_INSERT为ON,但是为什么还是没有添加进去,看了SQL Server 2008的帮助文档,才明白需要制定一一对应的列名在显示插入的时候。

    所以,正确的Sql 语句为:

    <span style="font-size:18px;">SET  IDENTITY_INSERT [xxx].[dbo].[t_test]  ON 
    insert into  [xxx].[dbo].[t_test](id ,name)  values (1,'xiaoming')
    SET IDENTITY_INSERT [xxx].[dbo].[t_test] OFF</span>

    只是在显示插入值的时候的时候需要制定列名,同时打开允许显示插入的INDENTITY_INSERT,才能够插入!

    --- --- 路漫漫其修远兮,吾将上下而求索



    展开全文
  • 解决Sqlite数据库主键自增的问题

    解决Sqlite数据库主键自增的问题

    参考文章:

    (1)解决Sqlite数据库主键自增的问题

    (2)https://www.cnblogs.com/mqingqing123/archive/2012/10/03/2710678.html

    (3)https://www.javazxz.com/thread-3321-1-1.html


    备忘一下。


    展开全文
  • 一、创建序列 1.1、直接在PLSQL中设置 1.2、命令创建 create sequence seq_users ##创建序列seq_users increment by 1 ## 步长,每次加1 start with 1 ##从1开始 minvalue 1 ##最小值 maxvalue 9999999 ##最大值 ...
  • db2 数据库主键自增

    千次阅读 2018-09-10 21:26:07
    DBeaver中,主键自增无法勾选,可通过建表语句实现自增。 在自增的column后添加如下语句 GENERATED ALWAYS AS IDENTITY (   START WITH +1   INCREMENT BY +1   MINVALUE +1   MAXVALUE +...
  • Oracle没有自增主键这么一说,我们需要建立一个索引然后再设置一个触发器来添加自增主键。 创建一张表 create table t_( user_id number not null primary key, user_name varchar2(30), credits number, user_...
  • mybatis 设置数据库主键自增

    千次阅读 2021-06-15 15:16:57
    1.mapper.xml文件中: useGeneratedKeys="true" keyProperty="id" insert into student( `name` ) values (#{name} ) 2.java实体中: public class Student implements Serializable { private static...主键自增冲突。
  • 使用redis生成数据库主键自增

    万次阅读 2016-07-26 20:29:47
    数据库自增什么的麻烦死了,尤其是往后还需要考虑到分布式处理,然后偷了个懒,直接redis来搞起... 下面上代码 先定义个主键生成策略接口,往后方便扩展 public interface KeyGenerate { /** * 生成String类型主键 ...
  • SOL Server数据库主键自增

    千次阅读 2013-03-16 13:44:23
    环境:SQL Server 2008 问题:设置主键和把它设为自增。 解决:点击table->选中表->design->选中需要设置主键的字段... 若要设置主键自增,在列属性中找到标识规范,单击左边的"+"号,把否改为是,其他默认即可。
  • 令mysql数据库主键自增

    千次阅读 2012-01-19 14:29:03
    数据库主键id是自增的:CREATE TABLE `message ` (`id` INT(8) NOT NULL AUTO_INCREMENT, PRIMARY KEY(`id`));
  • 数据库主键自增与insert into

    千次阅读 2014-08-01 10:16:30
    数据库aaa里有两列,id,name; id为主键且是自增
  • 上一篇文章介绍了hibernate 实现oracle主机自增的机制,本篇文章将研究mybatis 实现oracle主键自增的机制 首先我们看对于同一张student表,对于mysql,sql server,oracle中它们都是怎样创建主键的 在mysql中 ...
  • 创建oracle数据库表,用户表 SYS_USERS 其中user_id为主键 -- Create table create table SYS_USERS ( user_id NUMBER(9) not null, user_name VARCHAR2(20) not null, user_pwd VARCHAR2(20) not null,...
  • 设置主键自增时,和设置主键时可能有粗心的同学和我一样就是将一个表中的有两个相同值的属性设为主键这时就会报错 解决方法很简单就是保证设置主键属性下的值不能相同即可。
  • 1、原理实现 ...在MS SQLServer中,如果把表的主键设为identity类型,数据库就会自动为主键赋值。 create table customers(id int identity(1,1) primary key not null, name varchar(15)); insert into
  • hibernate操作oracle数据库 主键自增

    千次阅读 2013-12-06 21:39:33
    本篇文章基于...相信使用过mysql,sql server,oracle的朋友都知道,oracle中的表的主键如果想设置成自增长,那么需要创建序列 在oracle中为 create table Student( Student_ID number(6) NOT NULL PRIMARY
  • 可用作删除一行主键数据库,在还原数据行,或者删掉后,被伤处的主键还可以利用 --开启当前表的可复制功能,仅在当前回话中有效 SET IDENTITY_INSERT dbo.PDAUserInfo ON  //43是手动设置的主键 insert into ...
  • 如题,主键自增, 不用维护,怎么搞?[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/3.gif][/img]

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 79,695
精华内容 31,878
关键字:

数据库主键自增