MySQL-এ একাধিক কলাম (যাতে DATE টাইপও থাকতে পারে) মিলিয়ে কম্পোজিট UNIQUE KEY তৈরি করা যায়। এটি ডুপ্লিকেট এন্ট্রি প্রতিরোধ করে।
সিনট্যাক্স
CREATE TABLE table_name (
id INT,
date_col DATE,
-- অন্যান্য কলাম
UNIQUE KEY unique_key_name (id, date_col)
);
উদাহরণ
CREATE TABLE key_referring_date_demo (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
client_id INT,
client_project_deadline DATE,
client_name VARCHAR(100),
client_age INT,
client_country VARCHAR(20),
UNIQUE KEY uniq_client_deadline (client_id, client_project_deadline)
);
টেবিল কাঠামো যাচাই
SHOW CREATE TABLE key_referring_date_demo;
আউটপুট (আংশিক)
CREATE TABLE `key_referring_date_demo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`client_id` int(11) DEFAULT NULL,
`client_project_deadline` date DEFAULT NULL,
`client_name` varchar(100) DEFAULT NULL,
`client_age` int(11) DEFAULT NULL,
`client_country` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_client_deadline` (`client_id`,`client_project_deadline`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
ডুপ্লিকেট প্রতিরোধ যাচাই
INSERT INTO key_referring_date_demo (client_id, client_project_deadline, client_name)
VALUES (100, '2024-03-15', 'Project Alpha');
-- আবার একই ক্লায়েন্ট ও ডেডলাইন দিয়ে ইনসার্ট করলে এরর
INSERT INTO key_referring_date_demo (client_id, client_project_deadline, client_name)
VALUES (100, '2024-03-15', 'Project Beta');
-- ERROR 1062 (23000): Duplicate entry '100-2024-03-15' for key 'uniq_client_deadline'
ALERT TABLE দিয়ে পরে যোগ করা
ALTER TABLE existing_table
ADD UNIQUE KEY uniq_name_date (name_col, date_col);
দ্রষ্টব্য
DATE,DATETIME,TIMESTAMPসবই ইউনিক কিয়ে অংশ হতে পারেNULLমান একাধিকবার থাকতে পারে (ইউনিক কিNULL=NULLধরে না)- ইনডেক্স অর্ডার মাঃন রাখে:
(client_id, deadline)≠(deadline, client_id)ক্যোয়ারি অপ্টিমাইজেশনের জন্য