সন্নিবেশ করান ... কী চাবি (কিছুই করবেন না)


184

আমার কাছে দুটি কলামের জন্য একটি অনন্য কী সহ একটি টেবিল রয়েছে:

CREATE  TABLE `xpo`.`user_permanent_gift` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`fb_user_id` INT UNSIGNED NOT NULL ,
`gift_id` INT UNSIGNED NOT NULL ,
`purchase_timestamp` TIMESTAMP NULL DEFAULT now() ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `user_gift_UNIQUE` (`fb_user_id` ASC, `gift_id` ASC) );

আমি সেই টেবিলের মধ্যে একটি সারি toোকাতে চাই, তবে কীটি উপস্থিত থাকলে কিছুই করার নেই! কীগুলি বিদ্যমান বলে আমি ত্রুটি উত্পন্ন করতে চাই না।

আমি জানি যে নীচের বাক্য গঠন রয়েছে:

INSERT ... ON DUPLICATE KEY UPDATE ...

তবে এর মতো কিছু আছে:

INSERT ... ON DUPLICATE KEY DO NOTHING 

?

উত্তর:


331

হ্যাঁ, ব্যবহার করুন INSERT ... ON DUPLICATE KEY UPDATE id=id(এটি idনিজের উপর নির্ধারিত হলেও সারি আপডেটটি ট্রিগার করবে না )।

যদি আপনি ত্রুটিগুলি (রূপান্তর ত্রুটি, বিদেশী কী ত্রুটিগুলি) এবং স্বতঃসংশোধনের ক্ষেত্রের ক্লান্তি (যদি ডুপ্লিকেট কীয়ের কারণে সারিটি সন্নিবেশ না করা হয় তবে এটি বাড়ানো হয়) এর বিষয়ে যত্নশীল না হন তবে ব্যবহার করুন INSERT IGNORE


5
শুধু ইনসার্টের পরে আইগনোর যুক্ত করতে বাক্য বাক্য গঠন একই?
ufk

25
@ufk: INSERT IGNOREছাড়া ON DUPLICATE KEYঅংশ, যেমনINSERT IGNORE INTO xpo.user_permanent_gift (...) VALUES (...)
BoltClock

125
নোট করুন যে INSERT IGNORE অন্যান্য ত্রুটি যেমন ডেটা রূপান্তর ব্যর্থতাও উপেক্ষা করে।
mjcopple

36
সুতরাং আমি ডুপ্লিকেট কী আপডেট আপ আইডি = আইডি ব্যবহার করব। আমি কেবলমাত্র ডুপ্লিকেটগুলিকে অন্য কোনও ধরণের ত্রুটি নয় উপেক্ষা করতে চাই।
ufk

7
সতর্ক থাকুন INSERT IGNORE সারি সন্নিবেশ না করা সত্ত্বেও অটো-ইনক্রিমেন্ট কলাম বৃদ্ধি করবে
WorM

9

'উপস্থিত না থাকলে IMোকান' কীভাবে?

1। REPLACE INTO

পেশাদাররা:

  1. সহজ।

কনস:

  1. অত্যন্ত ধীর.

  2. প্রবেশের মিল থাকলে অটো-ইনক্রিমেন্ট কী পরিবর্তিত হবে (1 টি বৃদ্ধি হবে ) unique keyবা primary keyএটি পুরানো এন্ট্রি মুছে ফেললে নতুন একটি প্রবেশ করান।

2। INSERT IGNORE

পেশাদাররা:

  1. সহজ।

কনস:

  1. এন্ট্রি মিল থাকলে অটো-ইনক্রিমেন্ট কী পরিবর্তন হবে না unique keyবা primary keyকিন্তু স্বয়ং-বৃদ্ধি সূচক 1 বৃদ্ধি হবে

  2. কিছু অন্যান্য ত্রুটি / সতর্কতা উপেক্ষা করা হবে যেমন ডেটা রূপান্তর ত্রুটি।

3। INSERT ... ON DUPLICATE KEY UPDATE

পেশাদাররা:

  1. আপনি এটির সাহায্যে সহজেই 'সংরক্ষণ বা আপডেট করুন' ফাংশনটি প্রয়োগ করতে পারেন

কনস:

  1. অপেক্ষাকৃত জটিল দেখায় যদি আপনি কেবল আপডেট না করে সন্নিবেশ করতে চান।

  2. যদি সেখানে এন্ট্রির সাথে মেলে যে স্বয়ং-বৃদ্ধি কী পরিবর্তন হবে না unique keyবা primary keyকিন্তু স্বয়ং-বৃদ্ধি সূচক 1 বৃদ্ধি হবে

৪. এন্ট্রি মিল থাকলে কোনওভাবেই অটো-ইনক্রিমেন্ট কী বাড়ানো বন্ধ করুন unique key বা হয় primary key?

@ টোয়েনের নীচের মন্তব্যে যেমনটি উল্লেখ করা হয়েছে: "অটো-ইনক্রিমেন্ট কলাম প্রভাবিত হবে innodb_autoinc_lock_modeসংস্করণ 5.1 এর পরে কনফিগারেশনের উপর নির্ভর করবে " আপনি যদি innodbনিজের ইঞ্জিন হিসাবে ব্যবহার করেন তবে এটিও সম্মতিতে প্রভাব ফেলে, সুতরাং ব্যবহারের আগে এটি ভালভাবে বিবেচনা করা দরকার। এখন পর্যন্ত আমি এর চেয়ে ভাল কোনও সমাধান দেখছি না।


স্বয়ং-বৃদ্ধি কলাম প্রভাবিত করা হবে উপর নির্ভর করে innodb_autoinc_lock_modeসংস্করণ 5.1 পরে কনফিগ
toien

1

ব্যবহার করুন ON DUPLICATE KEY UPDATE ...,
gণাত্মক: কারণ UPDATEদ্বিতীয় ক্রিয়াকলাপের জন্য সংস্থানসমূহ ব্যবহার করে।

ব্যবহার করুন INSERT IGNORE ...,
gণাত্মক: মাইএসকিউএল কিছু ভুল হয়ে থাকলে কোনও ত্রুটি দেখাবে না, তাই আপনি ত্রুটিগুলি পরিচালনা করতে পারবেন না। আপনি যদি ক্যোয়ারীর বিষয়ে চিন্তা না করেন তবেই এটি ব্যবহার করুন।


@ আব্দুল আপনি কি এখানে ব্যাখ্যা করেছেন মাইএসকিএল সমর্থন আছে?
ললিত তারসারিয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.