মাইএসকিউএল বর্তমানে শর্তসাপেক্ষ সূচিগুলি সমর্থন করে না।
আপনি যা জিজ্ঞাসা করছেন তা অর্জন করার জন্য (আপনার এটি করা উচিত নয়;)) আপনি সহায়ক টেবিল তৈরি শুরু করতে পারেন:
CREATE TABLE `my_schema`.`auxiliary_table` (
`id` int unsigned NOT NULL,
`name` varchar(250), /* specify the same way as in your main table */
PRIMARY KEY (`id`),
KEY `name` (`name`)
);
তারপরে আপনি প্রধান টেবিলটিতে তিনটি ট্রিগার যুক্ত করুন:
delimiter //
CREATE TRIGGER example_insert AFTER INSERT ON main_table
FOR EACH ROW
BEGIN
IF NEW.status = 'ACTIVE' THEN
REPLACE auxiliary_table SET
auxiliary_table.id = NEW.id,
auxiliary_table.name = NEW.name;
END IF;
END;//
CREATE TRIGGER example_update AFTER UPDATE ON main_table
FOR EACH ROW
BEGIN
IF NEW.status = 'ACTIVE' THEN
REPLACE auxiliary_table SET
auxiliary_table.id = NEW.id,
auxiliary_table.name = NEW.name;
ELSE
DELETE FROM auxiliary_table WHERE auxiliary_table.id = OLD.id;
END IF;
END;//
CREATE TRIGGER example_delete AFTER DELETE ON main_table
FOR EACH ROW
BEGIN
DELETE FROM auxiliary_table WHERE auxiliary_table.id = OLD.id;
END;//
delimiter ;
আমাদের দরকার delimiter //
কারণ আমরা ;
ট্রিগারগুলির ভিতরে ব্যবহার করতে চাই ।
এইভাবে, সহায়ক টেবিলটিতে মূল সারণী সারিগুলিতে ঠিক আইডি থাকবে যা "ACTIVE" স্ট্রিংটি যুক্ত করে, ট্রিগারগুলি আপডেট করে।
এটি ব্যবহার select
করতে, আপনি সাধারণটি ব্যবহার করতে পারেন join
:
SELECT main_table.* FROM auxiliary_table LEFT JOIN main_table
ON auxiliary_table.id = main_table.id
ORDER BY auxiliary_table.name;
যদি প্রধান টেবিলটিতে ইতিমধ্যে ডেটা রয়েছে, বা আপনি যদি এমন কিছু বাহ্যিক ক্রিয়া করেন যা ডেটাটিকে একটি অস্বাভাবিক উপায়ে পরিবর্তন করে (EG: MySQL এর বাইরে), আপনি এটি সহ সহায়ক টেবিলটি ঠিক করতে পারেন:
INSERT INTO auxiliary_table SET
id = main_table.id,
name = main_table.name,
WHERE main_table.status="ACTIVE";
কর্মক্ষমতা সম্পর্কে, সম্ভবত আপনার কাছে ধীর সন্নিবেশ, আপডেট এবং মুছে ফেলা হবে। আপনি যদি সত্যিই এমন কিছু ক্ষেত্রে মোকাবিলা করতে চান যেখানে শর্তটি ইতিবাচক হয় তবে এটি কিছুটা অর্থবহ করতে পারে। এমনকি সেভাবে, সম্ভবত কেবলমাত্র পরীক্ষার মাধ্যমে আপনি দেখতে পাচ্ছেন যে স্থানটি সংরক্ষিত হয়েছে তা সত্যিই এই ন্যায্যতাটিকে সমর্থন করে (এবং যদি আপনি সত্যিই কোনও স্থান সংরক্ষণ করছেন)।