仅当@@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),通常您需要触发器来执行此操作。
是否可以在 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),通常您需要触发器来执行此操作。