Условное ОБНОВЛЕНИЕ MariaDB (MySQL) - PullRequest
1 голос
/ 16 марта 2020

Код:

UPDATE COMPANY SET id='21' 
WHERE id='20';

Ошибка:

SQLException: Дублирующая запись '21' для ключа 'ПЕРВИЧНАЯ'

Я хочу ОБНОВИТЬ поле первичного ключа в этом случае называется id для другого значения, но если значение уже существует, оно выдает ошибку выше. Как бы я сделал условное ОБНОВЛЕНИЕ, основываясь на том, что 'id' еще не существует в таблице COMPANY, чтобы избежать выдачи этой ошибки с использованием синтаксиса MariaDB.

ПРИМЕЧАНИЕ. Я НЕ говорю о выполнении условной INSERT который использует «ON DUPLICATE KEY UPDATE», как показано ниже.

INSERT INTO COMPANY(id,first,last,age)
VALUES('1','Tim','Jones','70')
ON DUPLICATE KEY UPDATE id='1';

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Вы можете использовать UPDATE IGNORE:

UPDATE IGNORE COMPANY 
SET id='21' 
WHERE id = '20'

См. Упрощенную демонстрацию .

0 голосов
/ 16 марта 2020

Вы можете подсчитать количество значений уже в таблице:

UPDATE COMPANY C CROSS JOIN
       (SELECT COUNT(*) as cnt
        FROM COMPANY
        WHERE id = 21
       ) CC
    SET c.id = 21
    WHERE id = 20 AND cnt = 0;

Примечание. В большинстве баз данных вы бы использовали NOT EXISTS в предложении WHERE, но MySQL / MariaDB этого не делает. поддержка ссылок на обновляемую таблицу.

...