উত্তর:
ব্যবহার INSERT ... ON DUPLICATE KEY UPDATE
। উদাহরণ স্বরূপ:
INSERT INTO `usage`
(`thing_id`, `times_used`, `first_time_used`)
VALUES
(4815162342, 1, NOW())
ON DUPLICATE KEY UPDATE
`times_used` = `times_used` + 1
geb
এবং topic
এটি কার্যকর হবে ( ALTER TABLE table ADD UNIQUE geb_by_topic (geb, topic)
)।
MERGE
তবে আমি নিশ্চিত নই যে এর বাক্য গঠনটি এসকিউএল সার্ভারের সাথে অভিন্ন কিনা।
NULL
করার অনুমতি দেওয়ার জন্য এটি কোনও কিছু পাস করবেন না বা এটিকে পাস করবেন না auto_increment
(যা অন্যথায়, হ্যাঁ, আপনি যেমন অনুমান করছেন তেমন কাজ করে; দেখুন dev.mysql.com/doc/refman/5.5/en/example-auto-increment)। এইচটিএমএল )।
VALUES(col)
সদৃশ ক্ষেত্রে সন্নিবেশ যুক্তি থেকে মান পেতে ব্যবহার করতে পারেন । উদাহরণস্বরূপ:ON DUPLICATE UPDATE b = VALUES(b), c = VALUES(c)
আমি জানি এটি একটি পুরানো প্রশ্ন, তবে গুগল সম্প্রতি আমাকে এখানে নিয়েছে তাই আমি কল্পনা করি অন্যরাও এখানে আসবেন।
@ চাওস সঠিক: INSERT ... ON DUPLICATE KEY UPDATE
বাক্য গঠন আছে।
যাইহোক, মূল প্রশ্নটি বিশেষত মাইএসকিউএল সম্পর্কে জিজ্ঞাসা করেছিল এবং মাইএসকিউএলে REPLACE INTO ...
বাক্য গঠন রয়েছে। আইএমএইচও, এই কমান্ডটি উপস্থাপকের জন্য ব্যবহার করা সহজ এবং আরও সহজ। ম্যানুয়াল থেকে:
প্রতিস্থাপন হ'ল INSERT এর মতো কাজ করে, ব্যতীত যদি টেবিলের কোনও পুরনো সারিটি PRIARY KEY বা UNIQUE সূচকের জন্য একটি নতুন সারিটির সমান মান থাকে তবে নতুন সারিটি সন্নিবেশ করার আগে পুরানো সারিটি মুছে ফেলা হয়।
নোট করুন এটি স্ট্যান্ডার্ড এসকিউএল নয়। ম্যানুয়াল থেকে একটি উদাহরণ:
CREATE TABLE test (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
data VARCHAR(64) DEFAULT NULL,
ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
mysql> REPLACE INTO test VALUES (1, 'Old', '2014-08-20 18:47:00');
Query OK, 1 row affected (0.04 sec)
mysql> REPLACE INTO test VALUES (1, 'New', '2014-08-20 18:47:42');
Query OK, 2 rows affected (0.04 sec)
mysql> SELECT * FROM test;
+----+------+---------------------+
| id | data | ts |
+----+------+---------------------+
| 1 | New | 2014-08-20 18:47:42 |
+----+------+---------------------+
1 row in set (0.00 sec)
সম্পাদনা করুন: ঠিক একটি ন্যায্য সতর্কতা যা REPLACE INTO
পছন্দ করে না UPDATE
। যেমন ম্যানুয়ালটি বলেছে, REPLACE
সারিটি বিদ্যমান থাকলে তা মুছে দেয়, তারপরে একটি নতুন সন্নিবেশ করান। (উপরের উদাহরণে মজাদার "2 টি সারিগুলি প্রভাবিত করুন" নোট করুন)) এটি বিদ্যমান রেকর্ডের সমস্ত কলামের মানগুলি প্রতিস্থাপন করবে (এবং কেবল কিছু কলাম আপডেট করে না )) মাইএসকিউএল এর আচরণ REPLACE INTO
অনেকটা স্ক্লাইটের মতোই INSERT OR REPLACE INTO
। আপনি যদি রেকর্ডটি ইতিমধ্যে বিদ্যমান থাকে তবে কেবলমাত্র কয়েকটি কলাম (এবং সমস্ত কলাম নয়) আপডেট করতে চাইলে কিছু কাজের ক্ষেত্রে এই প্রশ্নটি দেখুন question
MERGE
। সাধারণভাবে, ধারণাটি প্রায়শই হিসাবে উল্লেখ করা হয়"UPSERT"
।