Вставьте и, если он уже существует, обновите столбцы SQL - PullRequest
2 голосов
/ 25 октября 2011
INSERT INTO users (firstname, lastname, email, mobile) VALUES ('Karem', 'Parem', 'mail@mail.com', '123456789');

Это то, что я хотел бы сделать, но если строка с таким же адресом электронной почты mail@mail.com уже существует, то она должна обновить эту строку с этими значениями.

Я нашел http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html, но я не понимаю

Ответы [ 2 ]

5 голосов
/ 25 октября 2011

Используйте ALTER TABLE , чтобы добавить уникальное ограничение для столбца email, затем попробуйте этот запрос:

INSERT INTO users(firstname, lastname, email, mobile)
VALUES ('Karem', 'Parem', 'mail@mail.com', '123456789')
ON DUPLICATE KEY UPDATE
    firstname = 'Karem',
    lastname = 'Parem',
    email = 'mail@mail.com', -- you can probably omit this
    mobile = '123456789'

Будьте осторожны - если у вас есть какие-либо другие уникальные ключи, определенные в вашей таблице (включая первичный ключ, который по определению уникален), то они также могут инициировать обновление.

1 голос
/ 25 октября 2011

Вы достигаете этой цели с помощью триггеров , но ИМХО проверка наличия первичного ключа перед вставкой / обновлением более уместна, поскольку:

  • триггеры могут привести к проблеме параллелизма,«вставить или обновить» может использовать транзакцию для защиты от таких проблем
  • ваш код будет более читабельным
  • он будет более эффективным
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...