仅当@@hostname 等于某个值时才插入一行

INSERT a row only if @@hostname equals a certain value

是否可以在 INSERT 查询中以某种方式(或 any 其他方式)使用 WHERE 子句,因此它仅在 @@hostname变量是某个值?例如:

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

这个怎么样:

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

注意:@@hostname 是 MySQL 主机名。

您可以使这样的 select 查询无效,因为 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

使用@@hostname 检查:

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

作为旁注,您还可以使用它在列上进行 "support" CHECK(MySQL 不支持 CREATE TABLE 语句的 CHECK),通常您需要触发器来执行此操作。

查看演示 http://sqlfiddle.com/#!9/9dfa2/1