MySQL কনস্ট্রেইন্টস (Constraints) কীভাবে পরিচালনা করে তা বুঝতে হলে আমাদেরทรানজ্যাকশনাল ও নন-ট্রানজ্যাকশনাল টেবিলের পার্থক্য জানতে হবে।
ট্রানজ্যাকশনাল ও নন-ট্রানজ্যাকশনাল টেবিল
- ট্রানজ্যাকশনাল টেবিল: রোলব্যাক (Rollback) অনুমতি দেয়।
- নন-ট্রানজ্যাকশনাল টেবিল: রোলব্যাক অনুমতি দেয় না।
এই পার্থক্যের কারণে MySQL-এ কনস্ট্রেইন্ট হ্যান্ডলিং অন্যান্য DBMS থেকে আলাদা। নন-ট্রানজ্যাকশনাল ডেটাবেসে যদি একাধিক সারি ইনসার্ট বা আপডেট করার সময় ত্রুটি হয়, তবে তা রোলব্যাক করা সম্ভব নয়। এই পরিস্থিতি সঠিকভাবে হ্যান্ডেল করতে হয়।
ত্রুটি হ্যান্ডলিং
- MySQL সার্ভার পার্সিং সময়ে সনাক্ত ত্রুটির জন্য এরর তৈরি করে।
- একবার ত্রুটি সনাক্ত হলে, স্টেটমেন্ট এক্সিকিউশন সময়ে এটি ত্রুটি থেকে রিকভার করার চেষ্টা করে।
- সব স্টেটমেন্টের জন্য এটি করা হয় না।
- ডিফল্টভাবে সার্ভার ত্রুটি থেকে রিকভার করে এক্সিকিউশন চালিয়ে যায়।
ফরেন কি (Foreign Key)
ফরেন কি টেবিল জুড়ে ডেটা ক্রস-রেফারেন্সিং সক্ষম করে, এবং ফরেন কি কনস্ট্রেইন্ট এই ছড়িয়ে থাকা ডেটার কনসিস্টেন্সি নিশ্চিত করে।
ফরেন কি রেফারেন্স
MySQL CREATE TABLE এবং ALTER TABLE স্টেটমেন্টে ON UPDATE এবং ON DELETE ফরেন কি রেফারেন্স সমর্থন করে।
রেফারেনশিয়াল অ্যাকশন (Referential Actions)
উপলব্ধ রেফারেনশিয়াল অ্যাকশনগুলো হলো:
- RESTRICT
- CASCADE
- SET NULL
- NO ACTION (ডিফল্ট)
ENUM কনস্ট্রেইন্ট
ENUM ভ্যালু কলাম ডেফিনিশনে লিস্ট করা ভ্যালুগুলো থেকে একটাই হতে হবে, অথবা তার অভ্যন্তরীণ নিউমেরিক সমতুল্য। ভ্যালু ০ (Error Value) বা খালি স্ট্রিং হতে পারে না।
উদাহরণস্বরূপ, ENUM('a','b','c') ডিফাইন করা কলামের জন্য 'a', 'b', 'c' ছাড়া অন্য যেকোনো ভ্যালু (যেমন '', 'd', 'ax') অবৈধ বলে বিবেচিত হবে এবং রিজেক্ট করা হবে।