4

MySQL で疑似セッション テーブルを使用しています。現在、表は次のようになっています。

id   |   key   |   value   |   metadata

id はセッションが属するユーザーで、metadata はユーザーの IP アドレスです。この背後にある考え方は、各ユーザーが異なる IP アドレスから複数回ログインできるということです。REPLACE INTOid = userid、key = key、およびmetadata = ip_addressの場合にのみ値を置き換えることができるかどうか疑問に思っているので、理想的には次のような結果になることができます:

id   |   key   |   value   |   metadata
 1       test      avalue       127001
 1       test      bvalue       19216801
 1       test      cvalue       19215810

そのようなことは可能ですか?

4

1 に答える 1

6

UNIQUEインデックスがある場合、またはPRIMARY KEYこれらの 3 つの列にまたがって定義されている場合は、可能REPLACE INTOです。インデックスがまだない場合は追加します。

ALTER TABLE session_table ADD PRIMARY KEY (`id`, `key`, `metadata`); 

すでに PK が定義されている場合は、UNIQUEそれらの列にまたがる複合インデックスを作成します。

CREATE INDEX `idx_id_key_metadata` ON session_table (`id`, `key`, `metadata`); 

MySQLCREATE INDEX構文の詳細

ここにちょっとしたデモンストレーションがあります。

于 2013-01-22T01:43:42.090 に答える