Как узнать, существует ли определенное значение в качестве первичного ключа в mySql? - PullRequest
4 голосов
/ 03 октября 2008

Как лучше всего определить, существует ли в таблице первичный ключ с определенным значением?

Я могу думать о:

SELECT key FROM table WHERE key = 'value';

и подсчитать результаты, или:

SELECT SQL_CALC_FOUND_ROWS key FROM table WHERE key = 'value' LIMIT 1;
SELECT FOUND_ROWS();

Ответы [ 6 ]

3 голосов
/ 03 октября 2008

Я думаю, что любое из ваших предложений в вопросе подходит.

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

Другие аналогичные параметры в зависимости от вашего использования включают использование вставок типа REPLACE или INSERT ON DUPLICATE KEY UPDATE. Это позволяет обновить существующую запись, если первичный ключ уже существует, в противном случае он просто вставляет новую запись.

1 голос
/ 03 октября 2008

Я бы сделал:

SELECT 1 FROM table WHERE id key = 'value'

Что-то еще может немного помешать оптимизации запросов, поэтому я буду придерживаться этого.

Редактировать: Хотя я только что понял, я не думаю, что я когда-либо делал это в MySQL, хотя я не могу понять, почему это не будет работать.

1 голос
/ 03 октября 2008

Сделайте первый и посчитайте результаты (всегда 0 или 1). Легко и быстро.

0 голосов
/ 27 июня 2011

ВЫБРАТЬ 1 ИЗ mytable WHERE mykey = 'значение' LIMIT 1

0 голосов
/ 03 октября 2008

Я думаю, что было бы более интуитивно понятнее и проще использовать ЕСЛИ СУЩЕСТВУЕТ.


IF EXISTS (SELECT key FROM table WHERE key = 'value')
    PRINT 'Found it!'
ELSE
    PRINT 'Cannot find it!'
0 голосов
/ 03 октября 2008

Пример

Select count(key) into :result from table where key = :theValue

Если вы пытаетесь выбрать между вставкой или обновлением, используйте оператор MERGE в Oracle. Я считаю, что MS-SQL - это что-то вроде оператора UPSERT.

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