Я пытаюсь написать SQL-запрос, который будет проверять в таблице "лица в столбце" rName для имени "jack", и если он существует, то UPDATE, эта строка else ВСТАВЛЯЕТ новую строку с новым именем rName.
Iv тестировал утверждения IF/ELSE, но не видел, как они работают. Или есть лучший способ делать то, что я хочу, без If/ELSE? (Я не делал большую часть этой работы SQL, я использовал только UPDATE, INSERT, DELETE, ALTER... что-то вроде этого.
У меня это до сих пор: (если гнездо найдено в строке rName, затем UPDATE, иначе INSERT новая строка)
SELECT * FROM persons IF 'jack' == rName BEGIN [UPDATE Statement] END ELSE BEGIN [ INSERT Statement] END
Изменить: я не думаю, что я объяснил, что я хотел, rName должны быть уникальными именами, 2 не должны совпадать. Iv попытался включить DUPLICATE KEY UPDATE, но, похоже, просто вставляет новую строку с новыми данными. Но я хочу, чтобы он обновил уже существующую строку rName (jack) с новыми данными, имя rName (jack) должно оставаться неизменным, но другие поля в этой строке должны быть обновлены до новых предоставленных данных.
В вашем случае:
INSERT INTO persons(`rName`, `foo`) VALUES('jack', 'bar') ON DUPLICATE KEY UPDATE `foo` = VALUES(`bar`);
rName
должен иметь уникальный ключ для работы. Если в таблице есть "гнездо", оно обновляет поле foo
"баром", а если нет "гнезда", он вставляет новую строку с rName
= 'jack' и foo
= 'бар'.
Я вижу, что вы используете mysql. Вам нужен синтаксис mysql insert ... on duplicate key update
. Документация
Проблема, с которой вы сталкиваетесь с ON DUPLICATE KEY UPDATE, заключается в том, что столбец Name не имеет уникального ограничения, поэтому по определению таблицы вы допускаете дубликаты.
Смотрите также: http://dev.mysql.com/doc/refman/5.0/en/replace.html
Вы можете сделать
REPLACE INTO persons(`rName`, `foo`) VALUES('jack', 'bar')
Хотя технически, если конфликтующая строка уже существует, она удаляется и заменяется, а не обновляется. Но это может быть то, что вы хотели в любом случае.