আমার কাছে সাধারণ ডেটা সহ 2 টি এসকিউএল ডাটাবেস রয়েছে তবে বিভিন্ন উদ্দেশ্য রয়েছে এবং আমি ডেটা পুনরায় জমা দেওয়া এড়াতে চেয়েছিলাম, তাই আমি ভাবছিলাম যে কোনও ডাটাবেস থেকে অন্য একটি ডাটাবেসে পুরো টেবিলটি অনুলিপি করা সম্ভব ছিল কিনা?
আমার কাছে সাধারণ ডেটা সহ 2 টি এসকিউএল ডাটাবেস রয়েছে তবে বিভিন্ন উদ্দেশ্য রয়েছে এবং আমি ডেটা পুনরায় জমা দেওয়া এড়াতে চেয়েছিলাম, তাই আমি ভাবছিলাম যে কোনও ডাটাবেস থেকে অন্য একটি ডাটাবেসে পুরো টেবিলটি অনুলিপি করা সম্ভব ছিল কিনা?
উত্তর:
আপনাকে ATTACH কমান্ডটি ব্যবহার করে ডেটাবেস এক্স এর সাথে ডেটাবেস এক্স সংযুক্ত করতে হবে , তারপরে আপনি যে সারণীগুলি স্থানান্তর করতে চান তার জন্য উপযুক্ত সন্নিবেশ commands োকানো আদেশগুলি চালান।
INSERT INTO X.TABLE SELECT * FROM Y.TABLE;
বা, যদি কলামগুলি ক্রমানুসারে মিলে না যায়:
INSERT INTO X.TABLE(fieldname1, fieldname2) SELECT fieldname1, fieldname2 FROM Y.TABLE;
আমার উদাহরণ হিসাবে বিবেচনা করুন যেখানে আমার দুটি ডাটাবেস রয়েছে যথাঃ allmsa.db এবং atlanta.db। বলুন ডাটাবেস allmsa.db এর মার্কিন যুক্তরাষ্ট্রে সমস্ত এমাসার জন্য সারণী রয়েছে এবং ডাটাবেস আটলান্টা.ডিবি খালি রয়েছে।
আমাদের লক্ষ্যটি হল allmsa.db থেকে আটলান্টা.ডিবিতে টেবিল আটলান্টা অনুলিপি করা।
ATTACH '/mnt/fastaccessDS/core/csv/allmsa.db' AS AM;
নোট ব্যবহার করে করা যেতে পারে যে আমরা ডাটাবেসের পুরো পথটি সংযুক্ত করার জন্য দিই।sqlite> .databases
আপনি আউটপুট হিসাবে দেখতে পারেন ব্যবহার করে ডাটাবেস তালিকা চেক করুনseq নাম ফাইল --- --------------- -------------------------------- -------------------------- 0 প্রধান / এমএনটি / প্রফেসাক্সেসডিএস / কোর / সিএসভি / আইলান্টা.ডিবি 2 এএম / এমএনটি / প্রাতঃরাশি এসডিএস / কোর / সিএসভি /allmsa.db
INSERT INTO atlanta SELECT * FROM AM.atlanta;
এটি আপনার উদ্দেশ্য পরিবেশন করা উচিত।
একক লাইনে সহজ এবং সঠিক উপায়:
sqlite3 old.db ".dump mytable" | sqlite3 new.db
প্রাথমিক কী এবং কলামের প্রকারগুলি রাখা হবে।
.dump
কমান্ডটি তৈরি করে CREATE TABLE IF NOT EXISTS ...
এবং আমার গন্তব্য সারণি উপস্থিত থাকলেও কোনও ত্রুটি নেই।
এক সময়ের কর্মের জন্য, আপনি। ডাম্প এবং। রিড ব্যবহার করতে পারেন।
পুরাতন_ডিব.স্ক্লাইট থেকে আমার_সারণীটি ছিটিয়ে দিন
c:\sqlite>sqlite3.exe old_db.sqlite
sqlite> .output mytable_dump.sql
sqlite> .dump my_table
sqlite> .quit
New_db.sqlite এ টেবিলের অস্তিত্ব নেই তা ধরে নিয়ে ডাম্প পড়ুন
c:\sqlite>sqlite3.exe new_db.sqlite
sqlite> .read mytable_dump.sql
এখন আপনি আপনার টেবিলটি ক্লোন করেছেন। পুরো ডাটাবেসের জন্য এটি করতে, কেবলমাত্র .dump কমান্ডের সারণির নামটি রেখে দিন।
বোনাস: ডাটাবেসে বিভিন্ন এনকোডিং থাকতে পারে।
ডাটাবেস থেকে অন্য ডেটাবেসে টেবিল অনুলিপি করার জন্য উদ্দেশ্য-সি কোড
-(void) createCopyDatabase{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *maindbPath = [documentsDir stringByAppendingPathComponent:@"User.sqlite"];;
NSString *newdbPath = [documentsDir stringByAppendingPathComponent:@"User_copy.sqlite"];
NSFileManager *fileManager = [NSFileManager defaultManager];
char *error;
if ([fileManager fileExistsAtPath:newdbPath]) {
[fileManager removeItemAtPath:newdbPath error:nil];
}
sqlite3 *database;
//open database
if (sqlite3_open([newdbPath UTF8String], &database)!=SQLITE_OK) {
NSLog(@"Error to open database");
}
NSString *attachQuery = [NSString stringWithFormat:@"ATTACH DATABASE \"%@\" AS aDB",maindbPath];
sqlite3_exec(database, [attachQuery UTF8String], NULL, NULL, &error);
if (error) {
NSLog(@"Error to Attach = %s",error);
}
//Query for copy Table
NSString *sqlString = @"CREATE TABLE Info AS SELECT * FROM aDB.Info";
sqlite3_exec(database, [sqlString UTF8String], NULL, NULL, &error);
if (error) {
NSLog(@"Error to copy database = %s",error);
}
//Query for copy Table with Where Clause
sqlString = @"CREATE TABLE comments AS SELECT * FROM aDB.comments Where user_name = 'XYZ'";
sqlite3_exec(database, [sqlString UTF8String], NULL, NULL, &error);
if (error) {
NSLog(@"Error to copy database = %s",error);
}
}
আমার বেকার সার্ভারের কমপ্যাক্ট ডাটাবেস থেকে ডেটা সেক্লাইটে স্থানান্তরিত করা দরকার, সুতরাং এসকিউএল সার্ভার ২০০৮ ব্যবহার করে আপনি টেবিলের উপর ডান ক্লিক করতে পারেন এবং 'স্ক্রিপ্ট টেবিল টু' এবং তারপরে 'তথ্য থেকে সন্নিবেশ' নির্বাচন করতে পারেন। সন্নিবেশের স্টেটমেন্টগুলি অনুলিপি করুন 'জিও' বিবৃতিগুলি সরিয়ে ফেলুন এবং স্ক্লাইট ডেটাবেজে 'স্ক্লাইটের জন্য ডিবি ব্রাউজারের জন্য অ্যাপ্লিকেশন' ব্যবহার করে এটি সফলভাবে কার্যকর হয়েছিল।
প্রথম দৃশ্য: DB1.sqlite এবং DB2.sqlite একই টেবিল (টি 1) রয়েছে, তবে DB1 DB2 এর চেয়ে "আপ টু ডেট"। যদি এটি ছোট হয় তবে ডিবি 2 থেকে টেবিলটি ফেলে দিন এবং এটি ডেটা দিয়ে পুনরায় তৈরি করুন:
> DROP TABLE IF EXISTS db2.t1; CREATE TABLE db2.t1 AS SELECT * FROM db1.t1;
দ্বিতীয় দৃশ্য: এটি যদি একটি বড় টেবিল হয় তবে আপনি কোনও INSERT if not exists
ধরণের সমাধান দিয়ে ভাল হতে পারেন । যদি আপনার একটি Unique Key
কলাম থাকে তবে এটি আরও সোজা এগিয়ে রয়েছে, অন্যথায় আপনাকে ক্ষেত্রগুলির সংমিশ্রণ (সম্ভবত প্রতিটি ক্ষেত্র) ব্যবহার করতে হবে এবং কোনও সময়ে এটি এখনও ঠিক drop
এবং create
টেবিলটির থেকে দ্রুততর হবে ; এটি সর্বদা আরও সোজা এগিয়ে (কম চিন্তা প্রয়োজন)।
সেটআপ: ডিবি ছাড়াই এসকিউএলাইট খুলুন যা temporary
মেমরির main
ডেটাবেস তৈরি করে, তারপরে attach
DB1.sqlite এবং DB2.sqlite
> sqlite3
sqlite> ATTACH "DB1.sqlite" AS db1
sqlite> ATTACH "DB2.sqlite" AS db2
এবং .databases
সংযুক্ত ডাটাবেস এবং তাদের ফাইলগুলি দেখতে ব্যবহার করুন ।
sqlite> .databases
main:
db1: /db/DB1.sqlite
db2: /db/DB2.sqlite
UNIQUE
এবং PRIMARY KEY
বৈশিষ্ট্যাবলী, তাই যদি আপনি ঐ আছে, হয় আপনি করতে হবে DROP TABLE
নিজে এবং CREATE
এবং INSERT
বা ব্যবহার .dump
এবং .read
পদ্ধতি উপরে উল্লিখিত @Thinkeye দ্বারা।