MySQL-এ SET ডেটা টাইপ ব্যবহার করে কমা-বিন্যস্ত মান স্টোর করা যায়। একটি নির্দিষ্ট মান মুছে ফেলার জন্য বিটওয়াইজ অপারেশন (&~) এবং FIND_IN_SET() ফাংশন ব্যবহার করা হয়।
SET কলামসহ টেবিল তৈরি
mysql> create table DemoTable836(FirstName SET('John','Chris','Adam'));
Query OK, 0 rows affected (0.60 sec)
ডেটা ইনসার্ট
mysql> insert into DemoTable836 values('John,Chris');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable836 values('John,Chris,Adam');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable836 values('Chris,Adam');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable836 values('John,Adam');
Query OK, 1 row affected (0.37 sec)
রেকর্ড দেখানো
mysql> select * from DemoTable836;
আউটপুট:
+-----------------+ | FirstName | +-----------------+ | John,Chris | | John,Chris,Adam | | Chris,Adam | | John,Adam | +-----------------+ 4 rows in set (0.00 sec)
'Chris' মানটি মুছে ফেলা
mysql> update DemoTable836
set FirstName = FirstName & ~ (1 << FIND_IN_SET('Chris', FirstName) - 1);
Query OK, 3 rows affected (0.21 sec)
Rows matched: 4 Changed: 3 Warnings: 0
আপডেট 후 রেকর্ড
mysql> select * from DemoTable836;
ফলাফল:
+-----------+ | FirstName | +-----------+ | John | | John,Adam | | Adam | | John,Adam | +-----------+ 4 rows in set (0.00 sec)
ব্যাখ্যা
FIND_IN_SET('Chris', FirstName)- 'Chris'-এর পজিশন বের করে (১-ভিত্তিক)।1 << (pos - 1)- সেই পজিশনের বিটমাস্ক তৈরি করে।& ~mask- সেই বিটটি ০ করে মানটি মুছে ফেলে।- সতর্কতা: SET টাইপে সর্বোচ্চ ৬৪টি মানের সীমা রয়েছে।