繁体   English   中英

使用InnoDB或替代方法按组进行MySQL AUTO_INCREMENT

[英]MySQL AUTO_INCREMENT by group using InnoDB or alternatives

我正在设计一个使用MySQL数据库的Web应用程序,但我始终坚持数据库设计的优点之一。

这是我想使用InnoDB引擎存储的数据类型的示例:

user_id   account_id
1         1
1         2
1         3
2         1
2         2
3         1

从上面可以明显看出,我希望account_id为每个用户自动递增。 这是我遇到的一些问题:

  1. 我确实知道要自动执行此操作,可以使用MyISAM引擎,但经过阅读后,我意识到,当更新发生时,该引擎将锁定整个表而不是仅锁定一行。 这对我不好。 另外,MyISAM不强制执行参照完整性,我非常希望保留该参照完整性。

  2. 我已经阅读了其他人对这个问题的解决方案,并且他们使用了触发器。 我当然可以使用触发器,但是我并不喜欢触发器,因为它们比仅一张桌子更难维护。

  3. 我可能可以使用一个序列,但是我认为为每个用户维护一个单独的序列是很丑陋的。

  4. 我可以简单地使用唯一的AUTO_INCREMENT而无需考虑user_id,这会很好地工作。 我对此不满意有两件事:1.这样,我的smallint可能会增长为int或bigint,这将需要更多的存储空间。 我知道存储空间很便宜,但是我仍然想将其最小化。 2.按组自动递增会更清洁。

我想对已经遇到并成功解决此问题的那些用户提供一些反馈/意见。 也许,还有我没有想到的另一种解决方案。 也许,还有另一种我没想到的组织表格的方式。

使用简单的AUTO_INCREMENT并忽略存储:

  • 如果您要扩展到一百万个用户(每个用户有1000个帐户),则大约需要1000个帐户。 3MB的额外存储空间。
  • 单字段主索引(主要在实际存储中排序)的性能优势将比那一点存储价值更多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM