Вставить в базу данных SQL или обновить конкретное значение, если оно уже существует - PullRequest
0 голосов
/ 26 декабря 2018

Я с нетерпением жду возможности проверить, содержит ли текущая база данных указанные элементы, которые я хочу обновить, если это так, я хочу обновить только один из них.

Точнее, у меня естьследующее:

image of the current table setup

ID (Primary Key, AI)
serverID
channelID
channelROLE

Если я попытаюсь снова добавить значение с тем же идентификатором serverID и channelROLE, я хочу обновить идентификатор канала.

Я пытался использовать функцию ON DUPLICATE KEY UPDATE, но не могу понять и заставить ее работать должным образом для моих нужд.

Ответы [ 3 ]

0 голосов
/ 26 декабря 2018

Если я попытаюсь снова добавить значение с тем же serverID и channelROLE, я хочу обновить ID канала.

Вы, похоже, ищете INSERTINTO ... ON DUPLICATE KEY UPDATE query.

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

Чтобы это работало, вам нужно создать уникальное ограничение для столбцов serverID и channelROLE:

ALTER TABLE mytable 
    ADD UNIQUE my_bk (serverID, channelROLE);
0 голосов
/ 26 декабря 2018

Во-первых, вам нужен уникальный индекс / первичный ключ в таблице.Предположительно, это на 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);

? s являются заполнителями для значений параметров, которые вы передаете в запрос.Функция VALUES() возвращает значение, переданное для данного столбца.

0 голосов
/ 26 декабря 2018

Если у вас есть 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
    (...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...