http://en.wikipedia.org/wiki/Upsert
এসকিউএল সার্ভারে সঞ্চিত আপডেট সন্নিবেশ করুন
এসকিউএলাইটে এমনটি করার কোনও চতুর উপায় আছে যা আমি ভেবে দেখিনি?
মূলত আমি রেকর্ডটি উপস্থিত থাকলে চারটি কলামের মধ্যে তিনটি আপডেট করতে চাই, যদি এটি না থাকে তবে আমি চতুর্থ কলামের জন্য ডিফল্ট (NUL) মান সহ রেকর্ডটি লিখতে চাই।
আইডি একটি প্রাথমিক কী তাই ইউপিএসআরটি-তে কেবল একটি রেকর্ড থাকবে।
(আমি আপডেট বা স্পষ্টতই INSERT প্রয়োজন কিনা তা নির্ধারণ করার জন্য আমি SELECT এর ওভারহেড এড়াতে চেষ্টা করছি)
পরামর্শ?
টেবিল তৈরির জন্য এসকিউএলসাইটে সিনট্যাক্সটি নিশ্চিত করতে পারছি না। আমি এটি পরীক্ষার জন্য একটি ডেমো তৈরি করি নি, তবে এটি সমর্থিত বলে মনে হচ্ছে না ..
যদি এটি হয় তবে আমার কাছে তিনটি কলাম রয়েছে যাতে এটি দেখতে আসলে দেখতে পাবেন:
CREATE TABLE table1(
id INTEGER PRIMARY KEY ON CONFLICT REPLACE,
Blob1 BLOB ON CONFLICT REPLACE,
Blob2 BLOB ON CONFLICT REPLACE,
Blob3 BLOB
);
তবে প্রথম দুটি ব্লব দ্বন্দ্ব সৃষ্টি করবে না, কেবল আইডি তাই আমি ব্লব 1 এবং ব্লব 2 প্রতিস্থাপন করতে পারি না (পছন্দ অনুযায়ী)
এসকিউএলাইটে আপডেটগুলি যখন বাঁধাই করা তথ্য সম্পূর্ণ লেনদেন হয়, অর্থাত প্রতিটি প্রেরিত সারিটি আপডেট করা আবশ্যক: সেট / বাইন্ড / স্টেপ / চূড়ান্ত বিবরণী INSERT এর विपरीत নয় যা রিসেট ফাংশনটি ব্যবহারের অনুমতি দেয়
স্টেটমেন্ট অবজেক্টের জীবন কিছুটা এরকম হয়:
- Sqlite3_prepare_v2 () ব্যবহার করে অবজেক্ট তৈরি করুন
- Sqlite3_bind_ ইন্টারফেস ব্যবহার করে প্যারামিটারগুলি হোস্ট করতে মানগুলি বাঁধুন।
- Sqlite3_step () এ কল করে এসকিউএল চালান
- Sqlite3_reset () ব্যবহার করে বিবৃতিটি রিসেট করুন তারপরে দ্বিতীয় ধাপে ফিরে যান এবং পুনরাবৃত্তি করুন।
- Sqlite3_finalize () ব্যবহার করে স্টেটমেন্ট অবজেক্টটি ধ্বংস করুন।
আপডেট আমি অনুমান করছি যে INSERT এর তুলনায় ধীর গতিতে আছে, তবে এটি কী কী নির্বাচনের সাথে প্রাথমিক কী ব্যবহার করে তুলনা করে?
সম্ভবত আমার 4 র্থ কলাম (ব্লব 3) পড়ার জন্য সিলেক্টটি ব্যবহার করা উচিত এবং তারপরে প্রথম 3 টি কলামের জন্য নতুন ডেটা সহ মূল চতুর্থ কলামটি মিশ্রন করে একটি নতুন রেকর্ড লিখতে ব্যবহার করুন?