मैं अपने आवेदन के अगले संस्करण में innodb बाधाओं का उपयोग कर डेटाबेस अखंडता शुरू कर रहा हूँ। सब कुछ ठीक हो जाता है, लेकिन मेरी कुछ तालिकाओं में हटाए गए संदर्भ (मृत रिकॉर्ड) के साथ रिकॉर्ड हैं और उनमें से मैं तालिका में बाधाओं को जोड़ नहीं सकता हूं।डेटाबेस अखंडता को संभालना
मैं कोशिश कर रहा हूँ:
ALTER TABLE `article` ADD FOREIGN KEY (`author_id`) REFERENCES `authors` (`id`) ON DELETE CASCADE;
और मैं मिलता है:
#1452 - Cannot add or update a child row: a foreign key constraint fails (`books`.<result 2 when explaining filename '#sql-442_dc'>, CONSTRAINT `#sql-442_dc_ibfk_1` FOREIGN KEY (`author_id`) REFERENCES `authors` (`id`) ON DELETE CASCADE)
इस क्वेरी चल रहा है, मुझे पता चला है कि 500 से अधिक रिकॉर्ड कोई संदर्भ हो (लेखकों हटाए गए, लेकिन उनके लेख बने रहे) :
SELECT `articles`.`id`
FROM `articles` LEFT JOIN `authors` ON `articles`.`author_id` = `authors`.`id`
WHERE ISNULL(`authors`.`id`);
तो, इससे पहले कि मैं एक बाधा जोड़ सकता हूं, मुझे उनसे निपटना होगा। उपरोक्त क्वेरी का उपयोग करके मुझे प्राप्त होने वाले सभी रिकॉर्ड्स को मैं कैसे हटा सकता हूं?
मैं कोशिश की है:
DELETE FROM `articles` WHERE `id` IN (
SELECT `articles`.`id`
FROM `articles` LEFT JOIN `authors` ON `articles`.`author_id` = `authors`.`id`
WHERE ISNULL(`authors`.`id`);
)
लेकिन mysql प्रतिक्रिया करता है:
You can't specify target table 'articles' for update in FROM clause
किसी भी मदद के लिए इस पर बहुत सराहना की जाएगी।
प्रयास: http://stackoverflow.com/questions/4770035/handling-database-integrity (डुप्लिकेट) – Benj
@Benj क्यों अपने लिंक बिंदु यह करने के लिए ** सटीक ** करता है एसओ पोस्ट? –
@ बुहकेसिंडी अच्छा ... ऐसा लगता है कि मैं अपनी प्रतिलिपि में विफल रहा ... इसे इंगित करने के लिए धन्यवाद। मुझे खेद है कि मैं (साल बाद) मूल लिंक पुनर्प्राप्त नहीं कर सकता। – Benj