我需要更新记录(如果存在),否则插入它。我已经尝试过以前的相关答案,但这些还不够
我有一个带有data_meta的表名
as.Date.numeric(workingfilereturns$DATE - 2, origin="1900-01-01")
我必须根据令牌和放大器进行更新meta_key ..对于相同的标记,meta_key不重复..
我的插入查询
meta_id | token | meta_key | meta_value
1 1 terms_conditions terms conditions content
2 1 is_config_enable 1
3 2 terms_conditions terms conditions content
我的更新查询
"INSERT INTO data_meta (token, meta_key, meta_value)
VALUES (" . $token . ", '" . $key . "', '" . $value . "')";
答案 0 :(得分:0)
MySQL仅为此提供了REPLACE INTO statement。
REPLACE INTO data_meta (token, meta_key, meta_value) VALUES ( x, y, z );
为了使其工作,(token,meta_key)的组合应该是主键,或者你需要为(token,meta_key)组合创建唯一索引
答案 1 :(得分:0)
显然,您的meta_id
是您的自动增加索引。
您忘记在更新查询中使用它。如果没有它,该查询将无效,更新需要WHERE
条件。
一旦你掌握了这个,解决方案是显而易见的。那它是如何运作的?
如果你不知道你插入的meta_id
,如果你知道它,你可以更新。就这么简单。
答案 2 :(得分:0)
在(token,meta_key)上创建uniqe索引如果不存在:
create unique index data_meta_tm on data_meta(token, meta_key);
查询:
"INSERT INTO data_meta (token, meta_key, meta_value)
VALUES (" . $token . ", '" . $key . "', '" . $value . "')
ON DUPLICATE KEY UPDATE meta_value = VALUES(meta_value)";