MySQL - интересен id

6 отговора 255 прегледа
#1

MySQL - интересен id

Възможно ли е да се направи следното нещо - да има едно поле, което играе ролята на нещо като id (може да си има и друго id, освен това). Това поле има следното свойство - ако в базата от данни има n записа, това поле приема всички стойности от 1 до n, един вид - номерира ги(автоматично ако може!). Но, за разлика от обикновените id-та, когато изтриеш нещо по средата, това поле трябва автоматично да се преизчислява, така че да няма "дупки" в числовата поредица. По принцип ми се иска това да стане с MySQL. Причината е, че се сещам за един "hard"-начин за решаването му - Stored Procedures, но това изисква леко мощна СУБД отзад. На мен ми се иска(не знам дали може!) това да стане само с MySQL. Знаете ли някой трик?

Отговор
в отговор на Bиkтop #2

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, но със сигурност има нещо подобно.

Отговор
в отговор на Bиkтop #3

Re: MySQL - интересен id

Тази работа дето я търсиш я има в dbase -> отговаря на RECNO() :-)))

Не е нещо, което да е кой знае какво и до колкото знам почти всички бази в момента нямат такава работа :-)

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Отговор
в отговор на ro6avia #4

Re: MySQL - интересен id

Я разкажи повече за dbase . Какво предлага, какви са и лицензиите и откъде да си я дръпна да речем. Още - как се връзва под Делфи(ако не е по стандартния начин, който е доста калпав - BDE).

Отговор
в отговор на Blandings Castle #5

Re: MySQL - интересен id

А, бе, подозирам че както и процедулата, MySQL не знае какво е тригер. Но тук вече стана малко "ламерски" разговора. Ще седна да попрочета документацията на MySQL-а ... Други идеи да имаш?

Отговор
в отговор на Bиkтop #6

Re: MySQL - интересен id

На първи тур опитай да видиш с какъв скрипт можеш да го направиш - след като ти постнах предишното, се замислих дали MySQL поддържа joined updates, понеже примера, който ти дадох се възползва от тази благина.
Няма значение със какво си правиш актуализацията, важното е да можеш да я направиш. После все някак този скрипт трябва да може да се подаде от програмата, която работи с базата(далаверата на тригера е че няма да ти се наложи да викаш скрипта за актуализация всеки път, когато пипаш таблицата).
Така че, по добре забрави засега за сторед процедура или тригер и се съсредоточи върху чисто SQL актуализиране на колоната. Другото се намества.

P.S. Четенето на документацията е винаги добра идея...

Отговор
в отговор на Bиkтop #7

Re: MySQL - интересен id

dbase е родителя на всички бази данни :-)))

шернато използване на файлове, с бази. беше велика работа преди повече от 10-ина години. всички интелигентни приложения го поддържат, защото е най стария стандарт. Делфито също, поне до 4 със сигурност, предполагам че и след това. Дори ексел чете таблици без никакви грижи.

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Отговор