事先向不成熟的条款和方法论粗暴道歉。
假设我有几张像这样的表:
ARTISTS
artistId | artistName
1 | Led Zeppelin
2 | Pink Floyd
ALBUMS
cdId | artistId | title
1 | 1 | Physical Graffiti
2 | 1 | Led Zeppelin IV
3 | 2 | Wish U Were Here
我正在尝试找出一种在几种情况下更新ALBUMS表的灵活方法(尽管在我的实际表格中,标题实际上是title_id,键入存储在单独表格中的ID)。
我。如果我出售我的两张LZ CD并购买“神圣之屋”,我应该删除ALBUMS中artistId = 1
所有现有记录,并插入新的记录作为“更新”的方式吗?我关注的是可能会耗尽AUTO_INCREMENT主键ID,但我承认我怀疑我的想法会看到无条件INT无法处理的流量,并且比实现起来容易得多。我当前的错综复杂的想法(对于我要添加的n
个新记录,查找不匹配的n
个现有记录中的第一个m
,更新这些记录,然后删除剩余的记录m - n
现在无关的记录,如果我基于“Led Zeppelin”的更新,至少需要一个初步的子查询来获取AID。
I.1。如果我想添加“HOTH”但删除“IV”怎么办?我是否仍应删除现有记录并重新添加它们?
II。如果我只想纠正一个拼写错误怎么办?如cdId = 2
?
答案 0 :(得分:0)
也许这个article会让你改变主意并使用GUID代替auto_increment作为主键。
答案 1 :(得分:0)
予。就个人而言,如果我能帮助它,我永远不会删除行。考虑添加数量字段以存储所述专辑的实例数量。
你不太可能没有自动增量,但如果你有疑问......请使用bigint。你绝不会卖那么多专辑。
I.1同样,删除这样的行是不好的做法。如果您有数量字段,请递增1,递减另一个。
II。纠正错字?如在" UPDATE ALBUMS
SET title =' Led Zeppelin ZOSO'在哪里cdId = 2"?
答案 2 :(得分:0)
我会将ALBUMS保留为每个艺术家制作的所有专辑的列表,并制作表OWNAGE,其中包含您拥有的CDId的专辑(或者用户和cdId的id,或者用户ID,cdId和数量)