18 ই অক্টোবর 2007
শুরু করার জন্য: সর্বশেষ মাইএসকিউএল হিসাবে শিরোনামে উপস্থাপন করা সিনট্যাক্স সম্ভব নয়। তবে বিদ্যমান কার্যকারিতাটি ব্যবহার করে যা প্রত্যাশা করা হয় তা সম্পাদন করার বেশ কয়েকটি খুব সহজ উপায় রয়েছে।
3 টি সম্ভাব্য সমাধান রয়েছে: INSERT IGNORE, REPLACE, বা INSERT ব্যবহার করে ... কী কী আপডেটের জন্য।
কল্পনা করুন আমাদের একটি টেবিল রয়েছে:
CREATE TABLE `transcripts` (
`ensembl_transcript_id` varchar(20) NOT NULL,
`transcript_chrom_start` int(10) unsigned NOT NULL,
`transcript_chrom_end` int(10) unsigned NOT NULL,
PRIMARY KEY (`ensembl_transcript_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
এখন কল্পনা করুন যে এনাম্বেল থেকে ট্রান্সক্রিপ্টগুলি মেটা-ডেটা আমদানি করার একটি স্বয়ংক্রিয় পাইপলাইন রয়েছে এবং বিভিন্ন কারণে এই পাইপলাইনটি কার্যকর করার যে কোনও পদক্ষেপে ভেঙে যেতে পারে। সুতরাং, আমাদের দুটি জিনিস নিশ্চিত করা দরকার:
পাইপলাইনের বারবার মৃত্যুদণ্ড কার্যকর করা আমাদের ডাটাবেসকে ধ্বংস করবে না
'সদৃশ প্রাথমিক কী'র ত্রুটির কারণে বারবার মৃত্যুদণ্ড কার্যকর হবে না।
পদ্ধতি 1: REPLACE ব্যবহার করে
এটা খুবই সাধারণ:
REPLACE INTO `transcripts`
SET `ensembl_transcript_id` = 'ENSORGT00000000001',
`transcript_chrom_start` = 12345,
`transcript_chrom_end` = 12678;
রেকর্ডটি বিদ্যমান থাকলে এটি ওভাররাইট করা হবে; এটি এখনও উপস্থিত না থাকলে এটি তৈরি করা হবে। তবে, এই পদ্ধতিটি ব্যবহার করা আমাদের ক্ষেত্রে দক্ষ নয়: আমাদের বিদ্যমান রেকর্ডগুলি ওভাররাইট করার দরকার নেই, কেবল এগুলি এড়িয়ে যাওয়া ঠিক।
পদ্ধতি 2: INSERT IGNORE ব্যবহার করা খুব সহজ:
INSERT IGNORE INTO `transcripts`
SET `ensembl_transcript_id` = 'ENSORGT00000000001',
`transcript_chrom_start` = 12345,
`transcript_chrom_end` = 12678;
এখানে, যদি 'ensembl_transcript_id' ডাটাবেসে ইতিমধ্যে উপস্থিত থাকে, তবে এটি নিঃশব্দে এড়ানো হবে (উপেক্ষা করা হবে)। (আরও সুনির্দিষ্টভাবে বলতে গেলে, এখানে মাইএসকিউএল রেফারেন্স ম্যানুয়ালটির একটি উদ্ধৃতি দেওয়া হয়েছে: "আপনি যদি আইগনোর কীওয়ার্ডটি ব্যবহার করেন তবে INSERT বিবৃতি কার্যকর করার সময় ঘটে যাওয়া ত্রুটিগুলির পরিবর্তে সতর্কতা হিসাবে বিবেচনা করা হবে example উদাহরণস্বরূপ, IGNORE ব্যতীত একটি সারি যা বিদ্যমান ইউনিক্যু সূচকটি নকল করে ates বা সারণীতে প্রাথমিক কী মান একটি সদৃশ-কী ত্রুটির কারণ এবং বিবৃতিটি বাতিল করা হয়েছে orted ")) রেকর্ডটি এখনও উপস্থিত না থাকলে এটি তৈরি করা হবে।
এই দ্বিতীয় পদ্ধতির বেশ কয়েকটি সম্ভাব্য দুর্বলতা রয়েছে, অন্য কোনও সমস্যা দেখা দিলে ক্যোয়ারীর গর্ভপাত না করা সহ (ম্যানুয়ালটি দেখুন)। এর আগে যদি আইগনোর কীওয়ার্ড ছাড়াই পরীক্ষা করা হয় তবে এটি ব্যবহার করা উচিত।
পদ্ধতি 3: INSERT ব্যবহার করা হচ্ছে ... কী কী আপডেটের জন্য ডুপ্লিকেট:
তৃতীয় বিকল্পটি INSERT … ON DUPLICATE KEY UPDATE
সিনট্যাক্স ব্যবহার করা , এবং আপডেটের অংশে 0 + 0 গণনা করার মতো কিছু অর্থহীন (খালি) অপারেশন না করে (জিওফ্রে এই অপারেশনটিকে উপেক্ষা করার জন্য মাইএসকিউএল অপ্টিমাইজেশান ইঞ্জিনের জন্য আইডি = আইডি অ্যাসাইনমেন্টটি করার পরামর্শ দেয়)। এই পদ্ধতির সুবিধা হ'ল এটি কেবল সদৃশ কী ইভেন্টগুলি উপেক্ষা করে এবং অন্যান্য ত্রুটিগুলি ত্যাগ করে।
চূড়ান্ত বিজ্ঞপ্তি হিসাবে: এই পোস্টটি Xaprb দ্বারা অনুপ্রাণিত হয়েছিল। আমি নমনীয় এসকিউএল কোয়েরি লিখতে তার অন্যান্য পোস্টের সাথে পরামর্শ করার পরামর্শ দেব।