php - INSERT 或如果列组合存在 UPDATE

标签 php mysql sql

<分区>

我有一个用户元数据表,我在其中存储了一些附加值。我需要:

A) 插入一个新的 user_id/meta_type 组合 + 值

B) 如果已经存在 user_id/meta_type 组合,那么只需更新它的值

重要提示:

我找到了 MySQL 的“ON DUPLICATE KEY UPDATE”——但是从我从手册中了解到的情况来看,它似乎只检查 PRIMARY KEY 所以问题是:

A) 有没有一种方法可以执行类似“ON DUPLICATE COLUMN1 AND COLUMN2 UPDATE value”的操作?

B) 在 MySQL InnoDB 中是否可以在多个列上创建 PRIMARY KEY
(例如,meta_id+user_id+meta_type 将是 PRIMARY KEY)

C) 我对 ON DUPLICATE KEY UPDATE 手册的理解有误吗?

最佳答案

如果您指定 ON DUPLICATE KEY UPDATE,并且插入的行会导致 UNIQUE 索引或 PRIMARY KEY 中出现重复值,则 MySQL 将对旧行执行更新。例如,如果列 a 声明为 UNIQUE 并包含值 1,则以下两个语句具有类似的效果:

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;

等效的更新查询如下,

UPDATE table SET c=c+1 WHERE a=1;

如果 a 和 b 列是唯一的,等效的更新查询将是 ,

UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;

关于php - INSERT 或如果列组合存在 UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20672203/

相关文章:

php - Codeigniter 链式查询问题

php - 在 PHP 中将周名称与周天匹配

php - 独立时替换单词

mysql - 错误号 :150 in MySQL Database

php - 函数中 if 语句中的 t 字符串错误

sql - 从 JOIN 上的表中仅选择某些列

mysql - 比较同一列同一表中的值

sql - 2 2 个表的左连接?

php - 如何防止 Laravel 在测试中触发事件?

php - 从 mysql 数据库中获取数据到 Ionic 应用程序