首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在现有数据库中将主键从int更改为guid

是一种常见的数据库设计和优化操作。GUID(全局唯一标识符)是一种由算法生成的字符串,具有全球唯一性。相比于使用自增的整数作为主键,使用GUID作为主键可以在分布式系统中更好地保证数据的唯一性。

概念: 将主键从int更改为guid是指将数据库表中原本使用整数类型的主键字段改为使用GUID类型的主键字段。

分类: 这个操作属于数据库设计和优化的范畴。

优势:

  1. 全局唯一性:GUID是由算法生成的字符串,具有全球唯一性,可以在分布式系统中保证数据的唯一性,避免了主键冲突的问题。
  2. 安全性:GUID是一个较长的字符串,难以被猜测和破解,提高了数据的安全性。
  3. 分布式支持:在分布式系统中,使用GUID作为主键可以避免不同节点生成相同的主键值,方便数据的分布式存储和同步。
  4. 无需中心化管理:GUID的生成算法可以在本地生成,无需依赖中心化的主键生成器,减少了系统的依赖性和复杂性。

应用场景: 将主键从int更改为guid适用于以下场景:

  1. 分布式系统:在分布式系统中,使用GUID作为主键可以避免不同节点生成相同的主键值,方便数据的分布式存储和同步。
  2. 数据库复制和同步:使用GUID作为主键可以简化数据库复制和同步的过程,避免主键冲突和数据丢失的问题。
  3. 数据安全性要求高的场景:GUID的全球唯一性和较长的字符串形式增加了数据的安全性,适用于对数据安全性要求较高的场景。

推荐的腾讯云相关产品和产品介绍链接地址: 腾讯云提供了多种数据库产品和服务,适用于不同的业务需求。以下是一些相关产品和介绍链接地址:

  1. 云数据库 TencentDB:https://cloud.tencent.com/product/cdb
  2. 云原生数据库 TDSQL:https://cloud.tencent.com/product/tdsql
  3. 分布式数据库 TBase:https://cloud.tencent.com/product/tbase
  4. 云数据库 Redis:https://cloud.tencent.com/product/redis
  5. 云数据库 MongoDB:https://cloud.tencent.com/product/cosmosdb

请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际业务需求和技术要求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Entity Framework Core 2.1,添加种子数据

这里我添加了一个省份的种子数据,并写上了主键Id的值。 数据库该表的主键Id是int自增的。Id为1的数据曾经存在过,但是被我删除了。...报错了,所以主键值是必填的。 当我填写了主键值之后,一切都是好用的了: ? ? 更改现有的种子数据 我HasData方法里更改了现有的种子数据,但是主键的值并没有改: ?...可以看到是根据主键数据库里面的数据进行Update动作。 其结果也和我想的一样,就是更新了现有的数据: ? 如果我把HasData里种子数据的主键值修改了 ? 我把四川的主键2改为3。...数据库里: ? 种子数据为什么要指定主键的值?  因为团队开发时,这样可以确保不同的开发人员、电脑、服务器上,同一个迁移版本具有相同的种子数据。...数据库里也是这样的: ? 所以最好的办法是把Guid的值放在一个变量里: ? 然后再操作一遍: ? 这样就不会出现“把原有数据删掉,再重新插入”这种操作了。

1.7K10

生成的迁移类

数据库该表的主键Id是int自增的。Id为1的数据曾经存在过,但是被我删除了。...当我填写了主键值之后,一切都是好用的了: 更改现有的种子数据 我HasData方法里更改了现有的种子数据,但是主键的值并没有改: 执行Update-Database时的SQL语句: 可以看到是根据主键数据库里面的数据进行...其结果也和我想的一样,就是更新了现有的数据: 如果我把HasData里种子数据的主键值修改了 我把四川的主键2改为3。...数据库里: 种子数据为什么要指定主键的值?  因为团队开发时,这样可以确保不同的开发人员、电脑、服务器上,同一个迁移版本具有相同的种子数据。...数据库里也是这样的: 所以最好的办法是把Guid的值放在一个变量里: 然后再操作一遍: 这样就不会出现“把原有数据删掉,再重新插入”这种操作了。

1.1K10
  • 【BCVP升级】泛型主键的使用

    int,习惯了Guid,当然也为了方便迁移数据,因为int会乱序,特别是多库的时候。...那这个时候如果我想把int主键,改成guid,工作量是多大,需要改多少地方,怎么处理逻辑,前端修改哪些地方,等等等等。...所以我就尝试了这个新课题:使用泛型主键,这样拿到这个项目的时候,自己修改下主键类型,就可以运行了,不过目前还没有百分百完善,int主键已经调通,其他类型主键,比如Guid或者自定义string还没有完成生产化...复杂的实体模型 上边写了简单的方案,但是平时开发肯定不会是这样的,不免会出现有关系的情况,也就是外键的问题,比如用户角色关系表UserRole,它里边除了主键Id以外,肯定也会包含Uid和Rid,那如何设计呢...3、其他重要提醒 不要把抽离的父类生成到数据库 BlogCore项目中,我用的是自动CodeFirst并可以生成种子数据,当生成表结构的时候,我是根据命名空间来处理的,你设计抽离的父类,比如UserRoleRoot

    66910

    数据库模型设计——主键的设计

    GUID类型SQL Server中是16个字节,不算短,比4个字节的Int32长多了。...插入新数据时,GUID一般都是使用NewId()这样的生成随机GUID的方式生成的,所以也不是顺序增长的,插入速度上不会很快。...通过上面的比较,我们知道使用数字类型是更好的方式,那么我们为什么还会有人使用GUID和字符串来当主键呢?那是因为: 相对于数字类型,字符类型更易读易记,检索关联的数据时,方便直接。...GUID,这是用于GUID类型的主键,可以使用newid()这种数据库提供的函数,或者使用程序生成Guid并赋值。 Hilo值,这是一种使用高低位算法生成的数字值的主键。...详细的主键生成,我们可以参见:http://www.cnblogs.com/chenkai/archive/2009/04/13/1434912.html 主键与索引 概念和作用上,主键与索引是完全两个不同的东西

    1.1K30

    细分主键

    2、 定义 不是说“主键”这个词的定义,而是主键用什么,比如用GUID还是用int,还是年月日时分秒+流水? 3、 生成 主键用什么确定好了之后就是如何生成了。...比如GUID,是程序里生成,还是由数据库的字段默认值来生成?采用无序的GUID还有有序的GUID?再比如int,是采用MSSQL 的自增,还是自己管理。...如果自己管理的话,那么是写一个存储过程还是代码里面写个函数(类)? 4、 安全 1,2,3,4这种主键是否够安全?是不是因为不安全就不能用了?一定要改成GUID才行?...int的和GUID的效率到底差了多少? 6、 移植 要不要考虑数据库的移植,以后会不会更换数据库?换数据库了会不会崩溃? 7、 数据合并 几个分公司的数据需要合并到一起,主键是否会冲突(重复)?...说这些的目的就是想让大家讨论的时候明确一些,虽然我们都在讨论主键,但是这个范围也是很大的。 欢迎大家继续补充。

    66060

    Oracle 在线重定义(上)

    表的表空间由EXAMPLE修改为NEWTBS。 这个例子假设NEWTBS表空间存在。 使用COMPRESS 1压缩对索引进行压缩。 索引的表空间EXAMPLE改为NEWIDXTBS。...LOB列的表空间EXAMPLE改为NEWLOBTBS。 这个例子假设NEWLOBTBS表空间存在. LOB列更改为SecureFiles LOB存储。 此重新定义中的步骤如下所示。...原因是临时表是用一个主键约束创建的,当 COPY_TABLE_DEPENDENTS 试图原始表复制主键约束和索引时,会发生错误。...请注意,使用这种方法,重新定义后的表上的主键约束和索引的名称会发生变化。另一种避免错误和名称更改的方法是定义没有主键约束的临时表。在这种情况下,主键约束和索引是原始表中复制的。...列col3和col4被重命名,并且它们表中的位置被改变。 列的类型col3 更改DATE为TIMESTAMP。 该表索引组织表 (IOT) 更改为堆组织表。 该表已进行碎片整理。

    27821

    关于Int自增字段和GUID字段的性能测试。只有测试,没有分析,呵呵

    2、 软件       Windows 2003 Server       SQL Server 2000 二、 测试目的 1、 测试多表关联的时候Int自增和GUID的性能对比。...主键、外键是Int自增 VS 主键、外键是GUID。       对比一下多表关联的情况下,二者的性能如何?       疑问:聚集索引是否都要设置到哪里?       ...对于Int的自然是把聚集索引设置到主键上了,但是GUDI呢?没有用过GUID,不清楚了。不过不管三七二十一,测试了再说。就先把聚集索引也设置到GUID上面吧。...第一组表用Int作为主键,第二组表以GUID作为主键。字段嘛,咱们就简单一点吧。 【客户信息表】 客户ID、客户名称、地址、添加时间。 其中 客户ID 是主键、聚集索引、 Int自增。...我又把数据库放到了物理硬盘里面测试了一下,这次确实慢了,差距也大了,不过慢的是Int自增的表,而不是GUID的。Int自增的要把数据全都显示出来需要40到50秒,而GUID的只用了8秒到18秒。

    1.1K100

    常见的数据库主键选取方式

    1、自动增长字段:   自动增长型字段允许我们数据库添加数据时,不考虑主键的取值,记录插入后,数据库系统会自动为其分配一个值,确保绝对不会出现重复。...如果主键不是自增,而是随机的,那么频繁的插入会使 innodb 频繁地移动磁盘块; innodb中,别的索引还都要包含主键的值,因此建立索引时占用空间小; 利用数字,容易比较排序。...缺点: 当我们需要在多个数据库间进行数据的复制时,自动增长型字段可能造成数据合并时的主键冲突。...(可以不同的分表分别从不同的起始主键开始自增,比如分表11自增,分表21000 000自增,分布式数据中也可以这么处理) 2、使用UniqueIdentifier   比如使用UUID(全局唯一标识符...:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16)   优点:通过程序直接生成GUID填充主键,不用考虑是否会出现重复。

    1.5K00

    中小型商城系统中的分类产品属性扩展属性的数据库设计

    这部分就不详细展开了,详见 无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(1)表结构 无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(2)插入记录 无限级分类...(非递归算法/存储过程版/GUID主键)完整数据库示例_(3)删除记录 无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(4)显示记录 稍微啰唆几句: 1.1 我习惯于把所有表加上前缀...1.3 之所以用guid做为主键,主要是考虑到数据库迁移时的方便,当然guid主键会带来一些性能上的损失(二害相权,取其轻也),为了改进可将guid改为comb主键(详见 “Integer GUID和Comb...做主键的效率测试”) 1.4 考虑到很多人为了各种原因喜欢把分类页生成静态页,而为了url地址的简短/友好,guid主键有些长,所以我又添加了一个辅助字段F_AutoId,这样生成的静态页可以类似"43A6162C...先回顾一下产品上传的基本逻辑,不考虑扩展属性的传统场景下:用户进入产品发布页面,选择产品分类,然后填写其它产品属性,最终保存到数据库

    2K91

    CSharpEntityFramework与CodeFirst实践

    book表(不需要此刻已经有Book表),使用[Required]特性来表明字段是否可为空,此外,由于EF默认将Id属性视为主键,所以无需使用[Key]特性来指明上面的Id为主键。...,主要的是,我是MySQL数据库,怎么能用SQL呢,所以,我们要解决EF进行MySQL的连接问题。...创建好的数据库如下: 于是,我们将其中的连接字符串connectionString内容修改为我们当前的数据库连接字符串: <add name="BookDbDemo...我们可以<em>从</em>输出中很容易的看到执行了创建book<em>数据库</em>的sql语句,以及创建了一个MigrationHistory表,这个表就是记录了<em>数据库</em>迁移的一些摘要,供我们以后来进行回退操作。...此时如果我们想要修改属性名,我们将Book中的Title属性<em>改为</em>Name属性: ...

    25910

    sql server 聚集索引,非聚集索引,Identity ,gudi,主键的概念和比较

    gudi 全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符。GUID主要用于拥有多个节点、多台计算机的网络或系统中。... Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如注册表项、类及接口标识、数据库、系统目录等对象。...主键 通常选择自增int作为主键,除非有特殊需要,并且还让SQL Server自动生成/维护该字段。...因为主键默认是聚集索引,所以我们再使用guid作为主键的时候数据量比较大的话就有性能问题。...但是如果数据量小就放心的使用吧,但是如果是分布式的数据库,又不能用int作为主键怎么办,这个时候我们可以选择两种方式混合用,再自己的数据库int 这样查询和修改就比较快,同时使用guid作为唯一标识,

    78530

    打造 .NET Core 链接转发服务

    它用于在数据库中查找源 URL。我不使用 Link.Id 的原因是,当执行数据库迁移或多个服务器合并数据库时,Id 可能会更改。但Token将保持不变。 ?...对于现有 URL,我们可以查找旧记录并返回旧Token,而不是生成新Token。在此之前,我们还需要再次验证现有URL的Token,以确保数据良好。...例如,黑客可以将数据库中的Token更改为某个恶意字符串,我不希望它最终追加到 URL 上。 所以,TryParseToken() 必须比我目前的设计更可靠。 其次,我们需要防止生成已存在的令牌。...技术上也存在可以优化的地方,比如是否需要引入HASH查找、LinkTracking表到底用不用GUID主键、索引怎么加等等,类似这些需要经过一段时间的线上实践才能做决定。...这是一个开源项目,所以我欢迎大家一起帮它变得牛逼!

    1.4K70

    DotNET企业架构应用实践-数据库表记录的唯一性设计的设计兼议主键设定原则

    ,因为本质上讲,表主键的值是必须唯一的,他即能确保表记录的唯一性。         ...相关的技术          表记录唯一性设计的技术我本文不做详细的介绍,在数据库主键设计之思考与小议数据库主键选取策略(原创)两篇文章文章之中都有非常详细的论述,请大家去这两篇文章参考,他们建议这些技术使用于主键...,而我主张用于记录的唯一性确认上。...         记录唯一性设计除了确保数据表记录的唯一性之外,还能为数据分区提供支持,不过这有一点要求,即唯一性设计必须采用整性或者并且一定连续意义的值才能处理,而如GUID这样的没有办法将来支持扩展分区的设计...本文先到此为止,在后面的文章中将会应用到这种技术并进行详细的讲解。

    66050

    SQL反模式学习笔记22 伪键洁癖,整理数据

    1、不按照顺序分配编号 插入新行时,通过遍历表,找到的第一个未分配的主键编号分配给新行,来代替原来自动分配的伪主键机制。...2、为现有数据行重新编号:通常做法是找到主键最大的行,然后用最小的未被使用的值来更新它。     ...3、制造数据差异     如果别的外部系统依赖于数据库中的主键来定义数据,那么你的更新操作就会导致那个系统中的引用失效。     ...1、定义行号:使用Row_Number()或者Limit等关键字来实现;   2、使用Guid数据库全局唯一标识符。...缺点:(1)Guid的值太长,不方便输入;        (2)Guid的值是随机的,因此找不到任何规则或者依靠最大值来判断哪一行的最新插入的;        (3)Guid的存储需要16字节,这比传统的

    75630

    【MyBatis框架点滴】——mybatis插入数据返回主键(mysql、oracle)

    主键的值都是插入之前无法知道的,但很多情况下我们插入数据后需要使用刚刚插入数据的主键,比如向两张关联表A、B中插入数据(A的主键是B的外键),向A表中插入数据之后,向B表中插入数据时需要用到A的主键。...数据库为mysql ---- 主键为自增时(主键为数值类型且自增)   利用mysql的LAST_INSERT_ID()方法获取插入记录的主键,select LAST_INSERT_ID()可以插入数据后...主键为UUID时(主键必须为字符类型)   使用mysql的方法UUID()方法获取随机的UUID作为主键,select UUID()可以插入数据前,生成随机的UUID并通过keyProperty赋值给将要插入记录的主键...背 景数据库为oracle: 主键为自增时(主键为数值类型):   oracle中实现主键自增,需要先创建序列,相当于创建一个全局变量,用来存储对应表的主键的当前最大值(主键为数值类型时)。   ...UUID时   用oracle自带的SYS_GUID()方法获得随机的GUID作为主键: <insert id="insertUser" parameterType="com.danny.mybatis.po.User

    2K20

    简介

    public int NoWriteCol { get; set; } } 上面的Demo类里面包含了Dapper.Contrib的所有实体配置选项 Table:指定实体对应地数据库表名,可忽略...,但是忽略后实体对应地数据库表名会在末尾加个s,Demo对应Demos(感觉画蛇添足了) Key:指定此列为主键(自动增长主键),可忽略,忽略后默认查找 ExplicitKey:指定此列为主键(不自动增长类型例如...guid,ExplicitKey与Key地区别下面会详细讲) Computed:计算属性,打上此标签,对象地insert,update等操作会忽略此列 Write:需穿一个bool值,false时insert...区别是打上Key特性的列插入时是不能指定值的,只能是数据库自动增长列,而ExplicitKey特性可以允许插入时指定值,比如用guid主键类型,则主键插入时必须已经生成好。... list); bool Delete(T obj); bool Delete(Enumerable list); bool DeleteAll(); 值得注意的是,源码得知

    72030

    Redis的介绍及使用实例.

    另外,比较适合使用Redis来生成每天0开始的流水号。比如订单号=日期+当日自增长号。可以每天Redis中生成一个Key,使用INCR进行累加。...2、insert和update操作时使用INT的性能比GUID好,所以使用int将会提高应用程序的性能。     3、index和Join 操作,int的性能最好。     4、容易记忆。    ...使用INT主键的缺点     1、如果经常有合并表的操作,就可能会出现主键重复的情况。     2、使用INT数据范围有限制。如果存在大量的数据,可能会超出INT的取值范围。    ...使用GUID主键的缺点:     1、存储空间大(16 byte),因此它将会占用更多的磁盘大小。     2、很难记忆。join操作性能比int要低。    ...3、没有内置的函数获取最新产生的guid主键。     4、GUID主键将会添加到表上的所以其他索引中,因此会降低性能。 3.

    72190

    生成唯一随机码的方法及优缺点分析

    下面总结一些常用的产生随机码的方法 网络上采集了一些思路,做一下分析。 1....自己写代码产生随机的数字和字母组合,每产生1个去数据库查询该随机码是否已存在,如果已存在,则重新产生,直到不重复为止。      优点:没发现有啥优点。      缺点:产生速度慢,数据库交互频繁。...2. guid,该方法应该是用的比较多的。   优点:使用简单方便,不用自己编写额外的代码   缺点:占用数据库空间相对较大,特别是根据guid查询速度比较慢(毕竟是字符串)。 3....主键+随机码的方式,我们产生的随机码保存到数据库肯定会有个主键,用该主键+随机字符来组合。...缺点:需要使用id产生器,如果主键数据库自增长的就不太好用(需要先进入数据库获取id,再更新邀请码)。 4. 有时候产品经理说,我要求邀请码都是数字的。why?no why? 我喜欢。

    1.1K20
    领券