【问题标题】:Mysql column index valueMysql 列索引值
【发布时间】:2016-06-14 20:39:03
【问题描述】:

我有一个字段“优先级”为整数的表。 此优先级最初设置为从 1 到记录数 (类似于 auto_increment)。

e.g.
Id    Priority
1     1
2     2
3     3

但是,如果我想插入新记录,可以更改优先级的值 与现有的优先级。如果新记录的优先级值为 2, 当前优先级增加 1。

e.g.
Id    Priority
1     1
2     3
3     4
4     2

如果我用其他值更改现有优先级,所有记录 应该减少优先级值高于更改的优先级值, 所以在表中,优先级从 1 及以上总是唯一的(无论 记录 auto_indexed Id 字段。

目前,我的解决方案是手动的(使用 Perl 代码,以适当的方式替换所有优先级值)。

由于我之前学过Mysql很长的版本,目前我用的是5.0版本, 不知mysql是否有自动更新列的功能。

【问题讨论】:

  • 像任何其他“体面”的数据库一样:triggers
  • @MarcB:在 MySQL 中更新触发器来自的同一个表是不可能的 AFAIK。

标签: mysql database


【解决方案1】:
UPDATE table
SET @original = ?
    , @new = ?
    , priority 
        = IF(priority = @original
            , @new
            , priority 
                + IF(@original < @new, -1, 1)
            )
WHERE priority >= LEAST(@original, @new) 
  AND priority <= GREATEST(@original, @new)
;

如果提供了当前位置和新位置的参数,这应该适用于现有行的更新(更新您要更改的行,以及所有需要移动的行)。但是,如果您对 priority 有唯一性约束,它几乎肯定会违反它。

【讨论】:

    【解决方案2】:

    如果我了解您想要做什么,那么您可以通过单个查询来完成此操作

    UPDATE table SET priority=priority+1 WHERE priority > n 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多