Не работает auto_increment

hell0w0rd

Продвинутый новичок
@Вурдалак, ну вот тебе нужно запилить проектик небольшого размера, за 3-10 дней. Ты в нем будешь все модели описывать, юзать UUID, а потом зальешь на vps за 5 баксов? Такое нужно только для долгих проектов с кучей логики. Если вообще нужно.
А так, да, autoincrement не нужен, берите postgres, там нормальные sequence и сахар в виде SERIAL, даже не заметите перехода.
PS эта тема и особенность mysql, второй плюс к sequence, после того, что можно заранее id узнать и поставить гарантированно уникальный уже из приложения.
Хотя mysql тоже мог бы просто служебную табличку с инкрементами завести. Интересно, в машке эта "фича" так и осталась?
 

Вурдалак

Продвинутый новичок
@Вурдалак, ну вот тебе нужно запилить проектик небольшого размера, за 3-10 дней. Ты в нем будешь все модели описывать, юзать UUID, а потом зальешь на vps за 5 баксов?
Неа, я разве где-то к подобному призывал? :) Мне просто лениво каждый раз писать: «в большом проекте с кучей логики». Я думаю, тут люди неглупые и понимают о чём речь. Я дополняю вот этот список: http://phpclub.ru/talk/threads/Выбор-framework.80801/page-4#post-731297
 
Последнее редактирование:

Breeze

goshogun
Команда форума
Партнер клуба
Такое нужно только для долгих проектов с кучей логики.
Ошибаешься %) Даже с небольшой логикой это удобно, делается один раз 20 строк и все, пользуй где хочешь.
Вызвать $sequence->nextval(); не требует большого напряжения.
Явное фигурирование значения pk помогает и от других граблей, например, при восстановлении данных из wal, если кто-то бэкапы промумил, а такое бывает, как ни странно ;)
 

Sufir

Я не волшебник, я только учусь
Ошибаешься %) Даже с небольшой логикой это удобно, делается один раз 20 строк и все, пользуй где хочешь.
Вызвать $sequence->nextval(); не требует большого напряжения.
Согласен, именно этот момент делается и используется просто и быстро, что дает возможность его даже в небольших случаях использовать. Не так давно, совсем маленький проект делал (два дня работы), в нём применял. Не из-за необходимости, там совсем просто, логики очень мало (практически к CRUD сводится) и изменяться он сильно вряд ли будет, а исключительно эксперимента ради. Никаких особых трудностей с этим нет и значительного времени тоже не нужно.
 

Breeze

goshogun
Команда форума
Партнер клуба
логики очень мало
Логики id->parent_id уже достаточно, чтобы задуматься об целостности не только при удалении/изменении, но и при восстановлении :)

Цепочка в коде типа insert into table values(без автоинкремент pk), select last_insert_id(), insert into table2 set parent_id=1234 имеет неоднозначное соответствие в контексте восстановления данных, тем более, когда автоинкремент может измениться :)
 

hell0w0rd

Продвинутый новичок
Логики id->parent_id уже достаточно, чтобы задуматься об целостности не только при удалении/изменении, но и при восстановлении :)

Цепочка в коде типа insert into table values(без автоинкремент pk), select last_insert_id(), insert into table2 set parent_id=1234 имеет неоднозначное соответствие в контексте восстановления данных, тем более, когда автоинкремент может измениться :)
Это в mysql select last_insert_id(). В нормальных базах returning */id и все тип-топ.
 

hell0w0rd

Продвинутый новичок
returning - это pgsql-расширение, в ansi sql такого нет
В ansi sql вообще много чего нет. Нет массивов, json/jsonb, не знаю есть ли функциональные индексы с условиями, геометрические типы. Мы же говорим о полноценной базе с ее плюсами и минусами.
 

Breeze

goshogun
Команда форума
Партнер клуба
Мы же говорим о полноценной базе с ее плюсами и минусами.
Это ветка про mysql ^_^

Хорошо: insert into table values(без автоинкремент pk) returning pk, insert into table2 set parent_id=1234
Все-равно нет однозначного соответствия одного другому :)
 

hell0w0rd

Продвинутый новичок
Типа MSSQL и DB2 - неполноценные, ага. (Справедливости ради, в них есть способы сделать то же самое).
я не к этому сказал. Я к тому, что мы рассматриваем базу полностью, со всеми ее фичами и недостатками. Если это pgsql, или еще какое-то расширение - меня это мало волнует. Есть и другие не менее достойные базы, просто стоит о них упоминать, на мой взгляд, когда люди сталкиваются с странным поведением mysql. Миграция обычно достаточно простая, а плюсов может быть масса.
 

Вурдалак

Продвинутый новичок
Миграция обычно достаточно простая, а плюсов может быть масса.
Мне кажется, что в этом потоке сообщений потерялся смысл.

Изначально меня не устраивает AUTO_INCREMENT по архитектурным соображениям на уровне модели. Поэтому я тут предлагаю, например, эмулировать sequences.
Но с AUTO_INCREMENT есть и инфраструктурные проблемы, вроде описанного поведения с InnoDB. Скорее всего это не фатально (как минимум, не все из присутствующих, включая меня, вообще про эту проблему слышали), но это ещё одна причина, по которой нужно настороженно относится к AUTO_INCREMENT.

Т.е. абсурдно мигрировать на Postgres, только потому что в Postgres есть родные sequences, с точки зрения кода модели, о котором я парюсь, тут вообще никакой разницы нет.
 
Сверху