2015-07-31 2 views
0

Можно ли использовать пункт WHERE каким-то образом (или любой другой способ) в INSERT запроса, так что работает только если переменная @@hostname определенное значение? Например:вставить строку только если @@ имя хоста равно определенное значение

INSERT INTO table_name 
    (field_1, field_2) 
VALUES 
    ('foo', 'bar') 
WHERE @@hostname = 'url.to.host.here'; 

ответ

2

Примечание: @@ имя хоста имя хоста MySQL.

Вы можете недействить запрос выбора, например, так как оптимизатор MySQL видит это как невозможное WHERE.

SELECT 
    'field_1' 
, 'field_2' 
FROM 
    DUAL 
WHERE 0; 

MySQL имеет INSERT INTO ... SELECT запрос таким образом, когда вы используете:

INSERT INTO 
    table_name (
    field_1 
    , field_2 
) 
    SELECT 
     'field_1' 
    , 'field_2' 
    FROM 
    DUAL 
    WHERE 0 

Инструкция INSERT INFO не будет выполняться.

При использовании:

INSERT INTO 
    table_name (
    field_1 
    , field_2 
) 
    SELECT 
     'field_1' 
    , 'field_2' 
    FROM 
    DUAL 
    WHERE 1; 

INSERT INTO будет выполнена. Смотрите демо http://sqlfiddle.com/#!9/5623f/1

С @@ проверки имени хоста:

INSERT INTO 
    table_name (
    field_1 
    , field_2 
) 
    SELECT 
     'field_1' 
    , 'field_2' 
    FROM 
    DUAL 
    WHERE IF(
    @@hostname = 'ip-10-0-0-15' 
    , 1 
    , 0 
    ); 

Смотрите демо http://sqlfiddle.com/#!9/d9081/4.

В качестве побочного элемента вы также можете использовать его для «поддержки» CHECK (MySQL не поддерживает CHECK с инструкцией CREATE TABLE) на столбцах, для которых вам нужны триггеры.

См. Демо http://sqlfiddle.com/#!9/9dfa2/1.

+0

Это сработало отлично! Спасибо! – TerranRich

0

Как об этом:

IF (STRCMP(@@hostname, 'url.to.host.here') = 0) THEN 
    INSERT INTO table_name 
     (field_1, field_2) 
    VALUES ('foo', 'bar') 
END IF 
+0

Нет, не работает: '[ERROR in query 1] У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с IF (@@ hostname = 'foobar') '(имя хоста скрыто по соображениям безопасности) – TerranRich

+0

извините, не видел, что это был MySql, будет редактировать. .. –

+0

Все еще не работает. Такая же синтаксическая ошибка, рядом с IF (STRCMP (... ':( – TerranRich