Как осуществить такой update в базу SQL?

378
13 мая 2017, 19:13

Здравствуйте. Есть такая структура:

ainc    |id |price  |dost   |name   |field1 |field2 |field3
-----------------------------------------------------------
1       |78 |232    |1      |qwer   |jdfglh |value2 |rghtr
2       |26 |139    |0      |dfwq   |hutrh  |value2 |gr46g
3       |99 |656    |1      |efew   |rhier  |value2 |fgdfg
4       |85 |134    |1      |43fd   |ergui  |value2 |xzvfg
5       |59 |614    |0      |vcrw   |hjfue  |value2 |dgrhj

ainc - auto_increment
id - primary key

Наполняю базу таким запросом:

INSERT INTO db (id,price,dost,name,field1,field2,field3) 
    VALUES ('65','659', '1','qwery','dfsdd','rgers','zxcdf')

В связи с тем что, у таблицы есть PRIMARY KEY, записи с НЕ уникальным полем ID в БД не попадают: Duplicate entry - Error Но можно ли обновить некоторые поля, если БД увидела дубль?

Идет запрос к БД, SQL видит что запрос содержит дубль - то есть ID уже есть в базе, и ОБНОВЛЯЕТ строку, например, по колонкам price и fild3 для дублирующей строки (ID).

Премного благодарен за помощь в решении задачи.

Answer 1

Можно для этого есть такая конструкция

INSERT INTO table (val) values (val) on duplicate key update key = key_val 
Answer 2

Вам нужен не INSERT INTO, а REPLACE INTO:

REPLACE INTO db (id,price,dost,name,field1,field2,field3) 
    VALUES (65,659,1,'qwery','dfsdd','rgers','zxcdf')

Если записи нет - она добавится. Если есть - старая удалится, новая вставится.

ID уже есть в базе, и ОБНОВЛЯЕТ строку, например, по колонкам price и fild3 для дублирующей строки (ID).

Если же при наличии дубля надо часть полей оставлять от "старой" записи - то да, только ODKU:

INSERT INTO db (id,price,dost,name,field1,field2,field3) 
    VALUES (65,659,1,'qwery','dfsdd','rgers','zxcdf')
    ON DUPLICATE KEY UPDATE price=659, field3='zxcdf'
READ ALSO
Можно ли упростить данный sql запрос

Можно ли упростить данный sql запрос

Есть такой запрос к базе данных MySql

264
MySQL: помогите с запросом

MySQL: помогите с запросом

есть такие записи:

347
Почему маркеры не обновляются?

Почему маркеры не обновляются?

Есть поток в котором происходит добавние маркеров и послдеющее их обновление

252
Замена слов в строке

Замена слов в строке

Прочитать код программы и в каждом слове, короче 5-ти символов заменить все символы на звездочкиПуть к программе и название нового файла вписываются...

313