PHP MYSQL UPDATE 如果存在或 INSERT 如果不存在?

Posted

技术标签:

【中文标题】PHP MYSQL UPDATE 如果存在或 INSERT 如果不存在?【英文标题】:PHP MYSQL UPDATE if Exist or INSERT if not? 【发布时间】:2011-10-14 18:07:57 【问题描述】:

我不知道这是否正确。我有一个类,如果字段当前存在,我想更新数据库,如果不存在则插入。复杂之处在于我正在加入 3 个表(set_colors、school_art、baseimage)

任何帮助都会非常棒。

这是我所拥有的:

public function set_layer_colors($value) 
    global $db;

    $result_array = mysql_query("
    IF EXISTS(SELECT * FROM set_colors WHERE school_art_id = '$value')

      UPDATE set_colors (school_art_id, baseimage_id, sub_folder, layer)
        SELECT school_art.id, baseimage.id, baseimage.sub_folder, baseimage.layer
        FROM school_art 
        JOIN baseimage ON baseimage.base_folder = school_art.series_code 
        WHERE baseimage.image_type = 'B' ORDER BY school_art.id 

    ELSE

     INSERT INTO set_colors (school_art_id, baseimage_id, sub_folder, layer)
        SELECT school_art.id, baseimage.id, baseimage.sub_folder, baseimage.layer
        FROM school_art 
        JOIN baseimage ON baseimage.base_folder = school_art.series_code 
        WHERE baseimage.image_type = 'B' ORDER BY school_art.id 
        ");

    return $result_array;

【问题讨论】:

【参考方案1】:

我相信您正在寻找以下语法:

INSERT INTO <table> (field1, field2, field3, ...) 
VALUES ('value1', 'value2','value3', ...)
ON DUPLICATE KEY UPDATE
field1='value1', field2='value2', field3='value3', ...

注意:使用ON DUPLICATE KEY UPDATE,如果该行作为新行插入,则每行受影响的行值为1,如果是2现有行更新0 如果现有行设置为其当前值

MySQL 文档:INSERT ... ON DUPLICATE KEY UPDATE Statement

【讨论】:

为了更正确,您不需要指示主键。所以如果 field1 是一个键,那么...... ON DUPLICATE KEY UPDATE field2='value2', field3='value3', ...(从 field2 开始) 只记得给目标列唯一的约束 @StefanoZanetti,您的字段名称不匹配:pswpassword。此外,您还没有在 ON DUPLICATE KEY UPDATE 子句中指定 role 字段(我不确定这是否重要)。【参考方案2】:

两个选择:

MySQL Manual :: INSERT INTO ... ON DUPLICATE KEY UPDATE Syntax

MySQL Manual :: REPLACE INTO Syntax

两者都允许您在一个查询中执行 insert-if-not-exists-or-update。

【讨论】:

谢谢,REPLACE INTO 更适合我的情况,否则我必须调用两次“$query->send_long_data(1, $buff)”,一次用于 INSERT,一次用于 UPDATE Nooo...如果我们使用“REPLACE INTO”,如果PRIMARY数据存在,其他FOREIGN KEY相关表的数据将被删除。 提醒REPLACE - 它隐式删除它尝试更新的条目并添加一个新条目,因此如果您有一个AUTO_INCREMENT 键,例如ID,它将是也自动递增!

以上是关于PHP MYSQL UPDATE 如果存在或 INSERT 如果不存在?的主要内容,如果未能解决你的问题,请参考以下文章

php 5.4.3 使用mysql.dll,存在update 无法增加列值。求教高手。

刷新页面时,php UPDATE发送到MYSQL空参数

MySQL插入更新_ON DUPLICATE KEY UPDATE

如何使用“如果存在”在 MySQL 中创建或删除索引?

MYSQL 使用 PHP 更新或插入 [重复]

Mysql Insert Or Update语法例子