আমার `সংবিধানে… সবিস্তারে কী আপডেটের উপর 2 টি সারি কেন প্রভাবিত হচ্ছে?


91

আমি নিম্নলিখিত টেবিলে একটি INSERT ... ON DUPLICATE KEY UPDATEজন্য একটি করছি PRIMARY KEY:

DESCRIBE users_interests;
+------------+---------------------------------+------+-----+---------+-------+
| Field      | Type                            | Null | Key | Default | Extra |
+------------+---------------------------------+------+-----+---------+-------+
| uid        | int(11)                         | NO   | PRI | NULL    |       |
| iid        | int(11)                         | NO   | PRI | NULL    |       |
| preference | enum('like','dislike','ignore') | YES  |     | NULL    |       |
+------------+---------------------------------+------+-----+---------+-------+

যাইহোক, যদিও এই মানগুলি অনন্য হওয়া উচিত, আমি 2 টি সারি আক্রান্ত দেখছি।

INSERT INTO users_interests (uid, iid, preference) VALUES (2, 2, 'like')
ON DUPLICATE KEY UPDATE preference='like';
Query OK, 2 rows affected (0.04 sec)

ইহা কি জন্য ঘটিতেছে?

সম্পাদনা

তুলনার জন্য, এই ক্যোয়ারী দেখুন:

UPDATE users_interests SET preference='like' WHERE uid=2 AND iid=2;
Query OK, 1 row affected (0.44 sec)
Rows matched: 1  Changed: 1  Warnings: 0

আপনার প্রথম স্থানে দুটি প্রাথমিক কী রয়েছে কেন?
পেক্কা

4
@ পেপকা, এটি PRIMARY KEYএকটি একক পিকে তৈরি কারণ (uid, iid)যেহেতু উভয় মান জানা গেলে বেশিরভাগ অনুসন্ধান চালানো হবে।
জোশ স্মিথ

4
@ জোশ আমি দেখছি ম্যানুয়াল যদিও এটা নিরুৎসাহিত বলে মনে হয়: In general, you should try to avoid using an ON DUPLICATE KEY UPDATE clause on tables with multiple unique indexes.নেই এটি একটি প্রাথমিক কী হতে হবে? সাধারণ সূচক কেন হয় না?
পেক্কা

@ পেপকা, সত্যই নিশ্চিত নয়। আমি এখনও এটি তুলনামূলকভাবে নতুন। এই ক্ষেত্রে কি কোনও সূচক আরও অর্থবোধ করে?
জোশ স্মিথ

4
@ জো, হ্যাঁ, উভয় কলামে বিস্তৃত একটি সাধারণ সূচি এখানে ঠিকঠাক কাজ করবে
পেক্কা

উত্তর:


201

ম্যানুয়াল থেকে :

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


15
এবং 0 যদি বিদ্যমান সারিটি তার বর্তমান মানগুলিতে সেট করা থাকে।
সুইভিশ

4
@ সুইশ, ধন্যবাদ! এটি সত্যই সহায়ক।
সবুজ

4
আমি কেবল আশ্চর্য হয়েছি এর পিছনে যুক্তি কী হবে .. স্পষ্টতই, এটি কম বিভ্রান্তিকর করে তুলনামূলকভাবে সারি সংখ্যার পরিবর্তে প্রতিক্রিয়া কোড হিসাবে ফিরে আসতে পারত
সুদীপ ভান্ডারী

...: | সারিগুলির প্রকৃত সংখ্যা প্রভাবিত করার কোন উপায় আছে ? এমনকি যদি বিদ্যমান সারিটি আপডেট করা হয় তবে এখনও কেবলমাত্র একটি সারি আক্রান্ত রয়েছে
উলাদ কাসাচ

ব্যাচ সন্নিবেশকারীদের জন্যও কি এটি একই? … VALUES (2, 2, 'like'), (3, 3, 'like'), (4, 4, 'like') ON DUPLICATE …
লাকডাইডোনাল্ড

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