Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-更新或插入(如果存在)_Mysql - Fatal编程技术网

MySQL-更新或插入(如果存在)

MySQL-更新或插入(如果存在),mysql,Mysql,我在MySQL数据库中有一个表,如果实例不存在,则需要更新该表。我尝试过以下方法,但都没有找到解决方案: SET @last_message_id = ( SELECT id FROM mailbox_last_message WHERE conversationId = '13' ); BEGIN TRANSACTION; UPDATE mailbox_last_message SET conversationId = '13', initiatorMessageId = '20', int

我在MySQL数据库中有一个表,如果实例不存在,则需要更新该表。我尝试过以下方法,但都没有找到解决方案:

SET @last_message_id = (
SELECT id FROM mailbox_last_message WHERE conversationId = '13'
);

BEGIN TRANSACTION;
UPDATE mailbox_last_message SET conversationId = '13', initiatorMessageId = '20', interlocutorMessageId = '10' 
WHERE id = @last_message_id 
IF (@@ROWCOUNT = 0)
INSERT INTO  mailbox_last_message (  id ,  conversationId ,  initiatorMessageId ,  interlocutorMessageId ) 
VALUES ('' , '13', '20', '0' );
COMMIT;
还有这个:

 SET @last_message_id = (
 SELECT `id` FROM mailbox_last_message WHERE `conversationId` = 13);

 INSERT INTO  mailbox_last_message (  id ,  conversationId ,  initiatorMessageId ,  interlocutorMessageId ) 
 VALUES ( '', '13', '20', '0' ) ON DUPLICATE 
 KEY UPDATE id = @last_message_id

此解决方案创建了一个新实例,其ConversationID13不是我想要的。我试图在线搜索文档和各种教程/示例,但找不到任何合适的解决方案。非常感谢您的帮助。

如果您希望保持字段的唯一索引,可以使用INSERT IGNORE INTO语法

    SET @last_message_id = (
SELECT id FROM mailbox_last_message WHERE conversationId = '13'
);

    INSERT IGNORE INTO  mailbox_last_message (  id ,  conversationId ,  initiatorMessageId ,  interlocutorMessageId ) 
    VALUES ('' , '13', '20', '0' ) ON DUPLICATE KEY UPDATE id = @last_message_id;

仅使用INSERT IGNORE INTO?此解决方案还会插入新行,而不会更新已存在的行
conversationId
不是唯一的键,但
id
是唯一的键。如果我使用
值(@last\u message\u id,'13','20','0')修改您的解决方案,我将获得所需的。谢谢你给我指出了正确的方向。