MySQLのinsert ignore into、replace intoなどの使い方

1418 ワード

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'NewIndex 1'フィールドが存在しないなどの他のエラーは含まれません)、警告形式でのみ返され、実行後は数値0が返されます.
INSERT  IGNORE INTO books (name,createTime) VALUES ('MySQL Manual',now());

2.on duplicate key update
primaryまたはuniqueが繰り返されると、update文が実行されます.例えば、update後はid=idのような無駄な文であれば、同じ機能ですが、エラーは無視されません.たとえば、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;