我正在使用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
这样的事情可能吗?
答案 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`);