插入SQL数据库或更新特定值(如果已存在)

时间:2018-12-25 22:59:03

标签: mysql sql

我期待着一种方法来检查当前数据库是否已经包含我要更新的指定项目,如果存在,我只想更新其中之一。

更确切地说,我有以下内容:

image of the current table setup

ID (Primary Key, AI)
serverID
channelID
channelROLE

如果我尝试再次添加具有相同serverID和channelROLE的值,我想更新channelID。

我尝试使用ON DUPLICATE KEY UPDATE功能,但无法弄清楚它并使其能够正常工作以满足我的需求。

3 个答案:

答案 0 :(得分:0)

如果您有ID,则可以使用INSERT IGNORE

INSERT IGNORE INTO Table1
    (ID, serverID, channelID, channelROLE)
VALUES
    (....);

SET @id = 1,
    @serverId = 123545,
    @channelId = 512580,
    @channelRole = 'john';
INSERT INTO Table1
    (ID, serverID, channelID, channelROLE)
VALUES
    (@id, @serverId, @channelId, @channelRole)
ON DUPLICATE KEY UPDATE
    serverId = @serverId,
    channelId = @channelId,
    channelRole = @channelRole;

或替换

REPLACE INTO table1
    (ID, serverID, channelID, channelROLE)
VALUES
    (...);

答案 1 :(得分:0)

  

如果我尝试再次添加具有相同serverID和channelROLE的值,我想更新channelID。

您似乎正在寻找INSERT INTO ... ON DUPLICATE KEY UPDATE查询。

INSERT INTO my table 
    (id, serverID, channelID, channelROLE)
    VALUES('a', 'b', 'c', 'd')
ON DUPLICATE KEY UPDATE channelID = 'c';

为此,您需要在列serverID和channelROLE上创建UNIQUE约束:

ALTER TABLE mytable 
    ADD UNIQUE my_bk (serverID, channelROLE);

答案 2 :(得分:0)

首先,您在表上需要一个唯一的索引/主键。大概是在id上。如果您还没有一个:

create index unq_table1_id on table1(id);

那么您可以做:

insert into table1 (ID, serverID, channelID, channelROLE)
    values (?, ?, ?, ?)
    on duplicate key update
        serverId = values(serverId),
        channelId = values(channelId),
        channelRole = values(channelRole);

?是要传递给查询的参数值的占位符。 VALUES()函数返回给定列传递的值。