मेरे पास एक टेबल है, foo, जिसे 'create_at' द्वारा विभाजित किया गया है और इसकी प्राथमिक कुंजी (id
, created_at
) है। यानी .:मैं विभाजित MySQL डीबी में किसी फ़ील्ड पर एक अद्वितीय अनुक्रमणिका कैसे जोड़ूं?
CREATE TABLE `foo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`bar_id` int(11) DEFAULT NULL,
...
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (TO_DAYS(created_at))
(PARTITION p0 VALUES LESS THAN (733712) ENGINE = InnoDB,
PARTITION p1 VALUES LESS THAN (733773) ENGINE = InnoDB,
PARTITION p2 VALUES LESS THAN (733832) ENGINE = InnoDB,
PARTITION p3 VALUES LESS THAN (733893) ENGINE = InnoDB,
...
)
मैं एक अद्वितीय सूचकांक कैसे बना सकता हूँ ऐसी है कि bar_id
सभी विभाजनों भर में अनूठा है? अगर मैं कुछ इस तरह का प्रयास करें:
CREATE UNIQUE INDEX some_index USING BTREE ON foo (bar_id);
मैं त्रुटि प्राप्त:
ERROR 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function
लेकिन, अगर मैं विभाजन समारोह (id
, created_at
) शामिल हैं मैं एक सूचकांक के साथ अंत जब तत्कालीन सूचकांक के निर्माण कि गारंटी नहीं देता है कि bar_id अद्वितीय है।
अद्यतन
मैंने कहा जाना चाहिए था मैं पहले से ही मेज पर एक प्राथमिक कुंजी है:
PRIMARY KEY (`id`,`created_at`)
इसके अलावा, bar_id शून्य हो सकता है।
अरे, क्या आप एक रास्ता समझ गए? मैं एक ही मुद्दे के साथ संघर्ष कर रहा हूं। मुझे यह भी समझ में नहीं आता कि विभाजन कुंजी को अद्वितीय कुंजी का हिस्सा क्यों होना चाहिए। इससे समझ में नहीं आता है। – varunl
@ वरुणल, मेरे पास भी एक ही समस्या है। मुझे विभाजन कुंजी के रूप में 'प्रारंभ डेटाटाइम' फ़ील्ड का उपयोग करने की आवश्यकता है और मैं इसे प्राथमिक कुंजी के रूप में दायर 'आईडी' के साथ बना देता हूं, लेकिन मुझे अन्य फ़ील्ड को अनन्य कुंजी के रूप में जाना है जो वास्तव में अद्वितीय होने की आवश्यकता है। – shgnInc