كنترل پنل             جستجو               پرسشهای متداول            .:: آخرین پست‌های انجمن ::.            لیست اعضا            مدیران سایت             درجات        ورود
فهرست انجمن‌ها -> برنامه‌نويسي تحت وب -> زبان برنامه‌نويسي PHP
پاسخ دادن به این موضوع
insert ignore into و replace into در mysql
پست تاریخ: دوشنبه 29 فروردین 1390 - 18:40    
Gytyonline
مديريت كل انجمن‌ها
مديريت كل انجمن‌ها


پست: 899
عضو شده در: 14 شهریور 1384
محل سکونت: tehran
iran.gif


امتياز: 8184

عنوان: insert ignore into و replace into در mysql خواندن مشخصات فردی ارسال پیام شخصی ارسال email

سلام
امروز می‌خوام دو نکته بنویسم که شاید برایتان در کار با php و Mysql جدید باشد و در عین حال پر کاربر.
این 2 نکته مربوط می‌شود به وارد کردن یک رکورد جدید در table ها همان طوری که همگی می‌دانیم برای وارد کردن یک رکورد جدید در جدول از کوئری زیر استفاده می‌کنیم:

کد:
INSERT INTO table_name VALUES (value1, value2, value3,...)

OR

INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...)


که در دستور اول فقط به ترتیب فیلد‌ها متغییر‌ها را وارد کرده و هر متغییر در فیلد مربوطه قرار می‌گیرد و در دستور دوم هم نام فیلد‌هایی را که قرار است متغییر در آنها قرار بگیرد وارد می‌کنیم.

توجه: در نوع اول باید تمامی فیلد‌ها ذکر شوند و اگر فیلدی قرار باشد متغییر در آن قرار نگیرد باز هم باید اورده شود تا ترتیب حفظ شود ولی مقدار آن را '' قرار میدهیم تا Null قرار گیرد.

خوب نکته جدید چیست؟
فرض کنید ما کلید اصلی در جدول را یک فیلد رشته‌ای قرار داده باشیم یا فیلدی که auto_index نباشد و مقدار آن را خود ما تعیین میکنیم ولی خاصیت یکتا بودن را دارد که امکان اشتباه بالا می‌رود، در این گونه موارد ممکن است ما مقداری را برای کلید اصلی در نظر بگیریم که قبلا وارد شده است در insert های قبلی و اگر ما بخواهیم این مقدار تکراری در جدول وارد نشود و از بروز این گونه خطا‌ها جلوگیری شود از دستور زیر به جای دستور insert معمولی استفاده می‌کنیم:
کد:

INSERT IGNORE INTO table_name
    (primaryKey, column1, column2)
VALUES
    ('abc', 1, 2);


خوب حال کوئری بالا رکوردی را با PK که ما برای آن تعیین کرده‌ایم یعنی abc قبل از اینکه وارد جدول کند چک می‌شود که رکوردی با این PK وجود دارد یا نه اگر وجود داشت این کوئری دستور را نادیده گرفته و اجرا نمی‌شود و برنامه نیز متوقف نمی‌شود به خاطر خطا و به کار خود ادامه می‌دهد ولی اگر از روال قبل استفاده می‌کردیم خطای ایجاد شده باعث بروز مشکل در اجرای برنامه می‌شد.

حال فرض کنید ما بخواهیم رکوردی قبلا با این کلید اصلی بوده است ولی در این وارد کردن اطلاعات جدید اطلاعات آن فیلد‌ها تغییر کرده است و یعنی ما نمی‌دانیم این کلید اصلی وجود دارد یا نه و از طرفی هم در نظر داریم اگر وجود دارد باید اطلاعات آن به روز شود می‌توانیم از کوئری زیر استفاده نماییم:

کد:

REPLACE INTO table_name
    (primaryKey, column1, column2)
VALUES
    ('abc', 1, 2);


شاید با خودتان بگویید مزیت این روش چیست یا اینکه از update استفاده می‌کنیم؟
اما باید بگوییم که Update زمانی به کار می‌اید که شما بدانید قطعا رکوردی موجود می‌باشد و قصد بروز رسانی آن را داشته باشید اما اینجا ممکن هست رکورد مورد نظر موجو باشد و یا اینکه رکورد مورد نظر موجود نباشد در صورت موجود بودن بروز رسانی خواهد شد و در صورت عدم وجود insert خواهد شد.
و مزیت این روش این می‌باشد که اگر شما به صورت معمولی استفاده نمایید اول باید با یک کوئری وجود یا عدم وجود این رکورد را چک کنید و با توجه به جوابی که دریافت خواهید کرد در صورت عدم وجود آن رکورد، ان را insert و در صورت وجود آن را updaete خواهید کرد یعنی 3 کوئری ( که بین کوئری دوم و سوم یکی اجرا خواهد شد) اما با این روش شما فقط با نوشتن 1 کوئری این کار را انجام داده‌اید.
در برنامه‌های کوچک و دیتابیس‌هایی که رکورد زیادی ندارند و تعداد دفعات فرستادن درخواست کم می‌باشد شاید زیاد مهم نباشد ولی در دیتابیس‌هایی با رکورد‌های زیاد و پر درخواست مطمعنا پرکاربرد است. و در کل هرچه تعداد درخواست‌های شما به دیتابیس کمتر باشد برنامه شما بهینه‌تر می‌باشد.

نکته: در insert ingnore into این خاصیت فقط و فقط برای کلید اصلی شما فراهم می‌شود نه فیلد‌های دیگر حتی اگر آنها UNIQUE باشند.

موفق باشید.
امین شفیعی;

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: دوشنبه 29 فروردین 1390 - 22:12    
Hamid
مدیريت كل سایت
مدیريت كل سایت


پست: 5496
عضو شده در: 31 اردیبهشت 1384
محل سکونت: -::ساوه::-
iran.gif


امتياز: 47792

عنوان: پاسخ به «insert ignore into و replace into در mysql» خواندن مشخصات فردی ارسال پیام شخصی

عالی بود آفرين
از اون نکات هست که شاید خیلی کم پیش بیاد، اما اگر پیش بیاد به خاطر همین کم مطرح شدنش در اینترنت، باید کلی بگردی تا پیدا کنی!
پس ممنون که کار رو ساده کردی Wink

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:


نمایش پستها:                 مشاهده موضوع قبلی :: مشاهده موضوع بعدی  
پاسخ دادن به این موضوع
 

صفحه 1 از 1

تمام زمانها بر حسب GMT + 3.5 Hours می‌باشند
 Related Topics 


 information 

 

پرش به:  
شما نمی توانید در این بخش موضوع جدید پست کنید
شما نمی توانید در این بخش به موضوعها پاسخ دهید
شما نمی توانید موضوع های خودتان را در این بخش ویرایش کنید
شما نمی توانید موضوع های خودتان را در این بخش حذف کنید
شما نمی توانید در این بخش رای دهید


Copyright 2004-2024. All rights reserved.
© by Aftabgardan Cultural Center : Aftab.cc