MySQL - интересен id
6 отговора
255 прегледа
MySQL - интересен id
Възможно ли е да се направи следното нещо - да има едно поле, което играе ролята на нещо като id (може да си има и друго id, освен това). Това поле има следното свойство - ако в базата от данни има n записа, това поле приема всички стойности от 1 до n, един вид - номерира ги(автоматично ако може!). Но, за разлика от обикновените id-та, когато изтриеш нещо по средата, това поле трябва автоматично да се преизчислява, така че да няма "дупки" в числовата поредица. По принцип ми се иска това да стане с MySQL. Причината е, че се сещам за един "hard"-начин за решаването му - Stored Procedures, но това изисква леко мощна СУБД отзад. На мен ми се иска(не знам дали може!) това да стане само с MySQL. Знаете ли някой трик?
Re: MySQL - интересен id
Най добре става не със Stored procedure, а с Trigger(ако MySQL ги поддържа.). Иначе дали ще викаш Stored procedure, или ще си изпълниш някакъв скрипт на ръка, не виждам голяма разлика. Плюса на Trigger-a, e че се изпълнява на всеки insert или delete по таблицата, така че полето винаги ще ти е актуално , а минуса е, че ако преравяш цялалта таблица при всяка промяна, перформанса го пиши бегал.
нещото си става само с един UPDATE:
update tblMyTable set poleto_koeto_te_interesuwa=bbb
from
tblMyTable inner join
(select MyID, (select count(*)+1 from tblMyTable t where t.MyID<m.MyID) as bbb from tblMyTable m) as bb
on tblMyTable.MyID=bb.MyID
Синтаксиса най-вероятно не е верен за MySQL, но със сигурност има нещо подобно.
нещото си става само с един UPDATE:
update tblMyTable set poleto_koeto_te_interesuwa=bbb
from
tblMyTable inner join
(select MyID, (select count(*)+1 from tblMyTable t where t.MyID<m.MyID) as bbb from tblMyTable m) as bb
on tblMyTable.MyID=bb.MyID
Синтаксиса най-вероятно не е верен за MySQL, но със сигурност има нещо подобно.
Re: MySQL - интересен id
Тази работа дето я търсиш я има в dbase -> отговаря на RECNO() :-)))
Не е нещо, което да е кой знае какво и до колкото знам почти всички бази в момента нямат такава работа :-)
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Не е нещо, което да е кой знае какво и до колкото знам почти всички бази в момента нямат такава работа :-)
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Re: MySQL - интересен id
Я разкажи повече за dbase . Какво предлага, какви са и лицензиите и откъде да си я дръпна да речем. Още - как се връзва под Делфи(ако не е по стандартния начин, който е доста калпав - BDE).
Re: MySQL - интересен id
А, бе, подозирам че както и процедулата, MySQL не знае какво е тригер. Но тук вече стана малко "ламерски" разговора. Ще седна да попрочета документацията на MySQL-а ... Други идеи да имаш?
Re: MySQL - интересен id
На първи тур опитай да видиш с какъв скрипт можеш да го направиш - след като ти постнах предишното, се замислих дали MySQL поддържа joined updates, понеже примера, който ти дадох се възползва от тази благина.
Няма значение със какво си правиш актуализацията, важното е да можеш да я направиш. После все някак този скрипт трябва да може да се подаде от програмата, която работи с базата(далаверата на тригера е че няма да ти се наложи да викаш скрипта за актуализация всеки път, когато пипаш таблицата).
Така че, по добре забрави засега за сторед процедура или тригер и се съсредоточи върху чисто SQL актуализиране на колоната. Другото се намества.
P.S. Четенето на документацията е винаги добра идея...
Няма значение със какво си правиш актуализацията, важното е да можеш да я направиш. После все някак този скрипт трябва да може да се подаде от програмата, която работи с базата(далаверата на тригера е че няма да ти се наложи да викаш скрипта за актуализация всеки път, когато пипаш таблицата).
Така че, по добре забрави засега за сторед процедура или тригер и се съсредоточи върху чисто SQL актуализиране на колоната. Другото се намества.
P.S. Четенето на документацията е винаги добра идея...
Re: MySQL - интересен id
dbase е родителя на всички бази данни :-)))
шернато използване на файлове, с бази. беше велика работа преди повече от 10-ина години. всички интелигентни приложения го поддържат, защото е най стария стандарт. Делфито също, поне до 4 със сигурност, предполагам че и след това. Дори ексел чете таблици без никакви грижи.
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
шернато използване на файлове, с бази. беше велика работа преди повече от 10-ина години. всички интелигентни приложения го поддържат, защото е най стария стандарт. Делфито също, поне до 4 със сигурност, предполагам че и след това. Дори ексел чете таблици без никакви грижи.
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy