یک رویه یا تریگر بنویسید که هنگام تلاش برای درج رکورد با ایمیل تکراری در جدول users از درج جلوگیری کند، با استفاده از SIGNAL (برای MySQL) یا RAISERROR (برای SQL Server) یک خطای سفارشی با کد/پیام مشخص صادر نماید و جزئیات خطا (کد، پیام، زمان و نام کاربر) را در جدول log_errors ثبت کند.
4.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:54 0.0
برای حل این مسئله میتوانید ابتدا جدول log_errors را با ستونهایی مانند error_code، error_message، error_time و username بسازید؛ سپس در MySQL از یک تریگر BEFORE INSERT یا در SQL Server از TRY...CATCH در یک stored procedure استفاده کنید تا قبل از درج وجود ایمیل را بررسی کنید و در صورت تکرار با SIGNAL (MySQL: SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT=...) یا RAISERROR (SQL Server: RAISERROR('پیام', severity, state)) خطای سفارشی ایجاد نمایید؛ در بلوک خطا، یک ردیف در log_errors درج کرده و تراکنش را در صورت نیاز rollback کنید. نکتهها: از کدهای وضعیت استاندارد یا severity مناسب استفاده کنید، پیام واضح بنویسید و مطمئن شوید که لاگنویسی در مسیری قرار میگیرد که به خطاها دسترسی داشته باشید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
طرح استفاده از SIGNAL/RAISERROR و ثبت خطا در log_errors ایده خوبی است. بهجای تکیه صرفاً به trigger/TRY...CATCH، یک محدودیت UNIQUE روی ایمیل در جدول users اضافه کنید تا ورود تکراری بهطور فیزیکی جلوگیری شود. لاگبرداری را در داخل تراکنش اجرایی نگه دارید و در صورت خطا تراکنش را رولبک کنید تا لاگ همواره درست باشد. همچنین از ایندکس مناسب روی log_errors و پیام واضح با کد وضعیت استاندارد استفاده کنید تا تشخیص خطاها بهسرعت انجام شود.
گزارش