Выполнить INSERT, если таблица пуста? - PullRequest
11 голосов
/ 15 марта 2011

Есть ли способ сделать вставку при условии счета, что-то вроде:

INSERT INTO my_table (colname) VALUES('foo') IF COUNT(my_table) < 1

По сути, я хочу вставить одну запись по умолчанию, если таблица в настоящее время пуста. Я использую mysql.

Ответы [ 3 ]

23 голосов
/ 15 марта 2011

Используйте SELECT вместо VALUES, чтобы иметь возможность расширить запрос с помощью предложения WHERE.

EXISTS - это лучший и более быстрый тест, чем COUNT

INSERT INTO my_table (colname)
SELECT 'foo'
WHERE NOT EXISTS (SELECT * FROM my_table)
2 голосов
/ 15 марта 2011

Один из способов - разместить уникальный ключ на столбце.Затем выполните REPLACE :

REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name [(col_name,...)]
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...

REPLACE работает точно так же, как INSERT, за исключением того, что если старая строка в таблице имеет то же значение, что и новая строка для PRIMARY KEYили УНИКАЛЬНЫЙ индекс, старая строка удаляется перед вставкой новой строки

0 голосов
/ 23 октября 2015

Это легче читать:

INSERT INTO my_table (colname) 
SELECT 'foo' FROM DUAL
WHERE NOT EXISTS (SELECT * FROM my_table);

Отсутствие VALUES смягчается с помощью SELECT FROM DUAL, который предоставит значения. FROM DUAL не всегда требуется, но не повредит включить его для тех странных конфигураций, где это требуется (например, установка Percona, которую я использую).

NOT EXISTS быстрее, чем подсчет, который может быть медленным для таблицы с большим количеством строк.

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