精华内容
下载资源
问答
  • oracle主键自增 数据插入时主键自增
    2021-02-22 14:11:40

    1.建表

    create table overseas_users(
           overseas_id varchar2(10) not null primary key, --主键
           name varchar2(50), -- 名字
    );

    2.创建自增序列

    create sequence seq_overseas_id
           minvalue 1  --最小值
           maxvalue 9999999999 --最大值
           start with 1 --起始值
           increment by 1  --增长基数
           nocycle  --不循环
           nocache ; -- 不使用缓存

    3.调用

    insert into overseas_users(overseas_id,name) values(seq_overseas_id.nextval,'xxx');

     

    更多相关内容
  • 到此这篇关于Navicat Premium中Oracle创建主键自增的方法的文章就介绍到这了,更多相关Navicat Premium主键自增内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!
  • oracle设置主键自增的方法,可以图形化界面也可以用sql语句,两种方法均亲自验证过。
  • 主要介绍了基于django 的orm中非主键自增的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 一、创建序列 1.1、直接在PLSQL中设置 1.2、命令创建 create sequence seq_users ##创建序列seq_users increment by 1 ## 步长,每次加1 start with 1 ##从1开始 minvalue 1 ##最小值 maxvalue 9999999 ##最大值 ...
  • 主要介绍了django自定义非主键自增字段类型详解(auto increment field),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 主键自增在插入数据的时候是很实用的,可以获取并操作返回的插入记录的ID,接下来介绍Oracle如何创建主键自增表,感兴趣的你可以了解下,就当是巩固知识,希望此文对你有所帮助
  • oracle主键自增

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

    2013-04-08 19:28:22
    在mysql中,直接把表的主键设为auto_increment类型,在MS SQLServer中,如果把表的主键设为identity类型, 在Oracle中,可以为每张表的主键创建一个单独的序列,然后从这个序列中获取自动增加的标识符,把它赋值给...
  • 主要介绍了Mybatis-plus实现主键自增和自动注入时间的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • id number(10) primary key, /*主键,自动增加*/ name varchar2(20), /*姓名*/ phone varchar2(20), /*电话*/ sex varchar2(10), /*性别*/ age number(10) /*年龄*/ ); --.创建自增长序列 create s

    1,orcale数据库主键自增

    -- 创建表

    create table PERSON(
           id number(10) primary key,   /*主键,自动增加*/
           name varchar2(20),       /*姓名*/
           phone varchar2(20),        /*电话*/
           sex varchar2(10),      /*性别*/
           age number(10)       /*年龄*/
    );


    --.创建自增长序列

    create sequence PERSON_SEQ
    --minvalue 1        -- 最小值
    -- maxvalue 2000    -- 最大值
    nomaxvalue          -- 不设置最大值 
    start with 1      -- 从1开始计数
    increment by 1      -- 每次增加1
    nocycle         -- 一直累加,不循环
    cache 20;


    --在创建自增长序列时,可以设置计数起始位置。例如表中存在100条原始数据,那么我们可以设置 start with 101 ,这样自增长就会从101开始
    --删除主键自增:DROP sequence PERSON_SEQ
    -- 创建触发器

    create or replace trigger PERSON
    before insert on PERSON
    for each row
    begin
    select PERSON_SEQ.nextval into :new.id from dual;
    end PERSON_TR;

    --提交:commit;

    insert into person(name,phone,sex,age)  values('张三','18888888888','男',25);
    insert into person(name,phone,sex,age)  values('李四','18888888889','男',29);

    数据表中添加主键自增,通过sqlplus导入数据时,不会出现如下错误

    2,mysql主键自增

    create table if not exists `user`(
       `id` int unsigned auto_increment, --unsigned:既为非负数,用此类型可以增加数据长度!     
                                         --auto_increment:主键自增设置
       `name` varchar(100) not null,
       `sex` varchar(40) not null,
       `age` int(11),
       primary key ( `id` )
    )engine=innodb default charset=utf8;

    亦可以在使用navicat给数据库表,设计表中,添加主键和自增,操作比orcale数据库操作方便。

    展开全文
  • mybatis-plus 主键自增问题

    千次阅读 2022-03-20 13:29:26
    mybatis-plus 主键自增问题

    1.当你使用mybatis-plus时,如果不设置主键自增策略,默认使用雪花算法

    两种方法默认设置mybatis主键自增策略:

    1.单个实体类设置,作用域只有这个类

    需要在创建数据表的时候设置主键自增

    实体字段中配置 @TableId(type = IdType.AUTO)

    @TableId(type = IdType.AUTO)

    private Long id; 

     2.全局设置,去除了挨个设置主键自增策略:

    要想影响所有实体的配置,可以设置全局主键配置

    #全局设置主键生成策略

    mybatis-plus.global-config.db-config.id-type=auto

     

    package com.ape.springbootmybatisplus.entity;
    
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableId;
    import lombok.Data;
    
    /**
     * @createAuthor Administrator
     * @currentAroject springboot-mybatis-plus
     * @createDate 2022-03-20 12:49
     */
    @Data
    public class User {
        //主键策略
        @TableId(type = IdType.ASSIGN_ID)//19位值  如果此处什么也不写默认就是这样,使用雪花算法策略
        private Long id;
        private String name;
        private Integer age;
        private String email;
    }
    

    简述雪花算法策略:

    雪花算法:分布式ID生成器
    雪花算法是由Twitter公布的分布式主键生成算法,它能够保证不同表的主键的不重复性,以及相同表的主键的有序性。
    核心思想:
    长度共64bit(一个long型)。
    首先是一个符号位,1bit标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0。
    41bit时间截(毫秒级),存储的是时间截的差值(当前时间截 - 开始时间截),结果约等于69.73年。
    10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID,可以部署在1024个节点)。
    12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID)。
    
    优点:整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞,并且效率较高。

    展开全文
  • 虽然我们习惯于给主键ID指定AUTO_INCREMENT属性,但是AUTO_INCREMENT也是可以指定到非主键字段的,唯一的约束就是这个字段上面得加索引,有了索引,就可以通过类似SELECT MAX(*ai_col*)的语句快速读到这列数据的最大...

    虽然我们习惯于给主键ID指定AUTO_INCREMENT属性,但是AUTO_INCREMENT也是可以指定到非主键字段的,唯一的约束就是这个字段上面得加索引,有了索引,就可以通过类似SELECT MAX(*ai_col*)的语句快速读到这列数据的最大值。

    MySql 5.1之前的实现

    在这个版本之前,用AUTO_INCREMENT修饰的数据列确实是严格连续自增的。MySql的实现是会针对每个插入语句加一个全表维度的锁,这个锁可以保证每次只有一条插入语句在执行,每插入一行数据,就会生成一个主键ID。

    mysql> CREATE TABLE t1 (

    -> c1 INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,

    -> c2 CHAR(1)

    -> ) ENGINE=InnoDB AUTO_INCREMENT=100;

    假如我们在数据库中新建上面的这张表,接着我们执行插入语句。

    mysql> INSERT INTO t1 (c1,c2) VALUES (NULL,'a'), (NULL,'b'), (NULL,'c'), (NULL,'d');

    针对这条MySql执行的流程为:全表加 AUTO-INC锁

    1.1 生成主键ID:101

    1.2 将行(101, 'a')插入表中

    1.3 生成主键ID: 102

    1.4 将行(102, 'b')插入表中

    ...

    释放 AUTO-INC锁

    MySql5.1之前的这种实现方式可以保证AUTO_INCREMENT严格自增,但是并发程度也最差,因为AUTO_INCREMENT锁是全表加锁直到这条语句结束

    MySql 5.1版本带来的优化

    前文中的insert语句是比较简单的,所谓简单的insert语句指的是插入的的数据行数是可以提前确定的,与之相对的是Bulk insert比如INSERT ... SELECT这类语句,这类插入语句的插入行数不能提前确定。

    在这个版本以及之后,对于简单语句的插入,不再加全表的AUTO-INC锁,只会在产生自增列数据的时候加一个轻量级的互斥锁,等自增数据分配好,锁就释放了,因此像上面的例子,在MySql5.1之后的执行流程如下加轻量级互斥锁

    1.1 分配自增数据

    释放锁

    将行(101, 'a')插入表中

    将行(102, 'b')插入表中

    ...

    可以看到,对于简单的插入语句,并发情况下的临界区变小了,且不再持有全表的锁,提升了并发性能。当然,如果在尝试加锁的过程中遇到有其他事务持有全表的AUTO-INC锁,还是要等待全表的AUTO-INC锁释放再执行本次插入操作

    对于Bulk insert的插入语句,仍然避免不了全局的AUTO-INC锁,这类语句,他们的执行流程仍然保持和5.1之前版本一致,比如以下表为例

    CREATE TABLE t1 (

    c1 INT(11) NOT NULL AUTO_INCREMENT,

    c2 VARCHAR(10) DEFAULT NULL,

    PRIMARY KEY (c1)

    ) ENGINE=InnoDB;

    执行下面两条语句

    Tx1: INSERT INTO t1 (c2) SELECT 1000 rows from another table ...

    Tx2: INSERT INTO t1 (c2) VALUES ('xxx');

    由于在执行Tx1时,InnoDB无法知道要插入的具体行数,因此会获取一个全表的锁,每执行一条插入语句就会给自增列赋新的值。因为有全表的锁,所以Tx1这条语句插入的所有行数都是连续自增的,Tx2自增列的值要么小于Tx1自增列的最小值,要么大于Tx1自增列中的最大值,这取决于这两条语句的执行顺序

    InnoDB采取这样的决策一个重要的原因是主从复制,在MySql8.0之前,MySql的主从是基于语句复制的。在刚才的例子中,如果Tx1执行的时候没有全表的锁,那有可能在Tx1执行的过程中Tx2也在执行,这就会导致Tx1和Tx2自增列的数据每次执行结果都不相同,也就无法在从库中通过语句回放复制。

    MySql 8.0版本之后的优化

    虽然MySql5.1版本对简单的插入语句做了优化,避免了全表加锁,但对于INSERT ... SELECT这样的复杂插入语句,仍然避免不了全表的AUTO-INC锁,主要是基于执行语句的主从复制要能在从库完全回放复制主库,所有的语句执行结果就不能和执行顺序有关。

    在MySql 8.0以及之后默认的主从复制策略变成了基于数据行实现,在这样的背景下INSERT ... SELECT这样的复杂插入语句也不需要全表加锁来生成自增列数据了,所有的插入语句只有在生成自增列数据的时候要求持有一个轻量级的互斥锁,等到自增数据生成好之后释放锁。在这种实现下,所有插入语句的自增列都不能保证连续自增,但是并发性能确实最好的。

    总结

    需要说明的是,如果插入语句所处的事务回滚了,生成的自增列数据是不会回滚的,这种情况下会造成自增列数据非连续增长。

    以上所述都是各个MySql版本的默认实现,MySql 5.1引入了一个新的参数 InnoDB生成自增列的策略,其值总结如下:

    不推荐显式指定自增列数据,因为在5.7以及之前的版本,如果通过update语句显式指定一个比SELECT MAX(*ai_col*)还大的自增列值,后续insert语句可能会抛"Duplicate entry"错误,这一点在8.0版本之后也有了改变,如果通过显式的update语句显式指定一个比SELECT MAX(*ai_col*)还大的自增列值,那该值就会被持久化,后续的自增列值都从该值开始生成。

    假如有下面这张表

    mysql> CREATE TABLE t1 (

    -> c1 INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,

    -> c2 CHAR(1)

    -> ) ENGINE = INNODB AUTO_INCREMENT=100;

    试想,在我们执行完下面这条语句之后表的内容变成了什么?

    mysql> INSERT INTO t1 (c1,c2) VALUES (1,'a'), (NULL,'b'), (5,'c'), (NULL,'d');

    MySql 5.1之前,或者innodb_autoinc_lock_mode设置为0

    mysql> SELECT c1, c2 FROM t1 ORDER BY c2;

    +-----+------+| c1 | c2 |

    +-----+------+| 1 | a |

    | 101 | b |

    | 5 | c |

    | 102 | d |

    +-----+------+

    在这种模式下,每插入一行数据就会生成一个自增值赋到c1这一行,因此c1的下一个自增值是103

    MySql 8.0之前,或者innodb_autoinc_lock_mode设置为1

    mysql> SELECT c1, c2 FROM t1 ORDER BY c2;

    +-----+------+| c1 | c2 |

    +-----+------+| 1 | a |

    | 101 | b |

    | 5 | c |

    | 102 | d |

    +-----+------+

    当前表的数据与前一个场景一致,但是下一个自增值却是105,因为在这个场景下,自增数据是在插入语句执行的最开始一次性生成的

    MySql 8.0之后,或者innodb_autoinc_lock_mode设置为2

    mysql> SELECT c1, c2 FROM t1 ORDER BY c2;

    +-----+------+| c1 | c2 |

    +-----+------+| 1 | a |

    | x | b |

    | 5 | c |

    | y | d |

    +-----+------+

    在这种场景下,因为同时可能有其他的插入语句执行,因此x和y的值是不确定的,下一个自增值也是未知的。

    关注公众号【苦味代码】,分享更多后端技术细节

    展开全文
  • 主键自增理解

    千次阅读 2022-01-29 18:23:20
    主键自增理解 自增主键: InnoDB引擎的自增值,其实是保存在内存里,并且到了MySQL8.0版本之后,才有了自增值持久化的能力。也就是实现了如果发生重启后,表的自增值可以恢复为MySQL重启前的值。 在MySQL5.7及之前的版本,...
  • 联合主键自增问题今天上午闲来无事翻看了下数据库分类表的设计,看到这样一幕:当时我好奇的是怎么cateId自增会存在重复值的问题,然后翻看了下主键是由siteId和cateId组成。所以进行了查阅资料:当多列组成联合...
  • PostGreSQL设置主键自增

    千次阅读 2022-04-01 15:19:53
    提示:我们在设计表结构的过程中,有的时候不太愿意用sql的语法来创建表结构,而是在navicat中直接用新建的方式来创建表结构,但是发现在 Navicat 15 for PostgreSQL中,并没有设置主键自增的选项,如下图: ...
  • Oracle数据库主键自增

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

    2022-04-14 09:56:52
    Oracle数据库在进行insert操作的时候 是不会自己进行主键自增的,这是和Mysql不一样的地方。需要通过触发器和序列来完成主键自增的。 1、创建序列 WJSC_id_increment -- 是序列名称 可以自定义 CREATE SEQUENCE ...
  • Oracle设置主键自增

    2022-04-19 19:51:46
    1、如果没有表需要在创建表的时候创建主键 CREATE TABLE Demo 2 ( 3 id INT NOT NULL PRIMARY KEY, 4 key1 VARCHAR2(40) NULL, 5 key2 VARCHAR2(40) NULL ...3、创建序列,实现主键自增 CREATE
  • mysql 主键自增

    2021-09-06 16:29:35
    当前主键自增到33了。但下一条数据想让它主键为50,跳过中间的差值。我想当然的认为只要将当前的主键33改为50,那么它的最大主键就是50,之后插入数据就会接着50继续自增。但实际上新插入的数据仍然是接着33开始自增...
  • 3.使用序列创建字段自增 4.使用SERIAL postgresql 自增需要使用序列 1.查看序列 SELECT c.relname FROM pg_class c WHERE c.relkind = 'S'; Navicat: 2.创建序列 CREATE SEQUENCE upms_...
  • mysql设置非主键自增

    千次阅读 2021-02-02 04:02:23
    @GeneratedValue(strategy = GenerationType.IDENTITY) 根据底层数据库自动选择方式,需要底层数据库的设置 如 MySQL,会使用自增字段,需要将主键设置成 auto_increment......(8,2) 中文含义 存款流水号 客户标识 银行...
  • Oracle主键自增

    2022-04-16 16:00:55
    使用序列实现自增 CREATE TABLE goods( id number(10) NOT NULL PRIMARY KEY, name varchar2(10) NULL, weight number(10) NULL, color varchar2(10) NULL, TYPE varchar2(10) NULL ); –(1)创建序列 create ...
  • 我们知道mybatis plus中自带着一套主键生成的策略。 其内部是根据snowflake算法而生成的,snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。 本次主要是如何应用主键策略,并不会讲解snowflake算法...
  • mysql设置主键自增

    千次阅读 2021-11-04 14:52:41
    1.mysql数据库给主键增加一个自增的功能: mysql> alter table sec_user modify id integer auto_increment ; Query OK, 1 row affected (0.28 sec) Records: 1 Duplicates: 0 Warnings: 0 2.java程序添加...
  • mybatis-plus设置主键自增

    千次阅读 2022-05-05 11:22:16
    一,实体类加注解 在主键上加 @TableId(type = IdType.AUTO) 注解 二,在数据库设置主键自增
  • ORACLE 设置主键自增

    2021-10-22 16:45:11
    例:当前有表,名【test_incr】,其主键【tid】需要设置自增。 1、首先,创建【test_incr】表自增序列 create sequence test_incr_autoinc minvalue 1 maxvalue 9999999999999999999999999999 start with 1 ...
  • Oracle-设置主键自增

    2022-02-23 08:56:35
    一、设置序号 # demo_seq为序列名称 CREATE SEQUENCE TB_BNMB_SEQ minvalue 1 ...二、设置触发器自增 CREATE OR REPLACE TRIGGER Trigger_TB_BNMB BEFORE INSERT ON TB_BNMB for each row ...
  • postgresql数据库如何实现主键自增

    千次阅读 2021-06-10 18:39:49
    postgresql数据库如何实现主键自增 postgresql数据库可以创建主键,但是没有像mysql那样直接指定主键自增的auto_increment关键字,因此如果在postgresql中创建表指定主键自增使用auto_increment会报错。那么如何实现...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 119,139
精华内容 47,655
关键字:

主键自增