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

时间:2015-07-31 14:37:11

标签: mysql sql sql-insert hostname

是否可以在WHERE查询中以某种方式使用INSERT子句(或任何其他方式),这样只有在@@hostname变量为INSERT INTO table_name (field_1, field_2) VALUES ('foo', 'bar') WHERE @@hostname = 'url.to.host.here'; 时才有效一定的价值?例如:

>                        est        se         t        df     Pr(>|t|)  
   factor(ss748)Varian 0.78109445 0.1399757 5.5802158  254.8814 6.130658e-08    
   factor(ss749)Variant 0.43698935 0.2145538 2.0367359  213.579 4.291038e-02  
   factor(ss750)Variant 0.07076991 0.1757233 0.4027350  123.730 6.878381e-01      
   factor(ss751)Variant 0.09796057 0.1304451 0.7509714 4560.5547 4.52786e-01 

>                        lo 95     hi 95      nmis        fmi     lambda  
   factor(ss748)Variant  0.50543827 1.0567506   NA 0.13203983 0.12525575              
   factor(ss749)Variant  0.01407524 0.8599035   NA 0.14480694 0.136835
   factor(ss750)Variant -0.27704297 0.4185828   NA 0.19272691 0.17978321
   factor(ss751)Variant -0.15777509 0.3536962   NA 0.02997128 0.02954597

2 个答案:

答案 0 :(得分:2)

注意:@@ hostname是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

使用@@ 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

作为旁注,您也可以使用它来“支持”CHECK(MySQL不支持带有CREATE TABLE语句的CHECK),通常需要触发器才能执行此操作。

请参阅演示http://sqlfiddle.com/#!9/9dfa2/1

答案 1 :(得分:0)

这个怎么样:

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