仅在表为空的情况下插入表中

时间:2019-04-23 10:03:20

标签: mysql sql mariadb

如果只有表为空,我想在表中插入一行。我经历了这个Execute INSERT if table is empty?,但是无法这样做。我将MariaDB用作rdbms。请提供帮助。谢谢。

这是我的sql语法:

INSERT INTO `policy` (`policy1`, `policy2`, `policy3`, `policy4`)
    SELECT ('F', 'F', 'F', 'F')
    WHERE NOT EXISTS (SELECT * FROM `policy`) 

我的表结构是:

CREATE TABLE `policy` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `policy1` varchar(255) DEFAULT NULL,
  `policy2` varchar(255) DEFAULT NULL,
  `policy3` varchar(255) DEFAULT NULL,
  `policy4` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1

4 个答案:

答案 0 :(得分:2)

您可以使用以下解决方案:

INSERT INTO `policy` (`policy1`, `policy2`, `policy3`, `policy4`)
    SELECT * FROM (SELECT 'F' c1, 'F' c2, 'F' c3, 'F' c4)t
    WHERE NOT EXISTS (SELECT 1 FROM `policy`);

demo on dbfiddle.uk

答案 1 :(得分:2)

您也可以为此使用dual表:

INSERT INTO `policy` (`policy1`, `policy2`, `policy3`, `policy4`)
    SELECT 'F', 'F', 'F', 'F'  -- no parentheses!
    FROM dual
    WHERE NOT EXISTS (SELECT * FROM `policy`) ;

dual是一个内置表,只有一行,专门用于此类目的。命名和想法来自Oracle数据库。

答案 2 :(得分:0)

您可以使用存在的方式:

if not exists(select 1 from table)
begin
    -- do stuff
end

答案 3 :(得分:0)

INSERT INTO `policy` (`policy1`, `policy2`, `policy3`, `policy4`)
    Select * from (
    SELECT ('F', 'F', 'F', 'F')
    WHERE NOT EXISTS (SELECT 'F', 'F', 'F', 'F' FROM `policy`))