如果mysql中不存在则创建插入

时间:2014-08-12 12:17:09

标签: mysql

在MySql中,我们可以选择INSERT IGNORE(do not update existing)来生成包含查询CREATE TABLE IF NOT EXISTSINSERT IGNORE INTO的sql文件。

但在这种情况下,如果表存在,“INSERT IGNORE INTO”将再次插入数据。    我想问一下,有没有一种方法来实现这个功能:如果表不存在,它将创建表并插入数据。

如果表存在,则不会插入数据。

实际上我已经尝试过如何实现,我知道用存储过程是可能的,但是用一个sql文件将由批处理文件执行,如何实现这个功能?

我的代码是这样的

CREATE DATABASE IF NOT EXISTS martintest;

USE martintest; 
CREATE TABLE IF NOT EXISTS `martin1` (
  `col1` int(11) default NULL,
  `col2` text
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT IGNORE INTO `martin1` (`col1`, `col2`) VALUES    (2, 'bbb'), (1, 'aaa');

3 个答案:

答案 0 :(得分:1)

一个选项,也许不推荐(在这种情况下,必须小心使用会话变量:@`table_exists?`),但最后的选项是:

/* CODE FOR DEMONSTRATION PURPOSES */

USE `martintest`;

SET @`table_schema` := 'martintest', @`table_name` := 'martin1';

SELECT EXISTS
    (
        SELECT NULL
        FROM `information_schema`.`TABLES` `ist`
        WHERE `ist`.`TABLE_SCHEMA` = @`table_schema` AND `ist`.`TABLE_NAME` = @`table_name`
    )
INTO @`table_exists?`;

CREATE TABLE IF NOT EXISTS `martin1` (
  `col1` int(11) DEFAULT NULL,
  `col2` text
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `martin1` SELECT 2, 'bbb' FROM DUAL WHERE 0 = @`table_exists?`;
INSERT INTO `martin1` SELECT 1, 'aaa' FROM DUAL WHERE 0 = @`table_exists?`;

/* CODE FOR DEMONSTRATION PURPOSES */

答案 1 :(得分:0)

使用CREATE TABLE而不是IF NOT EXISTS 如果表存在,它将失败,并且不会导入文件的其余部分。

请勿使用--force参数,。

答案 2 :(得分:0)

检查表格是否存在:

USE martintest; 
SET @tablecount := 0

SELECT @tablecount := count(*)
INTO @tablecount
FROM information_schema.tables
WHERE table_schema = 'martintest'
AND table_name = 'martin1'

--check if table count = 0
IF @tablecount = 0
(

CREATE TABLE `martin1` (
  `col1` int(11) default NULL,
  `col2` text
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `martin1` (`col1`, `col2`) VALUES    (2, 'bbb'), (1, 'aaa');

)