MySQL在多个键上更换INTO?

Pet*_*ter 4 mysql

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

id   |   key   |   value   |   metadata
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

有可能吗?

Mic*_*ski 6

如果你有一个UNIQUE索引或PRIMARY KEY在这三列中定义,那么你可以REPLACE INTO.如果您还没有索引,请添加索引:

ALTER TABLE session_table ADD PRIMARY KEY (`id`, `key`, `metadata`); 
Run Code Online (Sandbox Code Playgroud)

如果已定义PK,请UNIQUE在这些列之间创建复合索引:

CREATE INDEX `idx_id_key_metadata` ON session_table (`id`, `key`, `metadata`); 
Run Code Online (Sandbox Code Playgroud)

有关MySQL CREATE INDEX语法的更多信息

这是一个小小的示范.