Если я правильно понимаю, вам нужно Вставить Игнорировать :
Если вы используете модификатор IGNORE, ошибки, возникающие при выполнении
Оператор INSERT игнорируется. Например, без IGNORE, строка, которая
дублирует существующий индекс UNIQUE или значение PRIMARY KEY в таблице
вызывает ошибку двойного ключа, и оператор отменяется. С
IGNORE, строка отбрасывается и ошибки не возникает. Игнорируемые ошибки
вместо этого генерировать предупреждения.
Если есть такое же значение, оно будет игнорироваться.
Вы также можете использовать Replace
или Insert Into ... on Duplicate Key
, это зависит от того, чего именно вы хотите достичь.
Вот хороший пост по этому вопросу: https://chartio.com/resources/tutorials/how-to-insert-if-row-does-not-exist-upsert-in-mysql/
UPDATE:
По мере того, как вы обновляете свой вопрос, я также должен обновить свой ответ.
Может ли быть имя пользователя Unique
? В этом случае Insert Ignore
и Replace
также могут работать.
UPDATE2:
В крайнем случае вы можете создать такую процедуру:
DROP PROCEDURE IF EXISTS InsertUserName;
DELIMITER //
CREATE PROCEDURE InsertUserName(IN name VARCHAR(255))
BEGIN
If NOT EXISTS (select user_name from test where user_name=name limit 1) then
BEGIN
insert into test (`user_name`) values (name);
END;
END IF;
END //
DELIMITER ;
Вы можете назвать это как:
call InsertUserName('alex');
Если в таблице существует alex
, она не будет добавлена, если нет alex
, она будет вставлена.
НО, пожалуйста, хотя бы добавьте обычный неуникальный ключ в столбец user_name
, это значительно улучшит производительность.