2009-07-24 8 views
35

मुझे यह त्रुटि MySQL बनाने में मिल रही है। मैं कर रहा हूं:MySQL errorno 121

CREATE TABLE `blogReply` (

    `Id`  INT(24)  NOT NULL AUTO_INCREMENT COMMENT 'Primary Key of This Table', 
    `blogId` INT(24)  NOT NULL COMMENT 'Blog where this reply was posted', 
    `userId` INT(24)  NULL COMMENT 'User the blog was posted by', 
    `name` VARCHAR(100) NULL DEFAULT 'Unknown' COMMENT 'The Name of the user that the reply was posted by', 
    `email` VARCHAR(100) NULL DEFAULT 'Unknown' COMMENT 'The Email of the user that the reply was posted by', 
    `http` VARCHAR(300) NULL DEFAULT 'Unknown' COMMENT 'The Webaddress of the user that the reply was posted by', 
    `message` TEXT   NOT NULL COMMENT 'text of the blog', 
    `votes` INT(10)  DEFAULT 0 COMMENT 'Rating of the Blog', 
    `ratedBy` TEXT   COMMENT 'People who have already Voted on this blog', 
    `dateReg` BIGINT  NOT NULL COMMENT 'Date the User was Registered', 

    PRIMARY KEY (`Id`), 

    CONSTRAINT `FK_userId` FOREIGN KEY(`userId`) 
     REFERENCES `user` (`Id`) 
     ON DELETE SET NULL 
     ON UPDATE CASCADE, 

    CONSTRAINT `FK_blogId` FOREIGN KEY(`blogId`) 
     REFERENCES `blog` (`Id`) 
     ON DELETE CASCADE 
     ON UPDATE CASCADE 

) ENGINE = InnoDB; 

कोई विचार? त्रुटि स्थिति: Can't create table './xxxxxxxx/blogReply.frm' (errno: 121)

उत्तर

116

चेक करें कि आपके सभी बाधाओं वास्तव में सही ढंग से लिखे गए हैं, यह भी जाँच क्या कोई अन्य टेबल बाधा नाम का उपयोग करता है नहीं है कि FK_userId या FK_blogId

+0

मुझे उस सिद्धांत का परीक्षण करने दें क्योंकि मुझे लगता है कि मैं पहले FK_userId नामकरण कर रहा हूं लेकिन एक अलग तालिका –

+18

नाइस में, पता नहीं था कि विदेशी कुंजी की आवश्यकता है टेबल के माध्यम से अद्वितीय नाम है। धन्यवाद :) – Shade

+0

आज मुझे यह त्रुटि पहली बार mySQL का उपयोग करके कई वर्षों से मिली है। यह वास्तव में एक संयोग था कि नाम हमेशा मेल खाते थे। –

7

त्रुटि 121 एक विदेशी कुंजी बाधा मुद्दा है। जांच करने वाली पहली बात यह है कि आपकी विदेशी कुंजी परिभाषा ठीक है (सभी टेबल और फ़ील्ड नाम सही हैं, आदि)।

साथ ही आप तालिका बनाने से पहले विदेशी कुंजी चेकों को अक्षम करने, इस तरह की कोशिश कर सकते हैं:

SET FOREIGN_KEY_CHECKS = 0; 

बाद में त्रुटियों फेंक जब आप अपने कुंजी जाँच करता है (1 के लिए सेट) को पुन: सक्षम का नकारात्मक पहलू है कि हालांकि, यदि यह मामला है, तो इसका मतलब है कि आपके पास कहीं कुछ अमान्य रिकॉर्ड हैं जो विदेशी कुंजी के निर्माण में हस्तक्षेप कर रहे हैं।

हालांकि, यह समस्या तब भी हो सकती है जब आप मैन्युअल रूप से डेटाबेस फ़ाइलों को स्थानांतरित कर रहे हैं, जैसे भौतिक रूप से data/your_database_name निर्देशिका का नाम बदलना। InnoDB इस तरह के भौतिक परिवर्तनों को सारणी से संबंधित नहीं कर सकता है, इसलिए यह आंतरिक के साथ मिल जाता है।

यदि यह वही है जो आपने किया है, तो समाधान जो आपके सबसे अच्छे डेटाबेस को वापस ले जाता है, उसे डंप या निर्यात करने के लिए स्थानांतरित करना है, और फिर से आयात करने से पहले DROP DATABASE करें।

+1

नहीं im नहीं शारीरिक रूप से चलती thisgs के आसपास हो सकता है। मैंने अभी एक इंस्टॉलेशन फाइल बनाई है और उसे सभी टेबल बनाने के लिए एक ताजा प्रतिलिपि के साथ चलाएं –

1

कृपया जांच करें कि आपके विदेशी कुंजी जो आप बना रहे हैं सभी पहलुओं में एक ही है जैसे कि निर्दिष्ट तालिका कॉलम के साथ डेटाटाइप। प्रत्येक विदेशी कुंजी नाम उन तालिकाओं के लिए अद्वितीय होना चाहिए जिसमें इसे बनाया गया है, इसे किसी अन्य तालिका में उपयोग नहीं किया जाना चाहिए। उपर्युक्त समस्या के लिए विदेशी कुंजी नाम "FK_userId" किसी भी अन्य तालिका में उपयोग नहीं किया जाना चाहिए।

1

मुझे यह समस्या mysql 5.5 में है लेकिन mysql 5.6 में ठीक काम करता है। समस्या क्योंकि बाधा नाम अद्वितीय होना लग रहा था, लेकिन अगर यह एक लंबे नाम है और गैर अद्वितीय बन छोटा किया गया है उदाहरण के लिए,:

long_constraint_name_1, long_constraint_name_2long_constraint_name_