精华内容
下载资源
问答
  • Oracle如何创建自增长主键Oracle主键常用的分为UUID和自增长int两种,下面简单说下各自的优缺点:UUID的优点1、生成方便,不管是通过sys_guid() 还是java的uuid都能很方便的创建UUID。2、适合批量数据中的插入和更新...

    f81b58f57d60a97ef3d51f4d6bbd6159.png

    Oracle如何创建自增长主键

    Oracle主键常用的分为UUID和自增长int两种,下面简单说下各自的优缺点:

    UUID的优点

    1、生成方便,不管是通过sys_guid() 还是java的uuid都能很方便的创建UUID。

    2、适合批量数据中的插入和更新操作。

    3、跨服务器数据合并非常方便。

    INT自增长的优点

    1、占用空间小

    2、性能好,UUID跟int比起来不在一个级别上

    3、容易记忆

    他们各自的优点就是彼此的缺点

    推荐 《mysql视频教程》

    适用范围:

    一般在分布式环境中使用UUID作为唯一主键,至于其他项目本人强烈建议使用int作为主键。

    PS:最近我的一个分布式项目在周末访问高峰期也是会出现UUID重复的情况,所以UUID号称的全球唯一ID这个优点我没写上去,而我们可以使用Zookeeper作为主键生成器创建int类型的唯一主键,这是完全没有问题的。

    所以综上我还是建议所有的主键都应该使用int类型,在千万级别的数据量上int类型的优点尤为明显。

    Oracle创建自增长的步骤:

    创建自增长序列-- 创建自增长序列create sequence seq_on_chance_contractincrement by 1 -- 每次加1start with 1 -- 从1开始计数nomaxvalue -- 不设置最大值nocycle -- 一直累加nocache;

    创建数据表

    主键可以使用INTEGER和NUMBER,若系统使用Hibernate作为ORM框架则不推荐使用NUMBERcreate table TBL_CHANCE_CONTRACT( ID INTEGER PRIMARY KEY, CHANCE_SUCCESS_ID VARCHAR2(50) not null, CONTENT CLOB, CREATE_USER_ID VARCHAR2(50), CREATA_USER_NAME VARCHAR2(80), CREATE_DATE TIMESTAMP(6))

    创建主键触发器,以便新增记录的时候不需要管理ID主键-- 创建主键触发器 CREATE OR REPLACE TRIGGER tg_on_id_chance_contract BEFORE INSERT ON TBL_CHANCE_CONTRACT FOR EACH ROW WHEN (new.ID is null)BEGIN SELECT seq_on_chance_contract.nextval into:new.ID from dual;END;

    一些小技巧:

    查看所有的序列、表-- 查找所有SEQUENCE、TABLEselect * from user_objects ubs;-- 查找所有SEQUENCEselect * from user_objects ubs where ubs.OBJECT_TYPE='SEQUENCE';

    查看当前序列到了多少select seq_on_chance_contract.nextval from dual;select seq_on_chance_contract.currval from dual;

    重置序列

    一般重置序列是需要删除序列然后重建,但是这样比较麻烦,在不删除序列的情况下有以下2中方式:

    1、利用步长参数,先查出sequence的nextval,记住,把递增改为负的这个值(反过来走),然后再改回来。

    假设需要修改的序列名seq_on_chance_contract-- 重置序列select seq_on_chance_contract.nextval from dual; -- 假设得到结果 nalter sequence seq_on_chance_contract increment by -2; -- 注意是 -(n-1) select seq_on_chance_contract.nextval from dual; -- 再查一遍,走一下,重置为1了 alter sequence seq_on_chance_contract increment by 1; -- 还原

    2、利用存储过程实现 (v_seqname)create or replace procedure seq_reset(v_seqname varchar2) as n number(10); tsql varchar2(100); begin execute immediate 'select '||v_seqname||'.nextval from dual' into n; n:=-(n-1); tsql:='alter sequence '||v_seqname||' increment by '|| n; execute immediate tsql; execute immediate 'select '||v_seqname||'.nextval from dual' into n; tsql:='alter sequence '||v_seqname||' increment by 1'; execute immediate tsql; end seq_reset;

    然后调用存储过程:exec seq_reset('v_seqname');

    本文来自php中文网,mysql教程栏目,欢迎学习!

    展开全文
  • MySQL如何创建主键 Alter table add PRIMARY KEY的用法和例子
                   

    -- 创建一个无主键的表格create table testNoPK (  id int not null,  name varchar(10) ); -- 创建索引 alter table testNoPk    add primary key PK_testNoPK (id);

               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • MySQL如何创建主键,外键和复合主键

    千次阅读 2019-10-28 14:36:13
    1.主键语法 ①创建时:create table sc ( studentnoint, courseidint, scoreint, primary key (studentno) ); ②修改时:ALTER TABLE table_name ADD CONSTRAINT pk_name PRIMARY KEY(列名); 前提是原先没有...

    1.主键语法

    ①创建时:create table sc (
        studentno    int,
        courseid    int,
        score    int,
        primary key (studentno) );

    ②修改时:ALTER TABLE table_name ADD CONSTRAINT pk_name PRIMARY KEY(列名);

    前提是原先没有设置主键。

    2.外键语法

    ①创建时:create table sc (
        studentno    int,
        courseid    int,
        score    int,
        foreign key (courseid) );

    ②修改时:

    ALTER TABLE news_info[子表名]   ADD CONSTRAINT FK_news_info_news_type[约束名] FOREIGN KEY (info_id)[子表列] REFERENCES news_type[主表名] (id)[主表列] ;

    3.使用组合主键

    如果一列不能唯一区分一个表里的记录时,可以考虑多个列组合起来达到区分表记录的唯一性,形式

    ①创建时:create table sc (
        studentno    int,
        courseid    int,
        score    int,
        primary key (studentno,courseid) );
    ②修改时:alter table tb_name add primary key (字段1,字段2,字段3);

    前提是原来表中没有设置主键,若原先已有主键则会报错。

    展开全文
  • ---- 创建表 create table t_student ( id number(10) not null, createtime  date not null, constraint pk_t_student primary key (id) ) ---添加注释 comment on table t_student is '学生表';...

    ---- 创建表

    create table t_student

    (

    id   number(10) not null,

    createtime  date not null,

    constraint pk_t_student  primary key (id)

    )


    ---添加注释

    comment on table t_student is '学生表';

    comment on t_student.id    is '学号';

    comment on t_student.createtime    is '创建时间';


    --- 创建序列,用来生成自增主键


    create sequence seq_t_student

    minvalue 1 ----最小值

    nomaxvalue ----没有最大值

    start with 1 ----从1开始

    increment by 1 ----每次增加1

    nocycle ----一直增加,不循环

    cache 10; ----缓存10条


    --- 创建触发器,以用来使用已创建好的序列来生成主键


    create or replace trigger t_s_student

    before insert on t_student for each row  

    when(new.id is null) 

    begin

    select seq_t_student.nextval into :new.id from dual;

    end;


    展开全文
  • SQLite Autoincrement In SQLite, every row of every table has an 64-bit signed integer ROWID. The ROWID for each row is unique among all rows in the same table. You can access the ...
  • -- 创建一个无主键的表格 create table testNoPK ( id int not null, name varchar(10) ); -- 创建索引 alter table testNoPk add primary key PK_testNoPK (id); alter table tb_name ...
  • 一个表可以有多少主键? 1、数据库中的每张表只能有一个主键,不可能有多个主键 ...Django中如何创建联合主键 单张表内建立联合主键 class IotTemp(models.Model): seq_no = models.IntegerField(blank=False, ...
  • 如何创建联合主键

    千次阅读 2017-12-31 09:03:00
    create table score( sno varchar(20) not null,#学号(外码) cno varchar(20) not null,#课程号(外码) degree decimal(4,1),#... primary key(sno,cno),#联合主键 foreign key(sno) references student...
  • 如何创建复合主键

    千次阅读 2012-06-03 00:08:23
    查了一下关于复合主键的用法: 比如:用户名和×××号,这两个绑定到一块具有唯一性,如果两个人名字和×××号一模一样,则第二...①创建时:createtablesc ( studentnoint, courseidint, scoreint,primarykey(st...
  • 创建之后如何增加主键

    千次阅读 2019-07-15 16:34:15
    创建完成之后需要加主键,可以用: alter table 【表名】 add constraint 【主键名】 primary key (【字段】);...那如何在表创建时建主键呢? 创建用户表: 第一种: create table user (sno char(5) pri...
  • 主键自增在插入数据的时候是很实用的,可以获取并操作返回的插入记录的ID,接下来介绍Oracle如何创建主键自增表,感兴趣的你可以了解下,就当是巩固知识,希望此文对你有所帮助
  • C#如何给DataTable创建主键

    千次阅读 2019-06-14 11:17:39
    private DataTable TblITEM = new DataTable(); TblITEM = MyDataset.Tables[0];//从数据库中查出值给TblITEM ...//PK_SPID为主键名 TblITEM.PrimaryKey = pk; dataGridITEM.DataContext = TblITEM;
  • <div><p>目前遇到一个需求,对数据修改时需要保存数据的历史记录,历史记录...忽略主键创建可以最小代价实现,但是忽略主键不知道有没有方法实现</p><p>该提问来源于开源项目:dotnetcore/FreeSql</p></div>
  • PostgreSQL如何主键创建自增序列(Sequences)

    万次阅读 多人点赞 2017-10-10 13:12:45
    在持久层框架如Hibernate(JPA)、Mybatis中经常会用到Sequences(函数)去创建主键值, PostgreSQL中,用serial数据类型的主键,数据库会自动创建Sequences, 那么我们自己设置的integer...pgAdmin中如何创建Sequences
  • Oracle如何创建自增长主键Oracle主键常用的分为UUID和自增长int两种,下面简单说下各自的优缺点:UUID的优点1、生成方便,不管是通过sys_guid() 还是java的uuid都能很方便的创建UUID。2、适合批量数据中的插入和更新...
  • 之前用mysql习惯了,所以建表都是有自增主键的,建表规范里面大部分都是这样约定的,比如:(`id` BIGINT (11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键id'),那么到了postgres里面,发现么有这样的类似...
  • class CreateBlogs def self.up ...自定义主键也就是说如登陆用的 userid 如果用userid 做主键 怎么做 create_table :blogs :primary_key => primaryId do |t| 怎么来定义它是字符串的
  • 想要在主表上创建一个自增的唯一建,保证这个字段在全局唯一(包括所有子表)。 而又想用 PostgreSQL 10版本的分区表的功能。 但在创建表的时候,出现如下问题。看起来是 PostgreSQL 10版本不支持在分区表上创建 ...
  • 请问mysql如何创建主键的聚集索引,就是主键是kid然后自增,然后我将addTime作为聚集索引,请问怎么写sql 另外,我用了power designer,里面的key就是主键?index好像只有唯一和非唯一,没有其他选择了,请问...
  • 1,alter table 表名 add primary key (字段名);创建数据库表时忘了添加主键,添加主键。 2,alter table 表名 drop primary key;删除主键; 3,alter table 表名 modify 字段名 int primary key;
  • <p>MySQL的二级索引(非聚集索引)存储的是主键的值,因此为进行二次查询,但是当没有指定主键的情况下是如何查询的呢?是直接定位到数据的行的物理位置吗?</p>

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,288
精华内容 515
关键字:

如何创建主键