MySQL replace into 有三种形式:
1. replace into tbl_name(col_name, ...) values(...)
2. replace into tbl_name(col_name, ...) select ...
3. replace into tbl_name set col_name=value, ...
1.insert ignore into
当插入数据时, 如出现错误时, 如重复数据, 将不返回错误, 只以警告形式返回. 所以使用 ignore 请确保语句本身没有问题, 否则也会被忽略掉. 例如:
- INSERT IGNORE INTO books (name) VALUES ('MySQL Manual')
- 2.on duplicate key update
当 primary 或者 unique 重复时, 则执行 update 语句, 如 update 后为无用语句, 如 id=id, 则同 1 功能相同, 但错误不会被忽略掉. 例如, 为了实现 name 重复的数据插入不报错, 可使用一下语句:
INSERT INTO books (name) VALUES ('MySQL Manual') ON duplicate KEY UPDATE id = id
3.insert ... select ... where not exist
根据 select 的条件判断是否插入, 可以不光通过 primary 和 unique 来判断, 也可通过其它条件. 例如:
- 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
来源: http://www.bubuko.com/infodetail-2801086.html