自增ID(int):
一般在单机项目,或者小型项目里,使用 自增 ID(int):优点:
(1)数据库自动编号,速度快,而且是增量增长,按顺序存放,对于检索非常有利;
(2)数字型,占用空间小,易排序,在程序中传递也方便;
(3)如果通过非系统增加记录时,可以不用指定该字段,不用担心主键重复问题。
其实它的缺点也就是来自其优点,缺点如下:
(1)因为自动增长,在手动要插入指定ID的记录时会显得麻烦,尤其是当系统与其它系统集成时,需要数据导入时,很难保证原系统的ID不发生主键冲突(前提是老系统也是数字型的)。特别是在新系统上线时,新旧系统并行存在,并且是异库异构的数据库的情况下,需要双向同步时,自增主键将是你的噩梦;
(2)在系统集成或割接时,如果新旧系统主键不同是数字型就会导致修改主键数据类型,这也会导致其它有外键关联的表的修改,后果同样很严重;
(3)若系统也是数字型的,在导入时,为了区分新老数据,可能想在老数据主键前统一加一个字符标识(例如“o”,old)来表示这是老数据,那么自动增长的数字型又面临一个挑战。
UUID(varchar)优点:
(1)在分库分表的情况下,UUID 更符合项目的架构
(2)系统集成时,可以更好的对关联表数据进行修改。
(3)对老数据的处理更加方便,直接在主键前加 标示性字符就可以
当然缺点也很明显:
(1)检索时不够便捷
(2)字符型占用空间大,不易排序,会引来不必要的代码
(3)数据量过大时候,需要考虑到 id 是否重复的问题。
自增ID(int):一般在单机项目,或者小型项目里,使用 自增 ID(int):优点:(1)数据库自动编号,速度快,而且是增量增长,按顺序存放,对于检索非常有利;(2)数字型,占用空间小,易排序,在程序中传递也方便;(3)如果通过非系统增加记录时,可以不用指定该字段,不用担心主键重复问题。其实它的缺点也就是来自其优点,缺点如下:(1)因为自动增长,在手动要插入指定ID的记录时...
之前有段时间用postgresql 数据库,在上云之后,从
自增
主键
变为
uuid
,感觉
uuid
全球唯一,很方便。
最近用mysql,发现mysql
主键
都是选择
自增
主键
,仔细比较一下,为什么mysql选择
自增
主键
,有什么不同。
在mysql5.0之前,如果是多个master复制的环境,无法用
自增
主键
,因为可能重复。在5.0以及之后的版本通过配置
自增
偏移量解决了整个问题。
什么情况下我们希...
偶然的机会,得知mysql
主键
的类型采用
varchar
存
UUID
的查询性能没有
int
型做
主键
好。网上查询大量资料,都是停留在理论上的,因此,自己写了代码进行实测,以下结果仅供参考,不具备权威性。
三个表的字段,除了
主键
ID
分别采用
varchar
,big
int
和自动增长big
int
不同外,其他三个字段都为
varchar
36位
数据库:mysql5.5
表类型:InnoDB
数据...
最近在使用数据库要建表选择
主键
的时候,突然想到经常使用的两类
主键
id
——
自增
id
和
UUID
有什么区别,用那种更好?之前使用MySql的时候通常直接就选择了
自增
id
了,工作的时候也看到有些项目使用
UUID
做
主键
,但是都没怎么考虑两者的区别,
优缺点
之类的。现在要键新表选择
主键
的时候,就需要考虑选择哪种做
主键
了,因此就有了这篇文章
本文首先分别简单为什么数据库需要
主键
,然后介绍
自增
id
和
UUID
,接着比较两者的区别,最后给出何时使用哪种类型做
主键
更好。
关系型数据库中的
主键
在关系型数据库模型中,关系型数据库是一
答案是:在互联环境下使用
UUID
好,因为数据的安全性。
我们都知道
自增
id
有:存储空间小,性能高,好记的优点,但是在分布式系统中容易出现
id
容易出现重复情况,还有是数据安全性比较低,容易根据
id
号推测出有多少数据,其他数据的
id
是什么。
而
UUID
的最大优点:不好记忆,没有规律性,基本不会出现重复情况,所以在分布式系统和互联网中大量的被使用,不好的地方就是比较占用存储空间,性能相对
自增
id
较低。
数据库
自增
长
ID
,不需要设置和绑定
ID
数据列。在往数据库中插入数据的时候,数据库会自动为每条数据生成一个递增的
ID
,本文做了详细的说明。如下图:
实例??? 第一步:登陆PG
??? 第二步:创建表
??? 第三步:现在往表中插入几条记录??? 查看 COMPANY 表的记录如下
大家点赞、收藏、关注、评论啦 ???微信公众号???...
可以使用
UUID
作为
主键
,但是
UUID
是不可
自增
的。如果需要
自增
主键
,可以使用MySQL提供的AUTO_INCREMENT属性。例如:
CREATE TABLE `table_name` (
`
id
`
INT
(11) NOT NULL AUTO_INCREMENT,
`name`
VARCHAR
(50) NOT NULL,
PRIMARY KEY (`
id
`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
其中,
id
为
自增
主键
,每次插入数据时会自动增加。