INSERT এর সাথে mysqldump… দ্বিপক্ষীয়


21

আমি একটি ডাটাবেস থেকে অন্য ডাটাবেসে ডেটা মার্জ করতে চাই। সুতরাং আমি mysqldumpএটি দিয়ে ডাম্প তৈরি করি এবং তারপরে এটি অন্য ডাটাবেসে আমদানি করি (একই টেবিলগুলির কাঠামো সহ)। এই ক্ষেত্রে আমার কোনও সমস্যা নেই (যেমন ডুপ্লিকেট এন্ট্রি বা অন্য কিছু)।

তবে আমি পরীক্ষার উদ্দেশ্যে কিছু মার্জ করি এবং পরে আমি চূড়ান্ত মার্জ করব। সুতরাং, আমি কয়েকবার মার্জ (ডেটা পরিবর্তন হতে পারে) সম্পাদন করতে চাই। লক্ষ্য করুন, আমার সারণীতে আমার সারিগুলি কখনই মুছে না, কেবল .োকানো বা আপডেট করা যেতে পারে।

আমি কি ডুপ্লিকেট অপশনটি দিয়ে মাইএসকিএলডাম্প তৈরি করতে পারি? অথবা আমি এমন কোনও ডাম্পকে মার্জ করতে পারি যা নতুন ডেটা সন্নিবেশ করে এবং পরিবর্তিত ডেটা আপডেট করে?

অবশ্যই, আমি ON DUPLICATEনিজেই ডাম্প sertোকাতে পারি, তবে আমি মার্জ প্রক্রিয়াটি স্বয়ংক্রিয় করতে চাই।

উত্তর:


34

এতে আপনাকে সহায়তা করার বিকল্প রয়েছে:

  --insert-ignore     Insert rows with INSERT IGNORE.
  --replace           Use REPLACE INTO instead of INSERT INTO.
  -t, --no-create-info
                      Don't write table creation info.

এই দৃষ্টান্তটি মাথায় রাখুন

  • ডিএস 1 থেকে ডিউএমপি 1-তে মাইএসকিএলডাম্প সবকিছু
  • DUM3 1 ডিবি 3 এ লোড করুন
  • ডিবি 2 থেকে --replace (বা - সন্নিবেশ-উপেক্ষা করুন) এবং - DUMP2 তে কোনও-তৈরি-তথ্য ব্যবহার করে মাইএসকিএলডাম্প
  • DUMP2 কে DB3 এ লোড করুন

1
এক মিনিট অপেক্ষা করুন: --replace ব্যবহারের অর্থ হ'ল DB2 ডেটা DB1 ডেটা ওভাররাইট করে, এবং --sert- এন্ড্রয়েট ব্যবহার করার অর্থ ডিবি 1 ডেটা বিরাজমান। সদৃশ কীগুলির ক্ষেত্রে কীভাবে আপডেট করবেন তা প্রশ্ন জিজ্ঞাসা করে। যাই হোক না কেন, আমি জানতে চাই।
এডওয়ার্ড নেওয়েল

@ এডওয়ার্ডওয়েল দয়া করে নোট করুন যে এটি প্রতিটি কলামে --replaceকরার সমান ON DUPLICATE UPDATE। দুর্ভাগ্যক্রমে, মাইএসকিলডাম্প বাল্ক লোডিং এবং মাইএসকিলডাম্পের প্রকৃতির কারণে নির্দিষ্ট কলামগুলি আপডেট করার জন্য ডিজাইন করা হয়নি। আমার উত্তরটি সহজেই প্রকাশ করে যে মাইএসকিএলডাম্প করতে সক্ষম। আপনাকে মাইএসকিলডাম্প বাদে কাস্টম কোড লিখতে হবে ON DUPLICATE UPDATE
রোল্যান্ডোমাইএসকিউএলডিবিএ

যতক্ষণ না ডিবি 1 এবং 2 এর ঠিক একই স্কিমা থাকে ততক্ষণ আপনি ঠিক বলেছেন। তবে ধরুন ডিবি 1 এর অতিরিক্ত ক্ষেত্র রয়েছে। তারপরে --replace অতিরিক্ত ভাগগুলি ভাগ করা ক্ষেত্রগুলি আপডেট করার পরিবর্তে ডিফল্ট (বা কোনও ডিফল্ট না থাকলে একটি ত্রুটি) ফিরিয়ে আনবে। আমি বুঝতে পেরেছি যে ওপি'র পরিস্থিতি একই স্কিমার সাথে দুটি ডাটাবেসের জন্য, তবে কেবল একটি পার্থক্য রয়েছে তা উল্লেখ করে এবং কিছু ক্ষেত্রে সত্যিকারের আপডেট-টাইপ ডাম্প ব্যবহার করা কার্যকর হবে (আমি এখন একটির মুখোমুখি!)
এডওয়ার্ড নেওয়েল

1
মনে রাখবেন যে বিদেশী কীগুলি যদি রেকর্ডটি আপডেট হওয়ার দিকে নির্দেশ করে তবে ব্যবহার REPLACE INTOব্যর্থ হতে পারে কারণ সেই সম্পর্কগুলি বিচ্ছিন্ন করে রেকর্ডটি মোছা যাবে না। যদি আপনার কাছে থাকে ON DELETE CASCADEতবে আপনি সেই টেবিলগুলি খালি আউট করবেন যা কোনও আপডেট হওয়া তার উপর নির্ভর করে। REPLACE INTOবেশ বিপজ্জনক অপারেশন।
ক্রিস্টোফার শুল্টজ

1
@ রোল্যান্ডোমাইএসকিউএলডিবিএ সম্মত হয়েছে। আমি কেবল মন্তব্য করতে চেয়েছিলাম যাতে এই উত্তরটি পড়ে যে কেউ বুঝতে পারে যে এই বিকল্পগুলি (বিশেষত REPLACE INTO) বিপজ্জনক হতে পারে এবং "আশ্চর্যজনক" প্রভাব ফেলতে পারে। ভাল উত্তর - কেবল একটি ক্যাভিয়েট যুক্ত করতে চেয়েছিলেন।
ক্রিস্টোফার শুল্টজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.