Вставить в базу данных MySQL, если записи уже существуют, затем обновить
Возможный дубликат:
Как мне обновить, если существует, вставить, если нет (иначе upsert или merge) в MySQL?
как вставить в базу данных MySQL, если записи уже существуют, то обновить... Я знаю, что есть решение на этой странице: http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html
sib_table
+=======================================================+
| sib_id | std_id | sib_name | sib_sex | sib_age |
+=======================================================+
| 1 | 77 | Sajjad | m | 5/17/1990 |
| 1 | 77 | Farah | f | 9/14/1980 |
| 1 | 77 | Bilal | m | 1/10/1995 |
+=======================================================+
Что такое sql, если я захочу добавить родного брата в эту таблицу.
INSERT INTO sib_table
(std_id,sib_name,sib_sex,sib_age)
VALUES ('77','Sajjad','m','1/5/2010')
ON DUPLICATE KEY
UPDATE id = LAST_INSERT_ID(id), c = 3;
INSERT INTO sib_table
(std_id,sib_name,sib_sex,sib_age)
VALUES
('77','Aamna','f','1/27/2005')
ON DUPLICATE KEY
UPDATE id = LAST_INSERT_ID(id), c = 3;
3 ответа
Вы близки, но вам нужно относиться к ON DUPLICATE KEY
пункт так же, как UPDATE
заявление. Это означает, что вам нужно настроить уникальный ключ, чтобы попытаться сделать:
INSERT INTO sib_table (std_id,sib_name,sib_sex,sib_age)
VALUES ('77','Sajjad','m','1/5/2010')
... будет работать только один раз. Затем вы добавляете ON DUPLICATE KEY UPDATE
предложение, чтобы изменить остальные поля (то есть те, которые не являются частью ключа), чтобы соответствовать.
Так, например, при условии, что я правильно прочитал структуру таблицы, если вы поместите уникальный составной ключ в столбцы std_id
а также sib_name
, это гарантирует, что вы не можете добавить двух братьев и сестер с одинаковым именем. А это значит, что когда вы идете, чтобы добавить еще один, как это:
INSERT INTO sib_table (std_id,sib_name,sib_sex,sib_age)
VALUES ('77','Aamna','f','1/27/2005')
ON DUPLICATE KEY
UPDATE sib_sex = 'f', sib_age = '1/27/2005'
... он сделает одну из двух вещей:
- добавьте новую строку, если Aamna не существует в семье #77.
- или обновите пол и дату рождения Амны, если она была добавлена ранее.
Эта структура является более мощной, чем MySQL REPLACE
потому что это позволяет вам сделать что-то иное с конфликтующей строкой, чем просто перезаписать его тем, что вы пытались вставить. Конечно, большую часть времени функциональность REPLACE
это то, что на самом деле хотел. Но лучше узнать более общее утверждение.
Попробуйте следующее:
REPLACE INTO sib_table (std_id,sib_name,sib_sex,sib_age)
VALUES ('77','Aamna','f','1/27/2005')
Проверить количество строк в футляре:
SELECT * where ...
if (number of rows == 0) {
INSERT ...
} else {
Update ...
}