4

我正在使用 MySQL 中的伪会话表。该表目前如下所示:

id   |   key   |   value   |   metadata

id 是会话所属的用户,元数据是用户的 IP 地址。这背后的想法是每个用户可以从不同的 IP 地址多次登录。我想知道是否REPLACE INTO只能在 id = 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在这三列中定义,那么是的,您可以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 回答