【问题标题】:Update if exist, insert if not exist [duplicate]如果存在则更新,如果不存在则插入[重复]
【发布时间】:2012-12-13 01:31:44
【问题描述】:

可能重复:
How do I update if exists, insert if not (aka upsert or merge) in MySQL?

我有可以批量更新预订引擎价格的程序。

用于批量更新价格的示例用户输入是这样的

$dateStart = '2012-12-01';
$dataEnd = '2012-12-31';
$hotelId = 1;
$price = 300000;

而数据库是这样的

id | date       | hotelId | price
1  | 2012-12-01 | 1       | 100000

如果datehotelId 已经存在,MySQL Query 应该如何进行批量更新和插入,然后进行更新,如果不存在则插入?

我知道如果在 PHP 中每天循环并检查数据是否存在真的会耗费大量内存。

for($i=1; $i<=31; $i++){...}

我正在寻找解决方案,如何使用可以节省计算机资源的单个/任何 mysql 查询来完成。

【问题讨论】:

    标签: mysql batch-file


    【解决方案1】:

    使用INSERT ... ON DUPLICATE KEY UPDATE ... 语句。

    这将要求您在 datehotelId 列上有一个 UNIQUE 或 PRIMARY 复合索引,以便触发 DUPLICATE KEY 条件。

    【讨论】:

    • 如何创建唯一的复合索引?
    • @GusDeCooL - 简单:ALTER TABLE table ADD UNIQUE KEY (date, hotelId)。请参阅docs on ALTER TABLE statement
    猜你喜欢
    • 2019-10-17
    • 1970-01-01
    • 2016-11-19
    • 2015-07-04
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多