PDA

View Full Version : برگشت ID بانک اطلاعاتی به اول...



alireza.stack
سه شنبه 08 شهریور 1390, 11:19 صبح
سلام
زمانی که تعداد داده به بانک اطلاعاتی وارد می کنم بعد از مدتی بعضی از آنها را پاک می کنم. ID رکورد جدید از همان آخر شروع می شود.
بط.ر مثال اگر 10 رکورد داشته باشم از ID با شماره ی 1 تا 10 و من رکورد اول را پاک کنم در Insert بعدی رکورد جدید شناسه ی 11 را خواهد گرفت در صورتی که من می خواهم شناسه ی 1 که خالی شده است به آن اختصاص پیدا کند.
آیا تابعی وجود دارد و آیا باید کار خاصی انجام دهم.
لطفا راهنمائی بفرمائید.
ممنون

amin1softco
سه شنبه 08 شهریور 1390, 11:56 صبح
فک نکنم بشه منم همیشه با auto-icrement مشکل داشتم قدیما هم سرچ کردم تنها راهش اینه که اون ستون رو حذف کنی و دوباره ایجادش کنی که اصلاً توصیه نمی شه...


ALTER TABLE table_name DROP COLUMN column_name;

ALTER TABLE table_name ADD COLUMN column_name INT NOT NULL AUTO_INCREMENT PRIMARY KEY;

MMSHFE
سه شنبه 08 شهریور 1390, 21:47 عصر
اگه فقط بخواین شماره گذاری درست بشه (مثلاً در مواقعی که چند رکورد از آخر حذف شده و شماره گذاری میخواین از آخرین رکورد موجود به بعد شروع بشه، این کد کارسازه:

ALTER TABLE `tbl` AUTO_INCREMENT = 1;

به جای tbl نام جدولتون رو بگذارین. با این کار، اگه جدول خالی باشه، فیلد A_I روی 1 و در غیر اینصورت روی یکی بیشتر از آخرین مقدار موجود تنظیم میشه.
منبع: http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
در غیر اینصورت همون راهی که دوستمون گفتن تنها راه موجوده که به هیچ عنوان توصیه نمیشه چون اصلاً بهینه نیست و سرعت خیلی کمی داره. بخصوص اگه جدولهای دیگه براساس این فیلد ارجاعاتی به رکوردهای موجود داشته باشن که در اینصورت باید به فکر اصلاح اونها هم باشید. البته یک راه دیگه هم هست: کلاً بیخیال A_I بشین و فیلد رو عددی معمولی بگذارین و خودتون موقع ایجاد رکورد جدید، از شماره 1 شروع کنید و همینجور از اولین رکورد به سمت جلو حرکت کنید و هرجا شماره خالی دیدین، با همون شماره رکورد جدید رو درج کنید. نهایتاً اگه بخواین کارتون یکم تمیز در بیاد هم میتونید با یک ALTER TABLE دوباره جدول رو براساس اون فیلد مرتب کنین.
موفق باشید.