2013-11-25 4 views
3

У меня есть уникальный индексированный столбец A с целым числом в нем. Я бы хотел, чтобы он увеличивался на 1, в Oracle я делаю: update table set A = A + 1, и он сработал. Но в mySQL он дает мне следующую ошибку: - Ошибка базы данных MySQL: повторяющаяся запись «2» для ключа 1. У меня есть три строки в таблице со значением: 1, 2 и 3 в отдельности. Я знаю, почему это дает мне эту ошибку. Но как решить эту проблему? Благодарю.обновить уникальный индексированный столбец в mysql

+0

Значит, это работает в Oracle? – Strawberry

+0

Как вы решаете это зависит от того, что вы хотите. Вы хотите удалить ДРУГИЕ строки, где a = 2? Вы хотите иметь две строки, где a = 2? Скажите нам, что является правильным конечным результатом, и тогда кто-то может помочь вам туда добраться. – MJB

+1

Erm, OP захочет, чтобы строка, равная «2», стала «3» – Strawberry

ответ

2

Вы получаете эту ошибку, потому что ваш UPDATE TABLE SET A = A + 1, при обновлении первой строки от 1 до 2 (1 + 1), он получит конфликт с вашим вторым ROW , потому что там уже есть строка с ID = 2.

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

UPDATE TABLE SET ID = ID + 1 ORDER By ID DESC;

Предложение DESC сделает обновления со дна вашего стола, поэтому он не найдет дублирующий идентификатор на своем пути ...

+0

только для записи, я не копировал этот ответ от Айка, но он быстрее отвечал, пока я все еще печатал, чтобы объяснить ПОЧЕМУ, что произошла ошибка. :) – SkyHunter

+0

Вау, это работает как шарм, спасибо! – xiaoyunwu

3

Вы можете сделать это используя ORDER BY:

update table 
set A=A+1 
order by A desc 
+0

Я действительно не знал этого! – Strawberry

Смежные вопросы