দুর্ভাগ্যক্রমে মাইএসকিউএল এসকিউএল চেক সীমাবদ্ধতাগুলি সমর্থন করে না। সামঞ্জস্যতার কারণে আপনি তাদের ডিডিএল ক্যোয়ারিতে এটিকে সংজ্ঞায়িত করতে পারেন তবে সেগুলি কেবল উপেক্ষা করা হয়।
একটি সহজ বিকল্প আছে
আপনি তৈরি করতে পারেন BEFORE INSERT
এবং BEFORE UPDATE
ট্রিগার করতে পারেন যা হয় ত্রুটি সৃষ্টি করে বা ক্ষেত্রটিকে তার ডিফল্ট মানতে সেট করে যখন ডেটার প্রয়োজনীয়তা পূরণ না হয়।
BEFORE INSERT
মাইএসকিউএল 5.5 এর পরে কাজ করার উদাহরণ
DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Test`
FOR EACH ROW
BEGIN
IF CHAR_LENGTH( NEW.ID ) < 4 THEN
SIGNAL SQLSTATE '12345'
SET MESSAGE_TEXT := 'check constraint on Test.ID failed';
END IF;
END$$
DELIMITER ;
মাইএসকিউএল 5.5 এর আগে আপনাকে একটি ত্রুটি দেখাতে হয়েছিল, উদাহরণস্বরূপ একটি অপরিজ্ঞাত পদ্ধতিতে কল করুন।
উভয় ক্ষেত্রে এটি একটি অন্তর্নিহিত লেনদেন রোলব্যাকের কারণ হয়। মাইএসকিউএল নিজেই প্রক্রিয়া এবং ট্রিগারগুলির মধ্যে রোলব্যাক বিবৃতিটি মঞ্জুরি দেয় না।
আপনি যদি লেনদেনটি রোলব্যাক করতে না চান (INSERT / UPDATE ব্যর্থ "চেক সীমাবদ্ধতা" দিয়ে পাস করতে SET NEW.ID = NULL
হবে তবে আপনি মানটি ওভাররাইট করতে পারেন যা ক্ষেত্রগুলিকে ডিফল্ট মান হিসাবে আইডি সেট করবে, কোনও আইডির জন্য সত্যিকার অর্থে বোঝায় না হউক না কেন
সম্পাদনা:
বিপথগামী উদ্ধৃতি সরানো হয়েছে।
বিষয়ে :=
অপারেটর:
বিপরীতে =
, :=
অপারেটরের তুলনা অপারেটর হিসাবে কখনও ব্যাখ্যা করা হয় না। এর অর্থ আপনি :=
কোনও ভেরিয়েবলের মান নির্ধারণের জন্য কোনও বৈধ এসকিউএল স্টেটমেন্ট (কেবল এসইটি বিবৃতিতে নয়) ব্যবহার করতে পারেন ।
https://dev.mysql.com/doc/refman/5.6/en/assignment-operators.html
ব্যাকটিক শনাক্তকারীর উদ্ধৃতি সম্পর্কিত:
সনাক্তকারী উদ্ধৃতি চরিত্রটি ব্যাকটিক ("` ")
যদি ANSI_QUOTES এসকিউএল মোড সক্ষম করা থাকে তবে ডাবল উদ্ধৃতি চিহ্নের মধ্যে সনাক্তকারীদের উদ্ধৃতি দেওয়াও অনুমোদিত
http://dev.mysql.com/doc/refman/5.6/en/identifiers.html