MYSQL:如果已经存在更新记录,则插入记录

时间:2016-08-25 07:29:12

标签: php mysql

我需要更新记录(如果存在),否则插入它。我已经尝试过以前的相关答案,但这些还不够

我有一个带有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 . "')";

3 个答案:

答案 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)";