কম্পিউটার টিউটোরিয়াল

MySQL ট্রিগারের সাথে SIGNAL স্টেটমেন্ট ব্যবহার

MySQL-এ SIGNAL স্টেটমেন্ট একটি ত্রুটি হ্যান্ডলিং মেকানিজম যা অপ্রত্যাশিত ঘটনা হ্যান্ডেল করে এবং প্রয়োজনে অ্যাপ্লিকেশন থেকে গ্রেসফুল এক্সিট নিশ্চিত করে। এটি হ্যান্ডলারের কাছে ত্রুটির তথ্য পাস করে।

সিনট্যাক্স

SIGNAL SQLSTATE | condition_value
    [SET signal_information_item = value_1
    [, signal_information_item = value_2, ...]];
  • SQLSTATE মান বা DECLARE CONDITION দিয়ে ঘোষিত একটি কন্ডিশন নাম হতে পারে।
  • SIGNAL স্টেটমেন্টে সর্বদা একটি SQLSTATE মান বা SQLSTATE মানসহ একটি নামকৃত কন্ডিশন নির্দিষ্ট করতে হয়।
  • SQLSTATE মান পাঁচ অক্ষরের অ্যালফানিউমেরিক কোড। নিজের কোড '00' দিয়ে শুরু করা যাবে না কারণ এগুলো সাকসেস ইঙ্গিত করে এবং ত্রুটি সিগন্যালিংয়ের জন্য বৈধ নয়।
  • ক্যাচ-অল ত্রুটি হ্যান্ডলিংয়ের জন্য '45000' SQLSTATE মান ব্যবহার করুন, যা "unhandled user-defined exception" বোঝায়।

উদাহরণ: BEFORE INSERT ট্রিগারে SIGNAL ব্যবহার

student_age টেবিলে একটি BEFORE INSERT ট্রিগার তৈরি করছি যা বয়স ০ এর কম হলে SIGNAL দিয়ে ত্রুটি ফেলবে।

mysql> CREATE TRIGGER before_insert_studentage
    -> BEFORE INSERT ON student_age
    -> FOR EACH ROW
    -> BEGIN
    ->     IF NEW.age < 0 THEN
    ->         SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'age less than 0';
    ->     END IF;
    -> END; //
Query OK, 0 rows affected (0.12 sec)

mysql> INSERT INTO student_age(age, name) VALUES(-10, 'gaurav')//
ERROR 1644 (45000): age less than 0

ফলাফল থেকে স্পষ্ট: বয়স ০ এর কম ইনসার্ট করার চেষ্টা করলে SIGNAL স্টেটমেন্ট ব্যবহার করে ত্রুটি ফেলা হয়েছে।

  1. MySQL-এ প্রিন্ট স্টেটমেন্ট সিমুলেট করা (SELECT ব্যবহার করে)

  2. MySQL-এ SUM() এবং IF() একসাথে ব্যবহার করা যায় কিনা?

  3. MySQL-এ WITH ROLLUP সঠিকভাবে ব্যবহার করা

  4. MySQL에서 CONTAINS() 대신 CONCAT과 CURDATE로 연도 포함 여부 검사하기