نمایش نتایج 1 تا 11 از 11

نام تاپیک: تغییر اتوماتیک مقدار فیلد

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1384
    پست
    46

    تغییر اتوماتیک مقدار فیلد

    دوستان من تو دیتابیس خودم یک primery key دارم که auto number هست.حالا وقتی یک ردیفی از این جدول حذف میشه ،میخوام اون فیلد اتونامبر من خودش تشخیص بده و مثلا اگر ردیف 9 حذف شده ، ردیف 10 بیاد جاش و یک ردیف خالی وجود نداشته باشه.یعنی از آخر کم بشه.

  2. #2
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    Shiraz
    سن
    30
    پست
    51

    نقل قول: تغییر اتوماتیک مقدار فیلد

    من مدت ها این مشکل رو داشتم ولی در آخر به این نتیجه رسیدم که هیچ راهی درستی برای این موضوع نیست ولی چند تا روش دور زدن ارائه دادن که نظر شخصی من نیست

  3. #3
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    Shiraz
    سن
    30
    پست
    51

    نقل قول: تغییر اتوماتیک مقدار فیلد

    از این روش می توانید برای re-assign کردن استفاده کنید
    به علت اینکه من از دیتابیس شما مطلع نبودم sql Statement برای شما نوشتم

    ALTER TABLE `tabelName` DROP `whatFieldYouWant`;
    ALTER TABLE `tabelName` AUTO_INCREMENT = 1;
    ALTER TABLE `tabelName` ADD `whatFieldYouWant` int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;


    در کل الگوریتم استفاده شده در این کد این است که
    1- فیلد با افزایش خود کار خدف می شود.
    2- افزایش خودکار را به 1 تغییر داده
    3- تولید یک فیلد جدید با امکان افزایش خودکار با همان نام

    یا علی

  4. #4

    نقل قول: تغییر اتوماتیک مقدار فیلد

    چه لزومی داره که این کارو کنی؟ تو میتونی هر کاری رو که دلت میخواد!! با همین Primary Key های نامرتب انجام بدی!!
    در ضمن وقتی حجم دیتا بیست زیاد شه مشکلات جدی خواهی داشت!
    اگه سرعت و درگیر بودن CPU & I/O برات مهم نیس روش بالا روش خوبی به نظر میرسه ولی اگه قراره با حجم بالایی از دیتا ها کار کنی و 100% اصرار داری که این کارو کنی اون وقت باید وقت بذاری و یه Custom SQL متناسب با نیاز های خودت بنویسی!!
    موفق باشی

  5. #5
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1384
    پست
    46

    نقل قول: تغییر اتوماتیک مقدار فیلد

    فکر نمیکرم انقدر پیچیده باشه.گفتم شاید خود sql server امکانی داشته باشه که شماره ها رو خودش ترتیب بده.خیلی هم ضایعه هستش.چون مثلا از شماره 8 میپره رو 10 .این فیلد هم فقط برای شمارش رکوردها استفاده میشه.نیازی به ثابت بودن شماره ها نیست.

  6. #6
    نه اشتباه نکن این فیلد یه Primary Key هستش و برایه یگانه سازی رکورد ها در دیتا بیس استفاده میشن! مثل شماره شناسنامه ی آدما مثلا وقتی یه نفر میمره(حدف میشه) آیا شماره شناسنامه ها ریست میشن؟؟
    اگه میخوای تعداد رکورد ها رو بدونی از تابع Count [ بسته به نوع دیتا بیس ] استفاده کن.

    فک کنم برا این میخوای این Primary key ها ریست شن برا اینکه در به جدول یا یه همچین چیزی نشون بدی؟ اگه به این منظور باشه اینجا یه Counter میذاری که به ازای هر رکورد Counter+=1 میشه اینجوری میتونی از همون چیزی که میگی " از 8 میپره به 10 " در ظاهر کار خلاص شی!
    موفق باشی
    آخرین ویرایش به وسیله mehdi.mousavi : شنبه 15 مرداد 1390 در 12:34 عصر دلیل: ادغام دو پست متوالی

  7. #7
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1384
    پست
    46
    اینی که میگی درست.ولی راهی نداره که مثلا این ستون ریست بشه یا از نوع شماره بندی بشه؟

    نقل قول نوشته شده توسط Nima0711 مشاهده تاپیک
    از این روش می توانید برای re-assign کردن استفاده کنید
    به علت اینکه من از دیتابیس شما مطلع نبودم sql Statement برای شما نوشتم

    ALTER TABLE `tabelName` DROP `whatFieldYouWant`;
    ALTER TABLE `tabelName` AUTO_INCREMENT = 1;
    ALTER TABLE `tabelName` ADD `whatFieldYouWant` int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;


    در کل الگوریتم استفاده شده در این کد این است که
    1- فیلد با افزایش خود کار خدف می شود.
    2- افزایش خودکار را به 1 تغییر داده
    3- تولید یک فیلد جدید با امکان افزایش خودکار با همان نام

    یا علی
    من مبتدی هستم.لطفا توضیح میدی چطوری از این کدها استفاده کنم؟
    آخرین ویرایش به وسیله mehdi.mousavi : شنبه 15 مرداد 1390 در 12:33 عصر دلیل: ادغام دو پست متوالی

  8. #8

    نقل قول: تغییر اتوماتیک مقدار فیلد

    یه سوال میخوای با اینا چکار کنی که این همه اصرار بر ریست داری؟ ( واقعا جایه سوال شد از این همه اصرار!!! )
    تو حتی میتونی یه فیلد مخصوص به این کار رو اصلا ایجاد کنی! هدفت از این کار چیه؟

  9. #9
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1387
    پست
    94

    نقل قول: تغییر اتوماتیک مقدار فیلد

    سلام دوست عزیز
    این کار به هیچ عنوان کار خوبی نیست و پیشنهاد میکنم دنبال این کار نرو بجای این که بخوایی اینو ریست کنی بهتره که یک ستون به بانک اضافه کنی مثلا با نام شماره که در اون از یک شروع کنی به شماره گذاری و وقتی که میخوای فیلیدی رو اضافه کنی بیایی بری توی اون ستون و آخرین عدد رو بخونی و با 1 جمع کنی و ثبت کنی که البته باز هم اگر از وسط چیزی رو پاک کنی با همین مشکل روبرو میشی اما برای رفع این مشکل میتونی در کد هات قرار بدی که هر روز یا هر هفته و... بیاد و این ستون رو از 1 تا آخر درست کنه باز این بهتر از اینه که بیایی و کلید اصلی رو تغییر بدی و البته باید این رو هم بگم که اگه تعدادشو میخوایی همن جور که دوستمون گفت از count استفاده کن و درکل از این فکر بیا بیرون چون درصورتی که شما رکورد های زیادی داشته باشی هزینه زیادی به سیستم وارد میکنی مثلا درنظر بگیر که 1000000 یا بیشتر رکورد داری و هر روز یا هر هفته بیایی و اینا رو از 1 تا آخر مرتب کنی میدونی چه زمان و سرعتی میخواد ؟؟؟؟ و چه فشاری به سیستم ومیاری و برنامه خودت رو سنگین میکنی ؟ اما اگه به جای این برای تعداد از count استفاده کنی در یک لحظه میتونی بدون هیچ مشکلی به تعداد کل دس پیدا کنی
    موفق باشی

  10. #10
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    R0)ot -> Main();
    پست
    1,158

    نقل قول: تغییر اتوماتیک مقدار فیلد

    دوست عزیز نمی دونم می خوای چی کار کنی . اما کلا برای این جور کارها در Sql Server باید از Trigger استفاده کنی . به طوری که یه SP می نویسی و توش مشخص می کنی در زمان حذف یا اضافه یا ویرایش یه سری کار رو انجام بده . در کل باید بری سراغ این روش .

    باتشکر احسان

  11. #11

    نقل قول: تغییر اتوماتیک مقدار فیلد

    دوستان به هر روشی بخواییم این کار رو انجام بدیم روش پر هزینه ایی خواهد بود, چه با Trigger و چه با Counter چون باز هم مجبور خواهیم شد که یه بار کل دیتا بیس رو مرتب کنیم. [ حالا با دوره های تناوب مرتب سازی مختلف ]
    آخرین ویرایش به وسیله mehdi.mousavi : شنبه 15 مرداد 1390 در 12:35 عصر دلیل: حذف موارد غیر فنی پست!

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •