Как обновить данные в таблице, если данные совпадают с другими, а затем вставить в mysql

Вставьте строку в sql, если она совпадает, а затем обновите ее.

я пробовал

INSERT INTO test (name, email)
SELECT * FROM (SELECT 'Rupert', '[email protected]') AS tmp
WHERE NOT EXISTS (
    SELECT name FROM test WHERE name = 'Rupert'
) LIMIT 1;

Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

SELECT * FROM `test`;

+----+--------+-----------------+
| id | name   | email           |
+----+--------+-----------------+
|  1 | Rupert | [email protected] | 
+----+--------+-----------------+

Это работает только для проверки дублирующейся записи. но я хочу, чтобы, если запись не найдена, вставить ее или обновить.

INSERT INTO test (name, email)
SELECT * FROM (SELECT 'Rupert', '[email protected]') AS tmp
WHERE NOT EXISTS (
    SELECT name FROM test WHERE name = 'Rupert'
) LIMIT 1;

Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

SELECT * FROM `test`;

+----+--------+-----------------+
| id | name   | email           |
+----+--------+-----------------+
|  1 | Rupert | [email protected] | 
+----+--------+-----------------+

Какой у Вас вопрос?

Tim Biegeleisen 28.05.2019 07:22

Я хочу обновить строку в mysql, если она соответствует условию where. если не совпадают, вставьте строку в mysql.

Abhishek Pandey 28.05.2019 07:27

Пожалуйста, прочитать документацию.

Tim Biegeleisen 28.05.2019 07:28

Я пробовал это INSERT INTO test(name,email) VALUES ('abhi','[email protected]') ON DUPLICATE KEY UPDATE name='abhi'; ОБНОВЛЕНИЕ набора тестов name='abhishek' email='[email protected]' ГДЕ name = 'abhi'; это показывает мне ошибку

Abhishek Pandey 28.05.2019 07:39
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
4
168
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать ON DUPLICATE KEY

во-первых, вам нужно создать уникальный индекс: ALTER TABLE тестADD UNIQUE email(электронная почта`);

таким образом, если вы вставите запись с тем же значением электронной почты, она обновит запись.

INSERT INTO test (name, email) VALUES("Rupert", "[email protected]") 
ON DUPLICATE KEY UPDATE name = "Rupert", email = "[email protected]"

если это новое электронное письмо, оно создаст новую запись

Ответ принят как подходящий

Прежде всего, вам нужно выполнить этот запрос

ALTER TABLE test ADD CONSTRAINT email UNIQUE (email);

После этого используйте это, он обновит вашу запись, если она существует

INSERT INTO test (name,email) VALUES ('Gorilla','[email protected]') ON DUPLICATE KEY UPDATE email = "[email protected]"

Другие вопросы по теме