数据库使用自增主键的弊端(数据库主键自增带来的问题)

软件开发 19
今天给各位分享数据库使用自增主键的弊端的知识,其中也会对数据库主键自增带来的问题进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!mysql中InnoDB表为什么要建议用自增列做主键 InnoDB 被称为索引组织型的存储引擎。主键使用的 B-Tree 来存储数据,即表行。这意味着 InnoDB 必须使用主键。如果表没有主键,InnoDB 会向表中添加一个隐藏的自动递增的 6 字节计数器,并使用该隐藏计数器作为主键。InnoDB 的隐藏主键存在一些问题。您应该始终在表上定义显式主键,并通过主键值访问所有 InnoDB 行。InnoDB 的二级索引也是一个B-Tree。搜索关键字由索引列组成,存储的值是匹配行的主键。通过二级索引进行搜索通常会导致主键的隐式搜索。

今天给各位分享数据库使用自增主键的弊端的知识,其中也会对数据库主键自增带来的问题进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

mysql中InnoDB表为什么要建议用自增列做主键

InnoDB 被称为索引组织型的存储引擎。主键使用的 B-Tree 来存储数据,即表行。这意味着 InnoDB 必须使用主键。如果表没有主键,InnoDB 会向表中添加一个隐藏的自动递增的 6 字节计数器,并使用该隐藏计数器作为主键。InnoDB 的隐藏主键存在一些问题。您应该始终在表上定义显式主键,并通过主键值访问所有 InnoDB 行。InnoDB 的二级索引也是一个B-Tree。搜索关键字由索引列组成,存储的值是匹配行的主键。通过二级索引进行搜索通常会导致主键的隐式搜索。

使用GUID和自增数字ID作为主键,各有什么好处和坏处

GUID可以做分布式系统。还有就是,Oracle中不原生支持自增。

1——

GUID过长,看表现形式,至少都有32位,长的38位,浪费存储空间。

2——

GUID是根据硬件设备相关ID以及时间戳生成的

3——

GUID不利于检索、外键关联

好处:

1——

一般来说不担心有冲突的影响,而且,根据GUID的生成规则,还能大致知道生成的计算机硬件设备、时间等信息(但这个有多少意义呢)

2——

能在业务层就知道目标ID,而不是数据提交给数据库系统后才确定。

数据库建表,主键采用自增列的问题

主键是惟一的,但是主键可以是个集合,比如

学生表(学号,姓名,性别,班级)

其中每个学生的学号是唯一的,学号就是一个主键

课程表(课程编号,课程名,学分)

其中课程编号是唯一的,课程编号就是一个主键

成绩表(学号,课程号,成绩)

成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以

学号和课程号的属性组是一个主键

数据库 主键 自动增长 缺点

索引跟主要没有关系.. 用自动增长列做主键!而且自动增长列的数据类型必须是int

数据表的设计视图中,带有主键的自动编号类型字段是否可以改成数字类型?

当然可以,主键的设置方法有3种:

一种是设置自增长主键,第二种是采用业务主键,第三种是生成唯一序列(使用uuid/guid);

如何选择主键设置方式:

1.主键的使用目的:

a.为了保证数据查找唯一;

b.提高存储效率和索引效率。

2.使用自增主键的场景:

a:表中找不出3个以内字段可以表示的业务主键

b:没有集中大量的插入操作

c:不使用自增id作为外键(即id变化不影响系统逻辑和功能)

此外自增主键的规律很明显,为了不让别人轻易的采集数据,同时符合以上条件,则优先选择自增主键;

3.使用业务主键做id:

a.如果你设计的表上存在非重复数据列,且常以该列检索数据,或该列还关联其他表的外键,譬如学号、会员卡号、身份证号这些,可以用来作为主键,主键在默认设置下是聚集索引,这样检索学号、卡号这些效率上就会比较高。

4.使用生成唯一的序列

a.如果不满足使用自增的要求,则建议优先使用字符主键。类似网站数据库,可以采用uuid、guid这类无规则字符做主键。因为字符主键查询速度不比自增主键慢。

b.考虑自增主键的弊端。很多表的ID会被其他表引用为外键,而且自增主键弊端是,用DELETE删除后,不会从新接着自增,而是接着删除前的ID自增;在多数据库迁移下,自增则会很繁琐,需要另外做联合主键才能保证数据的唯一性。

关于数据库使用自增主键的弊端和数据库主键自增带来的问题的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

数据库使用自增主键的弊端
扫码二维码