Как проверить, существует ли значение уже для предотвращения дубликатов?

Я отправляю полный пример, который я, наконец, начал работать. Здесь я читаю файл rooms/rooms.txt из сценария rooms/rooms.js

var fs = require('fs');
var path = require('path');
var readStream = fs.createReadStream(path.join(__dirname, '../rooms') + '/rooms.txt', 'utf8');
let data = ''
readStream.on('data', function(chunk) {
    data += chunk;
}).on('end', function() {
    console.log(data);
});
31
задан Gumbo 21 August 2011 в 12:21
поделиться

9 ответов

Если Вы не хотите иметь дубликаты, можно сделать следующее:

, Если многочисленные пользователи могут вставить данные в DB, метод, предложенный @Jeremy Ruten, может вывод к ошибке : после того, как Вы выполнили проверку, кто-то может вставить подобные данные в таблицу.

39
ответ дан 27 November 2019 в 21:26
поделиться

Вы могли сделать этот запрос:

SELECT url FROM urls WHERE url = 'http://asdf.com' LIMIT 1

Затем проверка, если mysql_num_rows () == 1, чтобы видеть, существует ли это.

-1
ответ дан 27 November 2019 в 21:26
поделиться

Ответ зависит от того, хотите ли Вы знать, когда попытка предпринята для ввода записи с дублирующимся полем. Если Вы не заботитесь, тогда используют, "ВСТАВЛЯЮТ... НА ДУБЛИРУЮЩЕМСЯ КЛЮЧЕВОМ" Синтаксисе, поскольку это предпримет Вашу попытку, бесшумно успешно выполняются, не создавая дубликат.

, Если, с другой стороны, Вы хотите знать, когда такой случай происходит и предотвращает его, тогда необходимо использовать ограничение уникального ключа, которое вызовет предпринятый, вставляют/обновляют для сбоя со значимой ошибкой.

0
ответ дан 27 November 2019 в 21:26
поделиться

Если Вы просто хотите ответ "да" или "нет", этот синтаксис должен дать Вам лучшую производительность.

select if(exists (select url from urls where url = 'http://asdf.com'), 1, 0) from dual
0
ответ дан 27 November 2019 в 21:26
поделиться

Если Вы просто хотите удостовериться, что нет никаких дубликатов, затем добавляют уникальный индекс к полю URL, тот путь, там не потребность явно проверить, существует ли URL, просто вставьте как нормальные, и если это уже там затем, вставка перестанет работать с дублирующейся ключевой ошибкой.

0
ответ дан 27 November 2019 в 21:26
поделиться

я не знаю синтаксис для MySQL, но всего, что необходимо сделать, перенос ВСТАВКА с оператором IF, который будет запрашивать таблицу и видеть, существует ли запись с данным URL, если это существует - не вставляют новую запись.

, если MSSQL можно сделать это:

IF NOT EXISTS (SELECT 1 FROM YOURTABLE WHERE URL = 'URL')
INSERT INTO YOURTABLE (...) VALUES (...)
2
ответ дан 27 November 2019 в 21:26
поделиться

Для гарантии уникальности, необходимо добавить ограничение на уникальность данных. Принятие Вашего имени таблицы является "URL", и имя столбца является "URL", можно добавить, что ограничение на уникальность данных с этим изменяет команду таблицы:

alter table urls add constraint unique_url unique (url);

изменить таблица, вероятно, перестанет работать (кто действительно знает с MySQL), если Вы уже уже получили дублирующиеся URL в своей таблице.

13
ответ дан 27 November 2019 в 21:26
поделиться

Если Вы хотите вставить URL в таблицу, но только те, которые уже не существуют, можно добавить, что УНИКАЛЬНОЕ ограничение на столбец и в Запросе на вставку добавляет, ИГНОРИРУЮТ так, чтобы Вы не получали ошибку.

Пример: ВСТАВЬТЕ ИГНОРИРУЮТ В urls URL НАБОРА = 'url-insert'

1
ответ дан 27 November 2019 в 21:26
поделиться

Вы заинтересованы просто о URL, которые являются той же самой строкой.. раз так существует большой хороший совет в других ответах. Или необходимо ли также волноваться о канонизации?

, Например: http://google.com и http://go%4fgle.com является тем же самым URL, но был бы позволен как дубликаты любой базой данных только методы. Если это - проблема, необходимо предварительно обработать URL для разрешения и управляющие последовательности символов.

Зависящий то, куда URL прибывают от Вас, должно будет также волноваться о параметрах и являются ли они значительными в Вашем приложении.

14
ответ дан 27 November 2019 в 21:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: