数据库建表疑问,是否要用复合主键?
我需要建一张表:
OrderId* UserId OrderDate Total
1 1 2017-1-1 100
2 1 2017-1-1 120
3 9 2017-1-1 20
4 12 2017-1-1 88
一般情况下我们就用OrderId作为主键,查询的时候也是where UserId='x'作为条件查询的。
但是我想知道是否有必要建立这样的结构:
UserId* OrderId* OrderDate Total
1 1 2017-1-1 100
1 2 2017-1-1 120
9 3 2017-1-1 20
12 4 2017-1-1 88
同时把UserId和OrderId作为复合主键,当用户1在更新的数据的时候,用户9来查询时能够立即返回结果,而不用等1锁表结束?
是否这样设计在多用户需求的场景下可以划分数据的操作细粒度?
求大神来帮忙,小的感谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
沉下去了呢,没有人搞这个吗?这里难道都是JS专区?
毫无必要,根据主键更新数据只会锁定一行数据,而不是锁定整个表。
不建议在数据库层面加锁,建议通过服务端的内存锁(锁主键)。当某个用户要修改某个id的数据时,把要修改的id存入memcache,若其他用户触发修改此id的数据时,读到memcache有这个id的值时,就阻止那个用户修改。原文详情