Как увеличить значение ячейки во всех строках таблицы?
Добрый день
Есть таблица с миллионом записей
В таблице есть интовое поле (position)
Помогите написать запрос, который увеличит ВО ВСЕХ записях значение position на 1
Можно ли это сделать на чистом SQL ?
Если нет - то можно с добавлением python
Можно и без where: UPDATE table1 SET col1 = col1+1
Важный момент, решите что делать если значение поля null - прописать 1 или оставить null. Если первое - добавьте вторую команду update table1 set col1=1 where col is null, если второе - хватит и первой команды.
Стоп стоп стоп!!! Это не правда! Where используется когда необходимо выставить условие(я), нет необходимости в условиях (для всех записей таблицы) - where не стоит использовать в update выражении. Аналогично и в других командах select,delete,....
Пожалуйста, срочно подучите основы SQL!
AVKor: Да я видел. Лично я за обязательное наличие where condition для UPDATE-запросов. Даже если условных вроде "1=1". Позволяет защититься от "случайных" запросов, после которых восстановление данных превращается в увлекательный квест.
В Oracle тоже не обязательно. Дмитрий, это Ваше дело, но: SQL - это язык, представьте себе если в "стандартном" языке программирования вы напишите: if 1==1 {s++};
Это не логично у другого человека возникнет подозрение, что тут не чисто. У меня, когда увидел ваш Where в ответе- то, что SQL запрос сгенерирован и скопипастен из недоработанной сторонней утилиты или framework-а, которая не проверяя наличия условий по умолчанию выставляет заглушку а-ля 1=1. А если увидеть подобное в коде - то подумал бы, что ранее было условие и в процессе отладки убрали его, а where оставили, чтобы в дальнейшем не забыть и снова добавить условие.
Это плохой стиль - не делайте так.
Дмитрий Ковальский: Конечно, но для перестраховки существуют:
- тестовые базы с данными актуальными боевым
- бекапы.
- транзакции.
В Oracle, который вы приводите, для подтверждения изменений необходимо завершить транзакцию позднее (не обязательно непосредственно после update) commit-ом.
Простите за активность, просто я "вживую" в первые встретился с таким неожиданным применением Where.
У вас это, наверное дело привычки (или перестраховки). Все мы разные.