مشكلي در MYSQL و PHP

behsa

Member
من وقتي ميخوام اطلاعاتي را به MYSQL اضافه كنم با اين خطا مواجه ميشم.
کد:
MySQL said: 

Duplicate entry 'X' for key 1
كه جاي X يك عدد متغيير قرار ميگيره.
در ضمن اين مشكل در حدود يكي دو روز هست كه بوجود آمده و چند روز پيش مشكلي وجود نداشت.

:idea: با Table هاي ديگه اين Database مشكلي ندارم.
:idea: اين Table كه مشكل دارد حدود 26,399 ركورد دارد.


كسي ميتونه راهنمايي كنه؟
 

behsa

Member
آقا اينهم جزپيات


[web:416e9e485c]http://www.behsa.com/internet/123.htm[/web:416e9e485c]
 

amirnezhad

Member
نوع فيلد ID رو از int به bigint يا يك مقدار بزرگتر تغيير بده ببين مشكلت حل ميشه يا نه؟ ...
 

behsa

Member
amirnezhad گفت:
نوع فيلد ID رو از int به bigint يا يك مقدار بزرگتر تغيير بده ببين مشكلت حل ميشه يا نه؟ ...
با سلام و تشكر از پاسخ شما
من بعد از اينكه فرمايش شما را اجرا كردم و مشكل حل شد. متوجه اين شدم كه اگر يكبار همون فيلد را با int ذخيره ميكردم باز هم مشكل حل ميشود. ( من فقط آن فيلد را اديت كردم و بدون تغيير ذخيره كردم و مشكل حل شد. ) در اين مورد نظري داريد؟
متشكر از شما
 

amirnezhad

Member
behsa گفت:
amirnezhad گفت:
نوع فيلد ID رو از int به bigint يا يك مقدار بزرگتر تغيير بده ببين مشكلت حل ميشه يا نه؟ ...
با سلام و تشكر از پاسخ شما
من بعد از اينكه فرمايش شما را اجرا كردم و مشكل حل شد. متوجه اين شدم كه اگر يكبار همون فيلد را با int ذخيره ميكردم باز هم مشكل حل ميشود. ( من فقط آن فيلد را اديت كردم و بدون تغيير ذخيره كردم و مشكل حل شد. ) در اين مورد نظري داريد؟
متشكر از شما

8O 8O 8O
به نظر من خيلي عجيب است اگر اين اتفاق افتاده باشد. مگر اينكه مقدار فيلد رو حودتون وارد نكنيد و اين كار باعث بشه كه چنانچه جاي خالي توي فيلد باشه از آونها براي مقادير جديد استفاده بشه ولي در هر صورت من فكر مي كنم كه بهتره از همون bigint استفاده كنيد.
البته يه اشكال ديگه هم ممكنه وجود داشته باشه و اونهم اينكه وقتي داري چيزي توي اين table مي ريزي، اين فيلد به دليلي مقدارش درست انتخاب نميشه و اين مشكل هم با optimize كردن حل ميشه و خوب ويرايش فيلد هم باعث optimize شدن table ميشه!
 

behsa

Member
مگر اينكه مقدار فيلد رو حودتون وارد نكنيد و اين كار باعث بشه كه چنانچه جاي خالي توي فيلد باشه از آونها براي مقادير جديد استفاده بشه


ميشه در اين مورد كمي بيشتر توضيح بديد.
 

amirnezhad

Member
behsa گفت:
مگر اينكه مقدار فيلد رو حودتون وارد نكنيد و اين كار باعث بشه كه چنانچه جاي خالي توي فيلد باشه از آونها براي مقادير جديد استفاده بشه


ميشه در اين مورد كمي بيشتر توضيح بديد.
همونطور كه خودت توي بخش ايندكسهاي مربوط به بانك اطلاعاتي مي بيني ... يه مقدار براي Cardinality در ايندكس ID هست. حالا اگه موقع وارد كردن اطلاعات توي اين table توي دستور SQL مقدار ID رو مشخص نكني، خود MySQL با توجه به اينكه اين فيلد auto_increment است، اولين مقدار بعد از اين عدد رو (26398) كه توي table نيست پيدا مي كنه و بجاي فيلد ID ميزاره!!!

خوب اگه اين مقدار صفر بشه و به هر دليلي (مثلا پاك شدن يه ركورد) توي اين فيلد جاي خالي باشه ممكنه كه اين موضوع باعث بشه تا بتوني دوباره توي table چيزي بنويسي ولي از اونجايي كه اين موضوع باز هم به خاطر تعداد بالاي ركوردها مي تونه برات مشكل درست كنه! باز هم توصيه مي كنم كه نوع فيلد ID رو به bigint تغيير بدهي!

اميدوارم كه منظورم رو فهميده باشي، اگه مشكلي بود باز هم در خدمتيم.
 

oxygenws

Active Member
سلام،

شما وقتی یک فیلد رو key تعریف می کنید توانایی قرار دادن مقدار تکراری توی اون فیلد رو ندارید

راه حل: اگر از MySQL استفاده می کنید اون فیلد رو auto_increment بکنید و هنگام وارد کردن اطلاعات (iINSERT) مقداری رو به اون فیلد پاس نده. خود MySQL مقداری رو که در جدول نباشه اونجا قرار می ده.
اون دلیلی هم که int رو به bigint تغییر بدید درسته ولی در زمانی که تمامی حالات اعداد موجود برای تعداد رکورد ها پر شده باشه.

موفق باشید، امید
 

جدیدترین ارسال ها

بالا