【问题标题】:I want an automatically incrementing column that starts over if column 1 = ? and column 2 =?我想要一个自动递增的列,如果列 1 = 则重新开始?和第 2 列 =?
【发布时间】:2021-11-04 15:45:45
【问题描述】:

我正在为名为“playlist_songs”的 spotify 副本构建一个播放列表表,如下所示:

playlist_songs table

此表由外键组成:playlistID、userID 和 songID。我认为它的主键将是 playlistID、userID 和 orderID 的组合。

我希望 orderID 是一个自动递增的整数,对于每个唯一的 playlistID/userID 组合,它从 1 开始。

我还希望用户能够更改他们歌曲的顺序,这在某些情况下需要为给定的 playlistID/userID 组合更新以下所有 orderID

我将如何实现这一目标?仅使用 SQL 是否可行?

【问题讨论】:

  • 请添加一些您尝试过的示例。如果你甚至不知道从哪里开始,但你真的想使用纯 SQL,我会尝试类似这个伪代码INSERT ((select coalesce(max(orderid),0) from thetable where playlistID= myPlaylistID and userID = myUserId) + 1) INTO thetable。本质上,您是在告诉插入语句检查该用户的当前最大值(如果没有最大值,则为零),然后添加一个并插入。

标签: sql playlist


【解决方案1】:

有时我想不通很多 DB 都有一个在 DB 上增长并安全增长的自动增量字段类型(序列),一些开发人员想手动增加这个字段,为什么?

如果您想手动增加字段值,您必须在更新前锁定这些记录,更新后(增加后)您可以解锁该记录。这是必要的,以便同时可能意外获得重复值以从其他用户插入。为了安全增加,必须使用 select for update 命令。

For more information how we can use this command please visit this link

为了订购歌曲,我建议通过订购添加一个额外的字段。 更新playlistIDorderID 订购歌曲,不推荐这样做

附注有时,在我们的表中,主键可以是两个或三个字段的组合。但我建议为主键添加一个自动增量id 字段,通常我们会连接表,在连接条件下,我们会使用一个条件而不是三个条件。

【讨论】:

    猜你喜欢
    • 2017-11-03
    • 2011-12-29
    • 2021-06-27
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多