对于这种情况,InnoDB是否有必要?

时间:2015-12-08 14:54:47

标签: mysql innodb

我一直在寻找以下问题的答案:

MySQL: Insert record if not exists in table

我对接受的答案有一个额外的问题。但是,我没有足够的声誉在页面上发表评论...

在答案中,Mike创建了这样的表:

CREATE TABLE `table_listnames` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL,
  `tele` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB;

根据下面发布的查询,InnoDB是必须的吗? (也引用了答案)

INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'John', 'Doe', '022') AS tmp
WHERE NOT EXISTS (
    SELECT name FROM table_listnames WHERE name = 'John'
) LIMIT 1;

感谢。

1 个答案:

答案 0 :(得分:1)

不,没有必要。

但我更喜欢用这种方式编写查询:

INSERT INTO table_listnames (name, address, tele)
SELECT 'John', 'Doe', '022' FROM dual
WHERE NOT EXISTS (
    SELECT name FROM table_listnames WHERE name = 'John'
);

甚至更好,设置一个独特的约束:

ALTER TABLE table_listnames ADD UNIQUE (name)

只需插入:

INSERT INTO table_listnames (name, address, tele)
VALUES ('John', 'Doe', '022')

如果已存在名为John的行,则INSERT将失败。