یک رویه یا تریگر بنویسید که هنگام تلاش برای درج رکورد با ایمیل تکراری در جدول 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 مناسب استفاده کنید، پیام واضح بنویسید و مطمئن شوید که لاگ‌نویسی در مسیری قرار می‌گیرد که به خطاها دسترسی داشته باشید.

توسط پژوهشگر در 201 روز قبل ساعت 03:54
دسته بندی ها: SQL SQL for beginner
sara در 201 روز قبل ساعت 04:45

طرح استفاده از SIGNAL/RAISERROR و ثبت خطا در log_errors ایده خوبی است. به‌جای تکیه صرفاً به trigger/TRY...CATCH، یک محدودیت UNIQUE روی ایمیل در جدول users اضافه کنید تا ورود تکراری به‌طور فیزیکی جلوگیری شود. لاگ‌برداری را در داخل تراکنش اجرایی نگه دارید و در صورت خطا تراکنش را رول‌بک کنید تا لاگ همواره درست باشد. همچنین از ایندکس مناسب روی log_errors و پیام واضح با کد وضعیت استاندارد استفاده کنید تا تشخیص خطاها به‌سرعت انجام شود.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری