"ইনসার্ট ইগনোর" বনাম "ইনসার্ট… ডুপ্লিকেট কী আপডেটে"


833

INSERTঅনেকগুলি সারি দিয়ে একটি বিবৃতি কার্যকর করার সময় , আমি নকল এন্ট্রিগুলি এড়িয়ে যেতে চাই যা অন্যথায় ব্যর্থতার কারণ হতে পারে। কিছু গবেষণার পরে, আমার বিকল্পগুলি ব্যবহার হয় বলে মনে হয়:

  • ON DUPLICATE KEY UPDATE যা কিছু মূল্যে বা অযথা আপডেট আপডেট করে
  • INSERT IGNORE যা অঘোষিতভাবে পিছলে যাওয়ার ক্ষেত্রে অন্যান্য ধরণের ব্যর্থতার জন্য একটি আমন্ত্রণ বোঝায়।

আমি কি এই অনুমানগুলিতে ঠিক আছি? কেবল সারিগুলি এড়িয়ে যাওয়ার সর্বোত্তম উপায় কী যা ডুপ্লিকেট তৈরি করতে পারে এবং অন্যান্য সারিগুলিতে চালিয়ে যেতে পারে?

উত্তর:


990

আমি ব্যবহার করার সুপারিশ করব INSERT...ON DUPLICATE KEY UPDATE

আপনি যদি ব্যবহার করেন INSERT IGNOREতবে ডুপ্লিকেট কী-এর ফলস্বরূপ সারিটি আসলে sertedোকানো হবে না। তবে বিবৃতিটি ত্রুটি তৈরি করবে না। পরিবর্তে এটি একটি সতর্কতা উত্পন্ন করে। এই কেসগুলির মধ্যে রয়েছে:

  • কলামগুলিতে PRIMARY KEYবা UNIQUEসীমাবদ্ধতার সাথে একটি সদৃশ কী In োকানো।
  • একটি NOT NULLসীমাবদ্ধতা সহ একটি কলামে একটি NULL .োকানো।
  • পার্টিশনযুক্ত টেবিলটিতে একটি সারি সন্নিবেশ করা হচ্ছে, তবে আপনি যে মানগুলি সন্নিবেশ করেছেন সেগুলি কোনও পার্টিশনে মানচিত্র দেয় না।

আপনি যদি ব্যবহার করেন তবে REPLACEমাইএসকিউএল আসলে অভ্যন্তরীণভাবে DELETEঅনুসরণ করে INSERT, যার কিছু অপ্রত্যাশিত পার্শ্ব প্রতিক্রিয়া রয়েছে:

  • একটি নতুন অটো-ইনক্রিমেন্ট আইডি বরাদ্দ করা হয়েছে।
  • বিদেশী কীগুলির সাথে নির্ভরশীল সারিগুলি মুছে ফেলা হতে পারে (যদি আপনি বিদেশী কীগুলি ক্যাসকেডিং ব্যবহার করেন) বা অন্যথায় এটি প্রতিরোধ করে REPLACE
  • যে গুলিতে আগুন লেগেছিল DELETEতারা অযথা কার্যকর করা হয়।
  • পার্শ্ব প্রতিক্রিয়াগুলি প্রতিরূপেও প্রচারিত হয়।

সংশোধন: উভয়ই REPLACEএবং INSERT...ON DUPLICATE KEY UPDATEঅ-মানক, মাইএসকিউএল সম্পর্কিত নির্দিষ্ট মালিকানাধীন উদ্ভাবন। এএনএসআই এসকিউএল 2003 একটি MERGEবিবৃতি সংজ্ঞায়িত করেছে যা একই প্রয়োজন (এবং আরও অনেকগুলি) সমাধান করতে পারে তবে মাইএসকিউএল MERGEবিবৃতি সমর্থন করে না ।


একজন ব্যবহারকারী এই পোস্টটি সম্পাদনা করার চেষ্টা করেছিলেন (সম্পাদকদের দ্বারা সম্পাদনা প্রত্যাখ্যান করা হয়েছিল)। সম্পাদনাটি এমন একটি দাবি যুক্ত করার চেষ্টা করেছিল যা INSERT...ON DUPLICATE KEY UPDATEএকটি নতুন অটো-ইনক্রিমেন্ট আইডি বরাদ্দ দেয়। এটি সত্য যে নতুন আইডি উত্পন্ন হয়েছে , তবে এটি পরিবর্তিত সারিতে ব্যবহৃত হয় না।

নীচে বিক্ষোভ দেখুন, পারকোনা সার্ভার 5.5.28 এর সাথে পরীক্ষিত। কনফিগারেশন ভেরিয়েবল innodb_autoinc_lock_mode=1(ডিফল্ট):

mysql> create table foo (id serial primary key, u int, unique key (u));
mysql> insert into foo (u) values (10);
mysql> select * from foo;
+----+------+
| id | u    |
+----+------+
|  1 |   10 |
+----+------+

mysql> show create table foo\G
CREATE TABLE `foo` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `u` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `u` (`u`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1

mysql> insert into foo (u) values (10) on duplicate key update u = 20;
mysql> select * from foo;
+----+------+
| id | u    |
+----+------+
|  1 |   20 |
+----+------+

mysql> show create table foo\G
CREATE TABLE `foo` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `u` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `u` (`u`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1

উপরেরটি প্রমাণ করে যে আইওডকিউ বিবৃতিটি সদৃশটি সনাক্ত করে এবং এর মান পরিবর্তন করার জন্য আপডেটটি অনুরোধ করে u। লক্ষ করুন AUTO_INCREMENT=3যে কোনও আইডি উত্পন্ন হয়েছিল, তবে সারিটিতে ব্যবহৃত হয়নি indicates

যেখানে REPLACEমূল সারিটি মুছে ফেলা হয় এবং একটি নতুন সারি সন্নিবেশ করানো হয়, একটি নতুন অটো-ইনক্রিমেন্ট আইডি উত্পন্ন এবং সঞ্চয় করে:

mysql> select * from foo;
+----+------+
| id | u    |
+----+------+
|  1 |   20 |
+----+------+
mysql> replace into foo (u) values (20);
mysql> select * from foo;
+----+------+
| id | u    |
+----+------+
|  3 |   20 |
+----+------+

3
আমি ভাবছি যদি মাইএসকিএল ডেভলপমেন্ট টিমের এএনএসআই এসকিউএল 2003 থেকে কখনও মার্জ গ্রহণ করার কোনও ইচ্ছা আছে?
লনি সেরা

1
@ লনিবেস্ট: মার্জ বাস্তবায়নের জন্য বৈশিষ্ট্যটির অনুরোধটি ২০০৫ সালে করা হয়েছিল, তবে আমি জানি যতটা অগ্রগতি বা পরিকল্পনা নেই। bugs.mysql.com/bug.php?id=9018
বিল

2
ওহ আমি যোগ করতে পারি যে এটি অবৈধ প্রকারের অমিলের জন্য সতর্কতা (ত্রুটি নয়) উত্পন্ন করে তবে এটি সদৃশ যৌগিক প্রাথমিক কীটির জন্য কোনও সতর্কতা উত্পন্ন করে না।
Fabrício ম্যাট

11
আমি সবেমাত্র একটি টেবিলের দিকে চেয়েছি যা প্রচুর INSERT ... ON DUPLICATE KEY UPDATE ...বিবৃতি দ্বারা পপুলেশন হয়েছে । প্রচুর ডেটা সদৃশ, এবং এটির ফলস্বরূপ এআই পিকে দুটি সারিগুলির মধ্যে 17,029,941 থেকে 46,271,740 বেড়েছে। প্রতিবার নতুন এআই-এর সেই প্রজন্মের অর্থ হ'ল আপনার পরিসরটি খুব দ্রুত পূরণ হতে পারে এবং আপনাকে পরিষ্কার করা দরকার। এই টেবিলটি মাত্র দু'সপ্তাহ পুরাতন!
ইঞ্জিনিয়ার

4
@ অ্যান্ট দ্য কিনি, আহ, বিগ ডেটার সময়ে কাজ করার চ্যালেঞ্জগুলি।
বিল কারভিন 18

174

আপনি যদি দেখতে চান যে এর অর্থ কী, এখানে সমস্ত কিছুর একটি ধাক্কা:

CREATE TABLE `users_partners` (
  `uid` int(11) NOT NULL DEFAULT '0',
  `pid` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`uid`,`pid`),
  KEY `partner_user` (`pid`,`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

প্রাথমিক কীটি এই দ্রুত রেফারেন্স সারণীর উভয় কলামের উপর ভিত্তি করে। একটি প্রাথমিক কীটির জন্য অনন্য মান প্রয়োজন।

চল শুরু করি:

INSERT INTO users_partners (uid,pid) VALUES (1,1);
...1 row(s) affected

INSERT INTO users_partners (uid,pid) VALUES (1,1);
...Error Code : 1062
...Duplicate entry '1-1' for key 'PRIMARY'

INSERT IGNORE INTO users_partners (uid,pid) VALUES (1,1);
...0 row(s) affected

INSERT INTO users_partners (uid,pid) VALUES (1,1) ON DUPLICATE KEY UPDATE uid=uid
...0 row(s) affected

দ্রষ্টব্য, উপরেরটি নিজের মতো করে কলাম স্থাপন করে অতিরিক্ত অতিরিক্ত কাজ সংরক্ষণ করেছে, আসলে কোনও আপডেটের প্রয়োজন নেই

REPLACE INTO users_partners (uid,pid) VALUES (1,1)
...2 row(s) affected

এবং এখন কয়েকটি একাধিক সারি পরীক্ষা:

INSERT INTO users_partners (uid,pid) VALUES (1,1),(1,2),(1,3),(1,4)
...Error Code : 1062
...Duplicate entry '1-1' for key 'PRIMARY'

INSERT IGNORE INTO users_partners (uid,pid) VALUES (1,1),(1,2),(1,3),(1,4)
...3 row(s) affected

অন্য কোনও বার্তা কনসোলে তৈরি করা হয়নি, এবং এটিতে এখন টেবিলের ডেটাতে 4 টি মান রয়েছে। আমি (1,1) ব্যতীত সমস্ত কিছুই মুছে ফেলেছি যাতে আমি একই খেলার ক্ষেত্র থেকে পরীক্ষা করতে পারি

INSERT INTO users_partners (uid,pid) VALUES (1,1),(1,2),(1,3),(1,4) ON DUPLICATE KEY UPDATE uid=uid
...3 row(s) affected

REPLACE INTO users_partners (uid,pid) VALUES (1,1),(1,2),(1,3),(1,4)
...5 row(s) affected

তাই সেখানে যদি আপনি এটি আছে। যেহেতু এগুলি সমস্তই কোনও তাত্পর্য টেবিলে প্রায় কোনও ডেটা এবং উত্পাদনে না করে সম্পাদিত হয়েছিল, তাই মৃত্যুদণ্ড কার্যকর করার সময়টি ছিল অণুবীক্ষণিক এবং অপ্রাসঙ্গিক। রিয়েল-ওয়ার্ল্ড ডেটা সহ যে কেউ এতে অবদান রাখায় স্বাগত হওয়ার চেয়ে আরও বেশি কিছু হবে।


আমি উভয়ই সদৃশ কীতে দৌড়ে গিয়ে প্রতিস্থাপন করেছি। আমার সারণীগুলি আমার সারিগুলির প্রায় 30% সদৃশ হয়ে ~ 120K সারি দিয়ে শেষ হয়েছে। সদৃশ কীটি ১০২ সেকেন্ডে চলে এবং প্রতিস্থাপনে ১০৫ সেকেন্ডে চলে। আমার ক্ষেত্রে, আমি নকল কী দিয়ে স্টিক করছি।
ক্রাঙ্কচাইটিস

1
উপরে মারিয়াডিবি 10 দিয়ে পরীক্ষা করেছেন এবং দৌড়ানোর সময় একটি সতর্কতা পেয়েছিলেন INSERT IGNORE INTO users_partners (uid,pid) VALUES (1,1),(1,2),(1,3),(1,4)
ফ্লোরিস

এই সমস্তটির জন্য আপনি কি মাইএসকিউএল সংস্করণ ব্যবহার করেছেন?
রাদু মুর্জিয়া

41

যোগ করার জন্য গুরুত্বপূর্ণ কিছু: INGERT IGNORE ব্যবহার করার সময় এবং আপনার কী লঙ্ঘন রয়েছে, মাইএসকিউএল কোনও সতর্কতা বাড়ায় না!

যদি আপনি উদাহরণস্বরূপ একটি ত্রুটিযুক্ত এক সাথে 100 টি রেকর্ড সন্নিবেশ করানোর চেষ্টা করেন তবে আপনি ইন্টারেক্টিভ মোডে উঠবেন:

Query OK, 99 rows affected (0.04 sec)

Records: 100 Duplicates: 1 Warnings: 0

যেমন আপনি দেখুন: কোনও সতর্কতা নেই! এই আচরণটি এমনকি ভুলভাবে অফিসিয়াল মাইএসকিএল ডকুমেন্টেশনে বর্ণিত হয়েছে।

যদি আপনার স্ক্রিপ্টটি অবহিত করা দরকার, কিছু রেকর্ড যুক্ত না করা হলে (কী লঙ্ঘনের কারণে) আপনাকে মাইএসকিএল_ইনফো () কল করতে হবে এবং "নকল" মানটির জন্য এটি পার্স করতে হবে।


6
আপনি যদি পিএইচপি ব্যবহার করছেন mysqli_affected_rows()তবে আপনার INSERTআসলে ব্যবহার হয়েছে কিনা তা জানা দরকার ।
অমল মুরালি

উভয় মাইএসকিউএল 5.5 এবং MariaDB 10 আমি কি কোনো ত্রুটির সম্মুখীন হয়েছেন Cannot add or update a child row: a foreign key constraint fails এবং কোন সারি (এমনকি বৈধ বেশী) যোগ করা হয়।
ফ্লোরিস

2
@ ফ্লোরিস এই ত্রুটিটি কোনও বিদেশী কী বাধার কারণে এবং ডুপ্লিকেট কীয়ের কারণে নয় । আমি মাইএসকিউএল 5.5.28 ব্যবহার করছি। ব্যবহার করার সময় INSERT IGNORE, সদৃশ কীগুলি কোনও ত্রুটি বা সতর্কতা ছাড়াই উপেক্ষা করা হবে।
toxalot

20

আমি নিয়মিত ব্যবহার করি INSERT IGNOREএবং এটি আপনি যেমন আচরণ করছেন ঠিক তেমন আচরণ বলে মনে হচ্ছে। যতক্ষণ আপনি জানেন যে সারিগুলি সূচক বিবাদের কারণ হতে পারে তা সন্নিবেশ করা হবে না এবং আপনি সেই অনুযায়ী আপনার প্রোগ্রামটি পরিকল্পনা করেন, এটি কোনও ঝামেলার কারণ হবে না।


4
আমি উদ্বিগ্ন যে আমি সদৃশ ব্যতীত অন্য ত্রুটিগুলি উপেক্ষা করব। এটি কি সঠিক বা ইনসার্ট ইগনোর কেবল অনুলিপি ব্যর্থতা উপেক্ষা করে? ধন্যবাদ!
থমাস জি হেনরি

2
এটি কোনও ত্রুটিটিকে সতর্কবাণীতে রূপান্তরিত করে। আমার উত্তরে এ জাতীয় মামলার একটি তালিকা দেখুন।
বিল কারভিন

এটা লজ্জার; আমি আশা করি এটি কেবল সদৃশ ব্যর্থতা উপেক্ষা করবে।
লনি সেরা

মূল লঙ্ঘন ত্রুটি ঘটায় ! @ জেনস এর উত্তরে আমার মন্তব্য দেখুন।
ফ্লোরিস

1
@ পেসারিয়র, এটি আপনার অ্যাপ্লিকেশন সতর্কতার জন্য পরীক্ষা করে কিনা তা নির্ভর করে। বা যদি এটি সতর্কতাগুলি পরীক্ষা করতে পারে । উদাহরণস্বরূপ, বেশিরভাগ ORM প্যাকেজগুলি আপনাকে সুযোগ দেয় না। কিছু সংযোজক (উদাহরণস্বরূপ জেডিবিসি) আপনাকে মাইএসকিউএল এপিআই থেকে পৃথক করে দেয় যাতে আপনি সতর্কতা পরীক্ষা করার সুযোগ পান না।
বিল কারভিন

18

আমি জানি এটি পুরানো, তবে INSERT..IGNORE তে তথ্য সন্ধান করার সময় অন্য কেউ (আমার মতো) এই পৃষ্ঠায় উপস্থিত হলে আমি এই নোটটি যুক্ত করব।

উপরে উল্লিখিত হিসাবে, যদি আপনি INSERT..IGNORE ব্যবহার করেন তবে INSERT বিবৃতিটি কার্যকর করার সময় যে ত্রুটিগুলি ঘটে থাকে তাদের পরিবর্তে সতর্কতা হিসাবে বিবেচনা করা হবে।

একটি বিষয় যা স্পষ্টভাবে উল্লেখ করা হয়নি তা হ'ল INSERT..IGNORE invalidোকানো হলে অবৈধ মানগুলি নিকটতম মানগুলির সাথে সামঞ্জস্য করা হবে (যেখানে অবৈধ মানগুলি IGNORE কীওয়ার্ড ব্যবহার না করা হলে কোয়েরিটি বাতিল করতে হবে)।


6
"অবৈধ মান" বলতে আপনি কী বোঝাতে চেয়েছেন এবং কী সংশোধন করেছেন তা আমি সত্যই নিশ্চিত নই? আপনি একটি উদাহরণ বা আরও ব্যাখ্যা প্রদান করতে পারেন?
মারেঞ্জ

4
এর অর্থ হ'ল যদি আপনি "INSERT IGNORE" ব্যবহার করার সময় কোনও ক্ষেত্রের মধ্যে ভুল ডেটা টাইপ সন্নিবেশ করান, ক্ষেত্রের ডেটা টাইপের সাথে মিলের জন্য ডেটা সংশোধন করা হবে এবং একটি সম্ভাব্য অবৈধ মান sertedোকানো হবে, তবে ক্যোয়ারী চলতে থাকবে। শুধুমাত্র "INSERT" দিয়ে, ভুল ডেটা টাইপ সম্পর্কে একটি ত্রুটি উত্থাপিত হবে এবং কোয়েরিটি বাতিল করা হবে। ভার্চর বা পাঠ্য ক্ষেত্রে numberোকানো হচ্ছে এমনটি ঠিক আছে তবে সংখ্যার ডেটা টাইপ সহ কোনও ক্ষেত্রে একটি পাঠ্য স্ট্রিং সন্নিবেশ করানো খারাপ ফলাফলের ফলস্বরূপ।
কোডওয়াগল

2
@ মেরেঞ্জ আরেকটি উদাহরণ: যদি আপনার টেবিলটিতে একটি নন কলাম থাকে এবং আপনার "INSERT IGNORE" কোয়েরিটি সেই কলামটির জন্য কোনও মান নির্দিষ্ট করে না দেয়, তবে কঠোর sql_mode সক্ষম কিনা তা বিবেচনা না করেই এই কলামটিতে একটি শূন্য মান দিয়ে সারি সন্নিবেশ করা হবে the ।
শানন

অবৈধ মান সম্পর্কে ভাল পয়েন্ট! এই থ্রেড "Insert এড়িয়ে যান" সম্বন্ধে জানার জন্য মহান, আমি আমার 5 সেন্ট ছেড়ে দেব: medium.com/legacy-systems-diary/... কিভাবে সাবধান ব্যবহার করার সময় হওয়া উচিত "Insert এড়িয়ে যান" উপর উদাহরণ চমৎকার নিবন্ধ বিবৃতি।
0x49D1

8

অনুলিপি কী আপডেটের মান সত্যই নেই । এটি প্রায় প্রতিস্থাপনের মতো আদর্শ। এসকিউএল মার্জ দেখুন ।

মূলত দুটি কমান্ডই হ'ল স্ট্যান্ডার্ড কমান্ডের বিকল্প-বাক্য গঠন সংস্করণ।


1
প্রতিস্থাপনটি মুছুন এবং সন্নিবেশ করান, যেখানে অনুলিপি কী আপডেটটি বিদ্যমান সারিটি আপডেট করে। কিছু পার্থক্য
হ'ল

8

Replaceবিকল্প হিসাবে মনে হচ্ছে। অথবা আপনি চেক করতে পারেন

IF NOT EXISTS(QUERY) Then INSERT

এটি সন্নিবেশ করানো বা মুছে ফেলা হবে। আমি IF NOT EXISTSপ্রথমে একটি চেক যেতে চাই ।


দ্রুত উত্তর দেওয়ার জন্য ধন্যবাদ. আমি সমস্ত জায়গা ধরে নিচ্ছি, তবে আমি ধরে নিই যে এটি অনুলিপি কী আপডেটের সাথে একই রকম হবে যে এটি অপ্রয়োজনীয় আপডেটিং করবে। এটি অপব্যয়যুক্ত বলে মনে হচ্ছে তবে আমি নিশ্চিত নই। এর যে কোনওটিই কাজ করা উচিত। আমি ভাবছি কোনটি সবচেয়ে ভাল কিনা জানেন।
থমাস জি হেনরি

6
এনটিআপলিপ - সমাধানটি সাম্প্রতিক লেনদেন দ্বারা সন্নিবেশ থেকে রেস শর্তগুলির জন্য এখনও উন্মুক্ত।
ক্রিস কেএল

REPLACEতারপরে কোনও PRIMARY বা UNIQUEকী মিলার সাথে সারণীতে সমস্ত সারি মুছে ফেলা হয় । এটি আইওডকিউর পরে সম্ভবত আরও অনেক বেশি কাজ। INSERTs
রিক জেমস

4

INSERT IGNORE এর সম্ভাব্য বিপদ। আপনি যদি ভ্রচারের মানটি আর সন্নিবেশ করানোর চেষ্টা করছেন তবে কলামটি সংজ্ঞায়িত করা হয়েছিল - মানটি কেটে ফেলা হবে এবং যদি কঠোর মোড সক্ষম করা হয় তবে EVোকানো হবে।


3

আপনার ক্যোয়ারী সেটটির শেষে insert ignoreকোনও SHOW WARNINGS;বিবৃতি ব্যবহার করা হলে কোন আইডি নকল ছিল তা সহ সমস্ত সতর্কতা সহ একটি টেবিল প্রদর্শন করবে।


SHOW WARNINGS;শুধুমাত্র সর্বশেষতম ক্যোয়ারিকে প্রভাবিত করে বলে মনে হচ্ছে। পূর্ববর্তী কোনও বিবৃতি জমা নেই, যদি আপনার কাছে একটি বিবৃতি বেশি থাকে।
কাওু

2

আপনি যদি সারণীতে এবং প্রাথমিক কী বা অনন্য সূচকের দ্বন্দ্ব সন্নিবেশ করতে চান তবে এটি সারিটি সন্নিবেশ করানোর পরিবর্তে বিরোধী সারিটি আপডেট করবে।

বাক্য গঠন:

insert into table1 set column1 = a, column2 = b on duplicate update column2 = c;

এখন এখানে, এই সন্নিবেশ বিবৃতিটি আপনি আগে যা দেখেছেন তার চেয়ে আলাদা দেখাবে। এই সন্নিবেশ বিবৃতিটি যথাক্রমে কলাম কলাম 1 এবং কলাম 2 এ ক এবং খ এর মান সহ টেবিল 1 এ একটি সারি সন্নিবেশ করানোর চেষ্টা করছে।

এই বিবৃতিটি গভীরতার সাথে বুঝতে পারি:

উদাহরণস্বরূপ: এখানে কলাম 1 টেবিল 1 এ প্রাথমিক কী হিসাবে সংজ্ঞায়িত করা হয়েছে।

এখন টেবিল 1 এ কলাম 1 এ "a" মান থাকা কোনও সারি নেই। সুতরাং এই বিবৃতিটি টেবিল 1 এ একটি সারি প্রবেশ করবে।

এখন টেবিল 1 এ কলাম 2 এ "a" মান থাকা একটি সারি রয়েছে। সুতরাং এই বিবৃতিটি "গ" দিয়ে সারিটির কলাম 2 মান আপডেট করবে যেখানে কলাম 1 মান "এ"।

সুতরাং আপনি যদি কোনও নতুন সারি সন্নিবেশ করতে চান তবে অন্যথায় প্রাথমিক কী বা অনন্য সূচকের দ্বন্দ্বের মধ্যে সেই সারিটি আপডেট করুন।
এই লিঙ্কে আরও পড়ুন


0

INSERT...ON DUPLICATE KEY UPDATE অপ্রত্যাশিত ব্যতিক্রম পরিচালনা রোধ করতে অগ্রাধিকার দেওয়া হয়।

আপনি যখন ** ১ টি অনন্য বাধা ** রাখেন তখনই এই সমাধানটি কার্যকর হয়

আমার ক্ষেত্রে আমি এটি জানি col1এবং col2একটি অনন্য যৌগিক সূচক তৈরি করি।

এটি ত্রুটির উপর নজর রাখে, তবে সদৃশটিতে কোনও ব্যতিক্রম ছুঁড়ে না। কর্মক্ষমতা সম্পর্কে, মাইএসকিউএল এটি লক্ষ্য করে এবং এটি আপডেট করে না বলে একই মান দ্বারা আপডেট কার্যকর update

INSERT INTO table
  (col1, col2, col3, col4)
VALUES
  (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
    col1 = VALUES(col1),
    col2 = VALUES(col2)

এই পদ্ধতির ব্যবহারের ধারণাটি phpdelusions.net/pdoদেওয়া মন্তব্যগুলি থেকে এসেছে

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