我正在使用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)
有可能吗?
如果你有一个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)