INSERT INTO books (name) SELECT 'MySQL Manual' FROM dual WHERE NOT EXISTS (SELECT id FROM books WHERE id = 1)
4.replace into
如果存在primary or unique相同的记录,则先删除掉。再插入新记录。如果记录有多个字段,在插入的时候如果有的字段没有赋值,那么新插入的记录这些字段为空。
REPLACE INTO books SELECT 1, 'MySQL Manual' FROM books
进一步测试用例:
CREATE TABLE `books` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(200) NOT NULL,
`author` VARCHAR(200) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `NewIndex1` (`name`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT IGNORE INTO books (NAME,author) VALUES ('MySQL Manual','aaa');
INSERT INTO books (NAME,author) VALUES ('MySQL Manual','bbbb') ON DUPLICATE KEY UPDATE id = id+1;
INSERT INTO books (id,NAME,author) VALUES (1,'MySQL Manual','bbbb') ON DUPLICATE KEY UPDATE id = id+1;
INSERT INTO books (id,NAME,author) VALUES (1,'MySQL Manualaaaa','bbbb') ON DUPLICATE KEY UPDATE id = id+1;
REPLACE INTO books SELECT 1, 'MySQL Manual','cccc' FROM books;
REPLACE INTO books (NAME,author) SELECT 'MySQL Manual','ddddd' FROM books;