INSERT IGNORE "vs" INSERT ... ON DUPLICATE KEY UPDATE

Если вы хотите увидеть, что mysql-if все это означает, вот краткое inserts описание всего:

CREATE TABLE `users_partners` (
  `uid` int(11) NOT NULL DEFAULT '0',
  `pid` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`uid`,`pid`),
  KEY `partner_user` (`pid`,`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Первичный inserts ключ основан на обоих столбцах inserts этой справочной таблицы. Первичный mysql-if ключ требует уникальных значений.

Начнем:

INSERT INTO users_partners (uid,pid) VALUES (1,1);
...1 row(s) affected

INSERT INTO users_partners (uid,pid) VALUES (1,1);
...Error Code : 1062
...Duplicate entry '1-1' for key 'PRIMARY'

INSERT IGNORE INTO users_partners (uid,pid) VALUES (1,1);
...0 row(s) affected

INSERT INTO users_partners (uid,pid) VALUES (1,1) ON DUPLICATE KEY UPDATE uid=uid
...0 row(s) affected

обратите mysql-if внимание, что приведенное mysql-query выше сэкономило слишком много mysql-server дополнительной работы, установив mysql-table столбец, равный самому себе, на mysqldump самом деле обновление не mysqlsh требуется

REPLACE INTO users_partners (uid,pid) VALUES (1,1)
...2 row(s) affected

а теперь несколько my-sql многострочных тестов:

INSERT INTO users_partners (uid,pid) VALUES (1,1),(1,2),(1,3),(1,4)
...Error Code : 1062
...Duplicate entry '1-1' for key 'PRIMARY'

INSERT IGNORE INTO users_partners (uid,pid) VALUES (1,1),(1,2),(1,3),(1,4)
...3 row(s) affected

Никаких my-sql других сообщений в консоли mysql-table не генерировалось, и теперь mysql-query у нее есть эти 4 значения mysql-query в данных таблицы. Я удалил mysql-query все, кроме (1,1), чтобы я mysqlsh мог тестировать с того же mysqldump игрового поля

INSERT INTO users_partners (uid,pid) VALUES (1,1),(1,2),(1,3),(1,4) ON DUPLICATE KEY UPDATE uid=uid
...3 row(s) affected

REPLACE INTO users_partners (uid,pid) VALUES (1,1),(1,2),(1,3),(1,4)
...5 row(s) affected

Вот и все. Поскольку mysql-server все это было выполнено на mysqlsh новой таблице почти без данных mysql-if и не в рабочей среде, время mysql-table выполнения было микроскопическим mysql-if и несущественным. Любой, у my-sql кого есть реальные данные, будет mysqld более чем рад внести свой mysqldump вклад.

mysql

insert

2022-11-02T17:25:34+00:00