নিম্নলিখিত টিউটোরিয়াল SQL সার্ভারে সেট নাল অন ডিলিট সীমাবদ্ধতার সাথে বিদেশী কী বিদেশী কী ব্যাখ্যা করবে৷
এসকিউএল সার্ভারে ডিলিট এ সেট NULL সহ বিদেশী কী কী?
বিদেশী কীগুলি মুছে ফেলার উপর নাল সেট করতে বাধ্য যার মানে যখন প্যারেন্ট টেবিলের একটি রেকর্ড মুছে ফেলা হয়, তখন বিদেশী কী মান ক্ষেত্রের চাইল্ড টেবিলে সংশ্লিষ্ট রেকর্ড সেট করা হবে NULL থেকে চাইল্ড টেবিলে লেখা টেবিলটি SQL সার্ভার থেকে মুছে ফেলা হবে না।
বিদেশী কীগুলি প্রদান করে যে মুছে ফেলার সময় শূন্য মানটি তৈরি করা টেবিল বা ALTER TABLE বিবৃতি দিয়ে তৈরি করা যেতে পারে৷
CREATE TABLE স্টেটমেন্ট দিয়ে মুছে ফেলা হলে NULL মান সেট করতে বাধা সহ বিদেশী কী তৈরি করুন
সিনট্যাক্স
CREATETABLE bang_con
(
cot1 kieudulieu [ NULL | NOT NULL ],
cot2 kieudulieu [ NULL | NOT NULL ],
…
CONSTRAINT fk_ten
FOREIGN KEY (cot_con1, cot_con2, … cot_con_n)
REFERENCES bang_me (cot_me1, cot_me2, … cot_me_n)
ON DELETE SET NULL
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
);
bang_con
আপনি যে চাইল্ড টেবিলটি তৈরি করতে চান তার নাম৷
cot1, cot2৷
সারণিতে আপনি যে কলামটি তৈরি করতে চান৷ প্রতিটি কলামে 1টি ডেটা টাইপ আছে, শূন্য বা NULL মান ধারণ করার জন্য অবশ্যই নির্দিষ্ট করতে হবে, অন্যথায় ডিফল্ট NULL।
SQL সার্ভারে ডেটার ধরন
fk_ten
তৈরি করার জন্য বিদেশী কী সীমাবদ্ধতার নাম৷
cot_con1, cot_con2, . cot_con_n
bang_con-এর কলামটি bang_me-তে প্রাথমিক কী উল্লেখ করতে চায়৷
bang_me
প্যারেন্ট টেবিলের নামে bang_con-এ ব্যবহৃত প্রাথমিক কী রয়েছে৷
cot_me1, cot_me2, . cot_me_n
যে কলামটি bang_me-তে প্রাথমিক কী তৈরি করে৷ বিদেশী কীগুলি ডেটা এবং কলাম cot_con1, cot_con2, এর মধ্যে সীমাবদ্ধতা তৈরি করবে। cot_con_n in bang_con.
অন ডিলিট সেট নাল
প্যারেন্ট টেবিলের ডেটা মুছে গেলে চাইল্ড টেবিলের ডেটা NULL এ সেট করা হবে৷ উপ-ডেটা মুছে ফেলা হয় না।
আপডেট চলছে৷
বিকল্প৷ পিতামাতার ডেটা আপডেট করা হলে সন্তানের ডেটার সাথে কী করতে হবে তা নির্দেশ করে৷ নো অ্যাকশন, ক্যাসকেড, সেট নাল এবং সেট ডিফল্ট বিকল্প রয়েছে৷
কোন পদক্ষেপ নেই৷
চালু মুছে ফেলা বা আপডেট করার সাথে ব্যবহার করুন, অর্থাৎ যখন পিতামাতার ডেটা মুছে ফেলা বা আপডেট করা হয় তখন সন্তানের ডেটা দিয়ে কিছুই করবেন না৷
CASCADE৷
অন ডিলিট বা অন আপডেটের সাথে ব্যবহার করুন, যার অর্থ হল যখন পিতামাতার ডেটা মুছে ফেলা বা আপডেট করা হয় তখন চাইল্ড ডেটা মুছে বা আপডেট করা হয়৷
NULL সেট করুন৷
অন ডিলিট বা অন আপডেটের সাথে ব্যবহার করুন, যার অর্থ হল যখন প্যারেন্ট ডেটা মুছে ফেলা বা আপডেট করা হয় তখন চাইল্ড ডেটা NULL এ সেট করা হয়৷
ডিফল্ট সেট করুন৷
অন ডিলিট বা অন আপডেটের সাথে ব্যবহার করুন, মানে যখন প্যারেন্ট ডেটা মুছে দেওয়া বা আপডেট করা হয় তখন চাইল্ড ডেটা ডিফল্ট মান সেট করা হয়৷
উদাহরণস্বরূপ
CREATE TABLE sanpham
( id_sanpham INT PRIMARY KEY,
ten_sanpham VARCHAR(50) NOT NULL,
phan_loai VARCHAR(25)
);
CREATE TABLE hangtonkho
( id_hangtonkho INT PRIMARY KEY,
id_sanpham INT,
soluong INT,
luong_toithieu INT,
luong_toida INT,
CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham)
REFERENCES sanpham (id_sanpham)
ON DELETE SET NULL
);
এই উদাহরণে, আমরা তথ্য ক্ষেত্র id_sanpham সহ প্রাথমিক কী সহ প্যারেন্ট টেবিল, সানফাম তৈরি করেছি। তারপরে hangtonkho নামে একটি চাইল্ড টেবিল রয়েছে যার সাথে একটি বিদেশী কী মুছে ফেলার সীমাবদ্ধতা রয়েছে। CREATE TABLE স্টেটমেন্ট হ্যাংটনখো টেবিলে fk_htk_id_sanpham নামে একটি বিদেশী কী তৈরি করে। বিদেশী কী হ্যাংটনখো টেবিলের আইডি_সানফাম কলাম এবং সানফাম টেবিলের আইডি_সানফামের মধ্যে সম্পর্ক তৈরি করে।
এই বিদেশী কীটি এসকিউএল সার্ভারকে জানাতে ডিলিট সেট নাল-এ নির্দিষ্ট করা হয়েছে যে যখন প্যারেন্ট টেবিলের ডেটা থাকে তখন চাইল্ড টেবিলের সংশ্লিষ্ট রেকর্ড মানটিকে NULL এ সেট করা প্রয়োজন মুছে ফেলা হয়েছে এই উদাহরণে, যখন id_sanpham টেবিল থেকে মুছে ফেলা হয়, id_sanpham ব্যবহার করে হ্যাংটনখো টেবিলে সংশ্লিষ্ট রেকর্ডটি NULL এ সেট করা হবে।
এটা মনে রাখা গুরুত্বপূর্ণ যে হ্যাংটনখো টেবিলের id_sanpham কলামটি NULL-এ সেট করা হবে, তাই এই কলামটি NULL মান গ্রহণ করার অনুমতি দেওয়া হয়েছে তা নিশ্চিত করা প্রয়োজন৷ CREATEA দিয়ে তৈরি করার সময় NOT NULL এ সেট করা থাকলে, নিম্নলিখিত ত্রুটির সম্মুখীন হবে৷
CREATE TABLE hangtonkho
( id_hangtonkho INT PRIMARY KEY,
id_sanpham INT NOT NULL,
soluong INT,
luong_toithieu INT,
luong_toida INT,
CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham)
REFERENCES sanpham (id_sanpham)
ON DELETE SET NULL
);
Msg 1761, Level 16, State 0, Line 1
Cannot create the foreign key 'fk_htk_id_sanpham' with the SET NULL referential action, because one or more referencing columns are not nullable.
Msg 1750, Level 16, State 0, Line 1
Could
thể tạo constraint hoặc chỉ mục. Xem lỗi trước.
নিশ্চিত করুন যে আপনি নীচে দেখানো হিসাবে NULL মান পেতে হ্যাংটনখো টেবিলে id_sanpham কলামটি সংজ্ঞায়িত করেছেন৷
CREATE TABLE hangtonkho
( id_hangtonkho INT PRIMARY KEY,
id_sanpham INT,
soluong INT,
luong_toithieu INT,
luong_toida INT,
CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham)
REFERENCES sanpham (id_sanpham)
ON DELETE SET NULL
);
Comma
nd (s) completed successfully.
অলটার টেবিল বিবৃতি দিয়ে মুছে ফেলার সময় সীমাবদ্ধতার সাথে একটি বিদেশী কী তৈরি করা NULL মান সেট করে
সিনট্যাক্স
ALTER TABLE state_con
ADD CONSTRAINT fk_ten
FOREIGN KEY (cot_con1, cot_con2, . cot_con_n)
REFERENCES bang_me (cot_me1, cot_me2, . cot_me_n)
ON DELETE SET NULL;
bang_con
আপনি যে চাইল্ড টেবিলটি তৈরি করতে চান তার নাম৷
fk_ten
তৈরি করার জন্য বিদেশী কী সীমাবদ্ধতার নাম৷
cot_con1, cot_con2, . cot_con_n
bang_con-এর কলামটি bang_me-তে প্রাথমিক কী উল্লেখ করতে চায়৷
bang_me
প্যারেন্ট টেবিলের নামে bang_con-এ ব্যবহৃত প্রাথমিক কী রয়েছে৷
cot_me1, cot_me2, . cot_me_n
যে কলামটি bang_me-তে প্রাথমিক কী তৈরি করে৷ বিদেশী কীগুলি ডেটা এবং কলাম cot_con1, cot_con2, এর মধ্যে সীমাবদ্ধতা তৈরি করবে। cot_con_n in bang_con.
অন ডিলিট সেট নাল
উল্লেখ করে যে যখন প্যারেন্ট টেবিলের ডেটা মুছে ফেলা হয় তখন চাইল্ড ডেটা NULL মানতে সেট করা হবে৷ চাইল্ড টেবিলের ডেটা মুছে ফেলা হবে না৷
৷উদাহরণস্বরূপ
ALTER TABLE hangtonkho
ADD CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham)
REFERENCES sanpham (id_sanpham)
ON DELETE
SET NULL;
এই উদাহরণে, হ্যাংটনখো সাব টেবিলটি fk_htk_id_sanpham নামের একটি বিদেশী কী দিয়ে তৈরি করা হয়েছে, যা id_sanpham-এর উপর ভিত্তি করে প্যারেন্ট টেবিল সানফামকে উল্লেখ করে।
SQL সার্ভারের জন্য ON DELETE SET NULL উল্লেখ করে বুঝতে হবে যে যখন প্যারেন্ট টেবিলের id_sanpham ডেটা মুছে ফেলা হবে, হ্যাংটনখো সাব টেবিলের সংশ্লিষ্ট রেকর্ডটি NULL মান সেট করা হবে৷