برای جدول users با ستونهای id (PRIMARY KEY)، name و email (UNIQUE) یک عبارت SQL بنویسید که اگر رکوردی با همان id وجود داشت آن را بروزرسانی کند و در غیر این صورت یک رکورد جدید درج کند (UPSERT).
8.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:18 0.0
در این مسئله از عملیات UPSERT استفاده کنید تا هم درج و هم بروزرسانی را در یک عبارت انجام دهید؛ بسته به پایگاهداده میتوانید از سینتکسهای مختلف استفاده کنید — برای PostgreSQL از INSERT ... ON CONFLICT (id) DO UPDATE SET ... میتوان بهره برد، در MySQL از INSERT ... ON DUPLICATE KEY UPDATE و در SQL Server از MERGE استفاده کنید. نکات: مطمئن شوید که id یا email کلید یکتا/اصلی دارد، در صورت نیاز از تراکنش استفاده کنید و برای جلوگیری از بازنویسی ناخواسته فقط ستونهای مورد نظر را در بخش UPDATE تعیین نمایید (در PostgreSQL میتوانید RETURNING را برای بازگرداندن سطر حاصل استفاده کنید).
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای جدول users با id به عنوان کلید اصلی و email به عنوان کلید یکتا، از یک UPSERT استفاده کنید تا اگر رکورد با همان id وجود داشت بروزرسانی شود و در غیر این صورت درج گردد. در PostgreSQL میتوانید از INSERT ... ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name, email = EXCLUDED.email استفاده کنید و در صورت نیاز با RETURNING نتیجه را بازگردانید. برای جلوگیری از بازنویسی ناخواسته فیلدهای غیرمجاز، فقط ستونهای لازم را در SET مشخص کنید و ممکن است با WHERE مانند WHERE users.name IS DISTINCT FROM EXCLUDED.name تغییرات را کنترل کنید. همچنین توصیه میشود این عملیات را در یک تراکنش انجام دهید تا از اختلال همزمانی جلوگیری شود.
گزارش