MySQL中的insert ignore into, replace into等的一些用法

CREATE TABLE `books` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,
  `createTime` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `NewIndex1` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

1.insert ignore into

当插入数据时,如出现错误时,如重复数据,将不会插入数据也不会返回错误(Duplicate entry 'MySQL Manual' for key 'NewIndex1',不包括字段不存在等其他错误),只以警告形式返回,执行后返回数字0。

INSERT  IGNORE INTO books (name,createTime) VALUES ('MySQL Manual',now());

2.on duplicate key update

当primary或者unique重复时,则执行update语句,如update后为无用语句,如id=id,则同1功能相同,但错误不会被忽略掉。例如,为了实现name重复的数据插入不报错,可使用一下语句:

INSERT INTO books (name,createTime) VALUES ('MySQL Manual',now()) ON duplicate KEY UPDATE id = id;

3.insert … select … where not exist

根据select的条件判断是否插入,可以不光通过primary 和unique来判断,也可通过其它条件。例如:

INSERT INTO books (name,createTime) SELECT 'MySQL Manual',now() FROM dual WHERE NOT EXISTS (SELECT id FROM books WHERE id = 1);

4.replace into

如果存在primary or unique相同的记录,则先删除掉 , 再插入新记录 , 受影响的行的数为被删除和被插入的行数的和。

REPLACE INTO books(id,name,createTime) SELECT 1, 'MySQL Manual',now() FROM books;

 

你可能感兴趣的:(mysql有关)