【问题标题】:MySql Compound Unique Index of type VarcharVarchar 类型的 MySql 复合唯一索引
【发布时间】:2017-11-25 03:10:48
【问题描述】:

这是我的情况:

• I have a table of users <br><br>
• I have a table of movies <br><br>
• I have a table of user_movies that associates users to movies that stores a frequently changing "score" column on each record.<br><br>
• I need to be able to bulk update the user_movies table for speed and to do so I believe I need a unique index to be able to pull off bulk updates like this.<br><br>
• Considering each user_movie combination is unique, would it be possible to do 

使用(User_id---&gt;) uid_mid (&lt;----movie_id) 之类的东西作为唯一标识符?如果是这样,如何将现有表转换为这个?

【问题讨论】:

  • 我不确定我是否理解您的要求,但您知道您可以在两列上创建索引,对吧? “CREATE UNIQUE INDEX myindex ON user_movies(user_id, movie_id)”(如果您始终在针对该表的所有查询中指定两列,则列的顺序无关紧要)。
  • 如何使用 2 列共同构成唯一索引但不单独进行批量更新?
  • 我想我在这里误解了一些东西。您如何进行批量更新?
  • 我使用 $this->db->update_batch('extra_config', $updateData,'id'); } 在 Codeigniter 中,它需要一个唯一的 id 来进行这种批量更新。
  • 我发现这个解包了 CodeIgniter 正在做的更具体的事情:' // 产生: // UPDATE mytable SET name = CASE // WHEN title = 'My title' THEN ' My Name 2' // WHEN title = 'Another title' THEN 'Another Name 2' // ELSE name END, // date = CASE // WHEN title = 'My title' THEN 'My date 2' // WHEN title = 'Another title' THEN 'Another date 2' // ELSE date END // WHERE title IN ('My title','Another title')'

标签: php mysql sql unique unique-index


【解决方案1】:

我想有一种方法可以使用两列索引来解决您的问题,但是...

我想回答原始问题并假设您真的想将这些列合并为一个,我建议考虑以下内容:

ALTER TABLE user_movies ADD COLUMN new_id VARCHAR(250);

UPDATE user_moves SET new_id=CONCAT(CAST(user_id as CHAR(125)), LPAD(CAST(move_id as CHAR(125)),125,'0'));

CREATE UNIQUE INDEX myindex ON user_movies(new_id);

当然,数字 250 和 125 是任意的,但您希望它们足够大以适合您的实际 ID。我正在填充第二个 id 以确保它们确实是唯一的(因为我们不希望 user_id=55/movie_id=66 获得与 user_id=5/movie_id=566 相同的 id)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-03
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多