MySQL - 更新表的方法

时间:2012-03-15 05:46:55

标签: mysql

事先向不成熟的条款和方法论粗暴道歉。

假设我有几张像这样的表:

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

3 个答案:

答案 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和数量)