我一直在寻找以下问题的答案:
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;
感谢。
答案 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将失败。