2017-11-25 12 views
0

の一意のインデックスを化合私の状況です:MySQLはここでVARCHAR型

• 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--->) uid_mid (<----movie_id)のようなものですか?もしそうなら、既存のテーブルをこれにどのように移行するのでしょうか?

+1

私はあなたが求めていることを理解していませんが、2つの列にインデックスを作成することはできますか? "CREATE UNIQUE INDEX myindex on user_movies(user_id、movie_id)"(常にそのテーブルに対するすべてのクエリで両方のカラムを指定する場合は、カラムの順序は関係ありません)。 – EdmCoff

+0

一意索引を作成するが、別々に作成しない2つの列を使用して一括更新を実行するにはどうすればよいですか? –

+0

私はここで何かを誤解していると思う。一括更新はどうやって行っていますか? – EdmCoff

答えて

0
私はしかし、あなたの問題のための2つのカラムのインデックスを使用する方法があると思うしたいと思い

...

私は、元の質問に答えると、あなたが本当に一つに列を結合したいと仮定すると思います

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を収まるほど彼らは大きなたいと思います:私は、次のようなものを考えるとお勧めします。私はuser_id = 5/movie_id = 566と同じidを得るためにuser_id = 55/movie_id = 66にしたくないので、2番目のIDをパディングして本当にユニークであることを確認しています。

関連する問題