MySQL вопроса тред
подскажите как провернуть такое что мол инкримент только средствами языка sql. есть такое INT поле "номер счета" и нужно чтобы оно автоматом увеличивалось на один допустим. я хочу это сделать на уровне sql через default value
TABLE ololo( name INT DEFAULT (select max(*) as...)+1 ) ну то есть типа того, короче как инкриментировать обычное поле которое не ключ |
Зачем же номер счета делать полем не уникальным и без авто инкремента?
|
laimas, потому что инкримент можно поставить только на PK а а он стоит естественно на id, а id система исопльзует для своих внутренних нужд. так же номер счета должен отличаться от id
|
Цитата:
|
Цитата:
|
UIjs, сперва надо понять что первично, курица или яйцо )
Что такое номер счета, счета чего? Почему потребовался номер по порядку? Это просто порядок или же уникальность? |
Ну, можно создать таблицу ORDERS и получить оттуда уникальные значения. Ну, будет в ней 1 столбец counter с аuto_increment-om и всё.
Тыркаем в ORDERS, получили уник-автоинкремент, вставили в основную таблицу ololo у которого свой автоинкремент. |
В OrientDB например нет autoincrementa в привычном понимании. Зато есть такой, как я описал выше.
|
Gozar, ух ты хитрый)), ха) костыль конечно но работать будет. ладно, запилю в двигле автоинкриментацию или какую нить функцию на mysqk нафурычу. в принципе можно простым селектом делать типа считать максимальное значение и бла бла бла и подставлять в другой селект. но проще этио пыхой делать. храня где то таблицу последних значений максимальных кастомных инкриментов просто. и все.
ладно |
Цитата:
|
Цитата:
Если счет, это счет к примеру заказа, и его нужно хранить наряду еще с какой либо инфой, то это таблица с первичным ключом и автоикрементом, и полем указывающем на родителя-заказ. Если же уникальность не нужна, и счет храниться в таблице заказов, значит просто поле с добавлением 1, и для этого совсем не нужно не DEFAULT значений получать, ни прочих "костылей". |
Цитата:
Цитата:
Цитата:
Речь про автоинкремент, а не про добавление единиц... Таким способом очень легко наступить на какие-нибудь феерические грабли. |
То, что проще, не всегда надёжней.
Ну да, городить лишнее это куда надежнее ) Каким автоматом ты предлагаешь увеличивать на единицу если первичный ключ занят, а 2 автоинкремента в таблице нет и max не устраивает? Индивидуальную сортировку когда либо приходилось делать или рассказывать как это делается? Ничего не понял, кто чей родитель? А счет это что, сам по себе или же он кому-то принадлежит? Заказ, это лишь пример. Речь про автоинкремент, а не про добавление единиц... Таким способом очень легко наступить на какие-нибудь феерические грабли. Из вопроса не следует, что требуется уникальность, а автоинкремент как раз и формирует это. Добавление же единицы, это всего лишь порядок, возможно он и нужен. Дело в том, что нет данных, что это и для каких целей. |
laimas,
У тебя с русским языком проблема? Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
|
Gozar,
нет проблем с этим, а вот у вас обеих видимо есть. ) Ибо на нет данных, что это и для каких целей. - бывает). А увеличить, это порядок, количество уникальность для самого счета. И если этот вопрос гвоздь преткновения, то делайте костыли. Хотя выпендриваться так, как вы вдвоем рассуждаете, совсем не обязательно, получить макс. значение поля плюс единица знаете, не сложно. А по уму, так это первичным должен быть вопрос - кто хозяин. |
Цитата:
|
Так кто же вас знает
Кого скрывают платья не понять Брут или не Брут Вот в чем вопрос :) |
laimas, ты не ответил на мой вопрос. ты просто ответил на реплику в диалоге но на вопрос не ответил.
|
Какой вопрос, по поводу пола?
|
да. у тя пукан возгарелся что все поняли а ты затупил и ты решил нас обозвать? типа бабы хуже парней а ты сделал вид что мы бабы зная что мы парни тем самым принизил нас и типа от этого не считается что ты тупану? такая у тебя логика была? типа, да, я тупанул, ну а вы, А ВЫ, А МЫ НЕ МУЖЧИНЫ, ВЫ ЖЕНЬЩИНЫ!! АХ!! СЬЕЛИ?*?? ахахааха, я очистился!! моя тупость анулировалась я перекрыл её оскорблением! 1:1 ураа ураа. такая логика?
|
Да уж, бурная логика, не у меня правда, успокойтесь, никто вас за "баб" не считает, да и женщина, это не обязательно штамп "блондинка". :)
А что я "типа рассуждал", ну так само формирование этого числа, это простая операция и не требующая наворотов, а возможно, что и подход не верный, и лучше бы оно и формировалось автоматически. Не известно, что из себя представляет вся операция "формировать счет", при каких условиях, а это может быть важным моментом. А не зная это, ну что я буду рассуждать то, да и некогда сейчас, работы много ) |
laimas, короче это айдишник, тока второй, система заняла в нутри двика айдишник и не дает мне это свойство использовать, по этому надо другое с похожими свойствами. точнее с аналогичными
|
UIjs,
Пишешь тригер AFTER INSERT, в тригере выбираешь максимальное значение поля в таблице добавляешь к нему 1 и обновляешь только, что вставленную запись |
Poznakomlus, красавчик, а нельзя ли вытворить такое:
типа того: INSERT INTO `table`(`field`) VALUES( MAX(`field`)+1 ) |
Можно и так я предложил переложить логику на MySql. Можно еще вьюху (представление) создать чтобы отображала MAX значение и выбирать из нее значение MAX. Вариантов много
|
Poznakomlus, не, я мой ваирант кстати рабочий? есть какая нить такая функция? подскажи как запрос сделать)? или я уже ТУПО УГАДАЛ)??
|
INSERT INTO `table`(`val`) VALUES ((SELECT MAX(`val`) FROM `table` as tbl) + 1) ;
к примеру так |
а есть че нить типа
`field` INT DEFAULT MAX(`field`)+1 ? |
это легко делается тригером
тригер срабатывает после вставки и сам заменит новое значение 1. Вариант вставка с подзапросом 2. Вариант сделать вьюху с отображением max/ Она будет в памяти вычисляться и будет летать. 3. Вариант это тригер 4 Вариант тригер с вьюхой самое скоростное будет При небольших объемах любой сойдет если поле индексированным сделаешь то пофиг какой объем Вариант 4 самый высокопроизводительный. И не забудь к этому полю индекс поставить |
Poznakomlus, в принципе триггер красивее смотрится и надежнее, ты прав) спасибо огромное.
|
Часовой пояс GMT +3, время: 01:36. |