如果表不存在,则插入MySQL

时间:2014-03-11 08:34:17

标签: mysql insert not-exists

我会尝试为我的模块创建一个小安装脚本。 当我调用$_GET["install"]脚本正在运行时。我看起来像这样:

public function install()
{
  $this->sql->query("
    INSERT
    INTO    cms_modules (title)
    VALUES  ('Guestbook')
  ");

  $this->sql->query("
    CREATE TABLE IF NOT EXISTS `cms_guestbook` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
  ");
}

效果很好。该表已安装,并且新行已添加到cms_modules,但我希望仅当cms_guestbook不存在时才会激活INSERT。

我搜索了一个答案并找到了this主题。我会尝试使用WHERE NOT EXISTS执行以下操作:

$this->sql->query("
  INSERT
  INTO    cms_modules (title)
  VALUES  ('Guestbook')
  WHERE NOT EXISTS (
          SELECT 1 FROM cms_guestbook
  )
");

但这对我来说不起作用。表已安装,但未插入行。我也尝试使用SHOW TABLES LIKE,但这似乎也没有用。

任何建议或解决方案?

1 个答案:

答案 0 :(得分:1)

你可以这样做:

if(!$this->sql->query("SHOW TABLES LIKE 'cms_guestbook'")){
    $this->sql->query("
        INSERT
        INTO    cms_modules (title)
        VALUES  ('Guestbook')
      ");
}

你查询它是否找到一个特定的表,如果它返回false(检查以确保它返回一个布尔值)你运行另一个查询。