数据库可以没有主键么,如果可以怎么取消已有的主键

此操作就像数据库管理的更改。
其实我以前在工作中也遇到过类似的情况。

我记得那是2 02 0年,我在一家互联网公司担任数据库管理员。
当时,一个项目组想要删除表的主键。
之前这张表的主键是自增ID字段,但后来发现不需要这个ID字段,因为其他字段组合也可以唯一标识一条记录。

我们决定这样做:首先,我们确认没有其他业务逻辑依赖于这个 ID 字段。
然后我们修改字段的属性,将原来的主键字段“ID”改为普通字段。
接下来,我们选择一个合适的字段作为新的主键。
该字段是用户名,因为它唯一标识用户。

修改完成后,我们进行了全面测试,以确保数据完整性和应用程序稳定性。
最后,我们正式删除了 ID 字段的主键属性,并将用户名字段设置为新的主键。

整个过程比较顺利,但也提醒我们,设计和修改数据库需要谨慎,一定要保证改动不会影响数据的准确性和系统的稳定性。
无论如何,这取决于你。
此类活动需要小心进行。
毕竟数据库是业务的核心部分。
我现在还在思考这个问题,如何在不影响业务的情况下动态适配数据库结构。

数据库表可否没有主键

嘿嘿,我基本同意你说的,但是感觉有点混乱……我给你解释一下。

上周,帮助我在上海开发一家初创数据库公司。
他们有一张表,有1 00多组数据,只存储了用户的一些基本信息。
表结构也很简单,只有几个字段。
那家伙坚称他没有使用第一把钥匙,并说他必须手动添加序列号字段作为 ID。
他认为这很灵活……但我却为此挣扎了很长时间。

你说得对吗?回复反对意见2 :猜测不能是多余的。
总的数据很小,比如几十个。
即使不添加主键,仍然可以通过与其他字段组合使其唯一,查询也不会慢很多。
文件结构很简单,似乎很容易设置。

但是问题来了。
想一想,只有1 00种方法,但是之后呢?如果他扩大业务,数据会翻多少倍?如果不添加主键,查询的效率肯定会首先受到影响。
数据库没有主键。
它必须弄清楚如何定位数据。
使用其他字段建立索引是可以的,但是效率肯定没有直接使用主键索引高。
上次看一个老项目,一张几十万条记录的表,因为没有主键,每次查数据都那么慢,差点把老板逼疯了。

而且,考虑到分心,还有另一个巨大的陷阱。
在没有主键的情况下,如果要保证某些字段是唯一的,往往可以对这些字段添加约束,这使得表结构变得非常混乱。
想一想,如果以后需要改数据,维护的价格会很高吗?数据一致性很难保证。

我遇到的问题是我之前没有在项目中的表中添加主键。
结果当我做报告并参考其他板块的时候,搜索直接爆炸了。
终于添加了,这是姗姗来迟的。

所以你看,虽然系统中可能没有必要,为了不让以后后悔,还是加个主键比较好。
自动增长的数字身份证虽然简单粗暴,但却很有效。
除非你比较确定这个表中给出的剂量是绝对确定的,而且是小剂量,那么你可以尝试……但说实话,风险很高。
至少根据我的经验,给表添加主键是标准操作,默认添加没有任何问题。

现在数据库建表是不是很多表并不靠主键和外键来约束?

嘿嘿,说一下我遇到的情况吧。
去年我在北京做一个电商平台,有很多后台面板。
有一个表记录了用户收藏的产品,称为收藏夹表。
想想看,用户 A 收集了 1 00 个物品,用户 B 收集了 2 00 个物品。
这两个表与用户ID和产品ID相关。
后来我发现产品列表非常大,一次有数百万个项目。
用户每次收藏新产品时,都必须检查产品表以查看该产品是否存在,然后将其添加到收藏夹。
测试非常滞后,用户等不及。

此时我想了一下,主键和外键不用担心,保证了数据的一致性。
但查询速度很慢。
接下来发生了什么?我直接对favorites表中的Product_id添加了一些特殊处理。
例如,您可以添加一个自动递增的favorite_id,并使用favorite_id来关联产品表的Product_id,而不是直接关联产品表的Product_id。
这样集合表内部使用自增ID,外部只识别product_id。
查询时,先查看集合表,得到product_id,然后再去products表。
感觉有点慢,但用户没有这种感觉。
此外,在设计方面,我认为集合、用户和产品之间的关系足够紧密,不需要外键。

此外,有时棋盘只是自己玩,例如日志板。
日志记录了发生的事情、谁做的以及何时做的。
和其他表没有关系,为什么要加外键呢?加起来就麻烦了。
但是,如果你构建一个订单系统,并且订单与用户、产品、地址密切相关,那么你不需要外键吗?这不现实。
数据相符吗?绝对是外键。

你看,这件事没有绝对的。
去年我在上海从事政府系统工作。
表间关系复杂,没有外键?我不敢去想。
但在大数据分析涉及的数据仓库中,很多表都有自己的一组ID,不需要在外部进行关联。
使用 ETL 时它们将被对齐。
这一幕不一样。
这取决于您对表的预期用途、数据量有多大以及一致性或查询是否是关键。

为什么会 无法获得主键,因此无法进行后续操作

那天我熬夜改代码,突然网站无法访问了。
我的心猛地一跳,赶紧查看日志。
发现数据库无法写入,说明表空间已满。
这是非常令人担忧的,因为它最近才被转移到这个新服务器。
我首先快速查看了数据库状态。
事实上,有一个临时表占用了太多空间,必须手动删除。
权限也确认了,没有问题。
后来我想,修桌子是这个时候的常见操作。
使用 phpMyAdmin 解决方案非常简单。
我之前在我的公司使用过一个名为 cdb_activityapplies 的活动申请表。
我忘了是不是这个了无论如何,某个特定的表出了问题,数据被插入了乱码。
登录 phpMyAdmin,找到该表,选择它,单击“修复”并等待几分钟。
如果你有自己的服务器,直接运行即可;如果是租用的,则必须先下载备份,导入本地,然后进行修复。
不会了,问题已经解决,网站又可以正常运行了。
等等,还有别的事。
当我查看备份时,我注意到桌子前面似乎有一张纸条,上面写着“活动申请记录”。
具体是什么活动?我需要再次检查日志。