Вы можете узнать, является ли он там во-первых, SELECT
Инг по url
, или вы можете сделать url
поле уникальным:
CREATE TABLE IF NOT EXISTS kompas_url
...
url VARCHAR(1000) UNIQUE,
...
)
Это остановит MySQL вставлять дубликат строка, но она также сообщит об ошибке при попытке вставить. Это нехорошо - хотя мы можем справиться с ошибкой, это может замаскировать других. Чтобы обойти эту проблему, мы используем ON DUPLICATE KEY UPDATE
синтаксис:
INSERT INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
ON DUPLICATE KEY UPDATE modified_date = NOW()
Это позволяет нам обеспечить UPDATE
заявление в случае повторяющегося значения в уникальном поле (это может включать в свой первичный ключ). В этом случае мы, вероятно, хотим обновить поле modified_date
с текущей датой.
EDIT: Как было предложено ~unutbu, если вы не хотите ничего менять в двух экземплярах, вы можете использовать синтаксис INSERT IGNORE
. Это просто работает следующим образом:
INSERT IGNORE INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
Это просто превращает некоторые виды ошибок в предупреждение, полезнее всего, ошибка, которая утверждает, что будет дубликат уникальной учетной записью. Если вы поместите ключевое слово IGNORE
в свой оператор, вы не получите ошибку - запрос будет просто удален. В сложных запросах это может также скрыть другие ошибки, которые могут быть полезны, поэтому, чтобы лучше было убедиться, что ваш код верен, если вы хотите его использовать.
Есть ли какой-либо другой способ, а затем ОБНОВЛЕНИЕ DUPLICATE? например, проверка наличия url = http: //example.com? –
, например query2 = "" "SELECT * FROM kompas_url WHERE url ==% s" "" –
Существует также 'INSERT IGNORE', который просто игнорирует инструкцию insert, если вставка приведет к дублированию уникального ключа. – unutbu