MySQL在多个键上更换INTO?

时间:2013-01-22 01:40:17

标签: mysql

我正在使用MySQL中的伪会话表。该表目前看起来像这样:

id   |   key   |   value   |   metadata

id是会话所属的用户,元数据是用户的IP地址。这背后的想法是每个用户可以从不同的IP地址多次登录。我想知道REPLACE INTO是否可以替换id = userid,key = key,AND metadata = ip_address的值,所以理想情况下我们最终会得到这样的结果:

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

这样的事情可能吗?

1 个答案:

答案 0 :(得分:6)

如果您在这三列中定义了UNIQUE索引或PRIMARY KEY,那么您可以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`); 

More on the MySQL CREATE INDEX syntax

Here's a little demonstration