Что значит ГДЕ НЕ СУЩЕСТВУЕТ? - PullRequest
0 голосов
/ 02 марта 2020
INSERT INTO Track(title, album_id, genre_id, len, rating, count) 
SELECT ?, ?, ?, ?, ?, ? 
WHERE NOT EXISTS 
(SELECT * FROM Track WHERE title = ?)

Что означает WHERE NOT EXISTS в этом запросе?

Или, может быть, кто-то может перевести эти sql в слова?

Ответы [ 3 ]

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

Это означает, что первая часть запроса

INSERT INTO Track(title, album_id, genre_id, len, rating, count) 
SELECT ?, ?, ?, ?, ?, ? 
WHERE NOT EXISTS 

не существует в выполняемом подзапросе

(SELECT * FROM Track WHERE title = ?)

Мне кажется, что это может быть случай, когда чтобы использовать INSERT ON DUPLICATE KEY UPDATE вместо этого. https://www.mysqltutorial.org/mysql-insert-or-update-on-duplicate-key-update/

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

Предположительно, в данном случае это означает, что вы не вставляете повторяющиеся заголовки - при условии, что ? для вставляемого заголовка совпадает с ? для заголовка, отмеченного в подзапросе.

На самом деле также должен иметь уникальный индекс / ограничение для title, поэтому база данных реализует это на уровне базы данных.

На мой взгляд, лучший подход заключается в используйте ON CONFLICT:

alter table track add constraint unq_track_title unique (title);

INSERT INTO Track(title, album_id, genre_id, len, rating, count) 
    VALUES ( ?, ?, ?, ?, ?, ? )
    ON CONFLICT (title) IGNORE;

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

Все, что сказано разные дорожки могут иметь одинаковое название. Возможно, вам нужен уникальный индекс для album_id / title.

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

Укажите, что я вам даю? переменные в таблицу дорожек, но только если заголовка там еще нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...