এসকিউএলাইট ডাটাবেসে একসাথে একাধিক সারি সন্নিবেশ করা সম্ভব?


551

মাইএসকিউএল এ আপনি একাধিক সারি সন্নিবেশ করতে পারেন:

INSERT INTO 'tablename' ('column1', 'column2') VALUES
    ('data1', 'data2'),
    ('data1', 'data2'),
    ('data1', 'data2'),
    ('data1', 'data2');

যাইহোক, আমি যখন এই জাতীয় কিছু করার চেষ্টা করি তখন আমি একটি ত্রুটি পাচ্ছি। এসকিউএলাইট ডাটাবেসে একসাথে একাধিক সারি সন্নিবেশ করা সম্ভব? এটি করতে সিনট্যাক্স কী?


26
একটি ধাপ নয়, কারণ এই প্রশ্নটি বিশেষত এসকিউএলটি সম্পর্কে জিজ্ঞাসা করছে, সাধারণভাবে এসকিউএলের বিপরীতে (যদিও এই প্রশ্নের উত্তরগুলির কয়েকটি এইটির জন্য সহায়ক)।
ব্রায়ান ক্যাম্পবেল

5
বাল্ক টিপে অন: stackoverflow.com/questions/1711631/...
tuinstoel

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

2
হ্যাঁ, সংস্করণ থেকে শুরু করুন 2012-03-20 (3.7.11), আপনার সিনট্যাক্সটি সমর্থিত।
এমজেবি

উত্তর:


607

হালনাগাদ

ব্রায়ান ক্যাম্পবেল যেমন এখানে উল্লেখ করেছেন , এসকিউএলাইট ৩.7.১১ এবং তার বেশি এখন মূল পোস্টটির সহজ বাক্য গঠন সমর্থন করে । তবে, যদি আপনি উত্তরাধিকারের ডেটাবেসগুলিতে সর্বাধিক সামঞ্জস্যতা চান তবে দেখানো পদ্ধতিরটি এখনও উপযুক্ত।

মূল উত্তর

আমার যদি সুযোগসুবিধা থাকে তবে আমি নদীর জবাবটি টুকরো টুকরো করে বলব : আপনি এসকিউএলটিতে একাধিক সারি সন্নিবেশ করতে পারেন , আপনার কেবল আলাদা সিনট্যাক্সের প্রয়োজন । এটি পুরোপুরি পরিষ্কার করার জন্য, অপস মাইএসকিউএল উদাহরণ:

INSERT INTO 'tablename' ('column1', 'column2') VALUES
  ('data1', 'data2'),
  ('data1', 'data2'),
  ('data1', 'data2'),
  ('data1', 'data2');

এটি এসকিউএলাইটে পুনরায় পোস্ট করা যেতে পারে:

     INSERT INTO 'tablename'
          SELECT 'data1' AS 'column1', 'data2' AS 'column2'
UNION ALL SELECT 'data1', 'data2'
UNION ALL SELECT 'data1', 'data2'
UNION ALL SELECT 'data1', 'data2'

কর্মক্ষমতা উপর একটি নোট

আমি মূলত এই কৌশলটি রুবেল থেকে রিলে থেকে দক্ষতার সাথে বড় ডেটাসেটগুলি লোড করতে ব্যবহার করেছি। যাইহোক , জাইম কুক উল্লেখ করেছেন , এটি পরিষ্কার নয় যে এটি কোনও INSERTsএকক লেনদেনের মধ্যে দ্রুত কোনও মোড়ক দেওয়া ব্যক্তি :

BEGIN TRANSACTION;
INSERT INTO 'tablename' table VALUES ('data1', 'data2');
INSERT INTO 'tablename' table VALUES ('data3', 'data4');
...
COMMIT;

দক্ষতা যদি আপনার লক্ষ্য হয় তবে আপনার প্রথমে এটি চেষ্টা করা উচিত।

ইউনিয়ন বনাম সব ইউনিয়ন একটি নোট

বেশিরভাগ লোক মন্তব্য করেছেন, আপনি যদি UNION ALL(উপরে দেখানো হিসাবে) ব্যবহার করেন তবে সমস্ত সারি সন্নিবেশ করা হবে, সুতরাং এক্ষেত্রে আপনি চারটি সারি পেয়ে যাবেন data1, data2। বাদ দিলেALL তবে সদৃশ সারিগুলি মুছে ফেলা হবে (এবং ক্রিয়াটি সম্ভবত কিছুটা ধীর হবে)। আমরা ইউনিয়ন সমস্ত ব্যবহার করছি যেহেতু এটি মূল পোস্টের শব্দার্থগুলির সাথে আরও ঘনিষ্ঠভাবে মেলে।

বন্ধ

PS: দয়া করে সমাধানটি প্রথম উপস্থাপন করার সাথে সাথে নদীর উত্তর +1 করুন


102
আরও একটি নোট হিসাবে, স্ক্লাইটটি কেবল 500 টির মতো ইউনিয়নকে কোয়েরি অনুসারে সমর্থন করার পক্ষে সমর্থন করে বলে মনে হয় আপনি যদি এর চেয়ে বেশি ডেটা ফেলে দেওয়ার চেষ্টা করছেন তবে আপনাকে এটি 500 টি উপাদান ব্লক ( sqlite.org/limits.html ) এ বিভক্ত করতে হবে
জ্যামি কুক

3
সম্মত: এসকিউএলাইট বাধা নয়, এটি পৃথক ওআরএম লেনদেনের ওভারহেড (আমার ক্ষেত্রে, রুবি অন রেলস)। সুতরাং এটি এখনও একটি বড় জয়।
নির্ভীক_ফুল

3
এই সমাধান বা 3.7.11 সমাধানটি লেনদেনের ব্লকগুলি ব্যবহারের সাথে কীভাবে তুলনা করে? এটা দ্রুত insert into t values (data),(data),(data)বা না begin transaction; insert into t values (data);insert into t values (data);insert into t values (data);Commit;?
ড্যান

5
আরও নোট হিসাবে: সাবধান! এই সিনট্যাক্সটি সদৃশ সারিগুলি সরিয়ে দেয়! UNION ALLএটি এড়াতে ব্যবহার করুন (বা কিছু গৌণ পারফরম্যান্স লাভের জন্য)।
chacham15

1
এসকিউএল সংস্করণ পরীক্ষা করার জন্য @ শ্যাডোফ্যাক্স দেখুন sqlite3.sqlite_version(এটি 3.7.x বা 3.8.x হওয়া উচিত) নয় sqlite3.version(যা পাইথন মডিউলের কেবলমাত্র সংস্করণ)।
সর্বাধিক

562

হ্যাঁ এটি সম্ভব, তবে সাধারণ কমা-বিচ্ছিন্ন সন্নিবেশ মানগুলির সাথে নয়।

এটা চেষ্টা কর...

insert into myTable (col1,col2) 
     select aValue as col1,anotherValue as col2 
     union select moreValue,evenMoreValue 
     union...

হ্যাঁ, এটি সামান্য কুৎসিত তবে মানগুলির একটি সেট থেকে বিবৃতিটির জেনারেশনকে স্বয়ংক্রিয় করতে যথেষ্ট সহজ। এছাড়াও, এটি প্রদর্শিত হবে কেবল আপনাকে প্রথম নির্বাচনের মধ্যে কলামের নামগুলি ঘোষণা করতে হবে।


36
ব্যবহার করুন UNION ALLনা UNION। ডুপ্লিকেট অপসারণ করতে চাইলে বাদে।
বেনোইট

4
আপনি যদি স্বতঃবৃদ্ধির জন্য আইডি চান, তাদের একটি ন্যূনতম মান দিন।
লেনোহ

241

হ্যাঁ, এসকিউএলাইট 3.7.11 হিসাবে এটি এসকিউএলাইটে সমর্থিত। থেকে SQLite ডকুমেন্টেশন :

SQLite INSERT স্টেটমেন্ট সিনট্যাক্স

(যখন এই উত্তরটি মূলত লেখা হয়েছিল, এটি সমর্থিত নয়)

SQLite পুরোনো সংস্করণের সাথে সামঞ্জস্যের জন্য, আপনি কৌতুক দ্বারা প্রস্তাবিত ব্যবহার করতে পারেন অ্যান্ডি এবং fearless_fool ব্যবহার UNION, কিন্তু 3.7.11 এবং পরে সহজ সিনট্যাক্স এখানে বর্ণিত অগ্রাধিকার উচিত।


3
আমি বলব ডায়াগ্রামটি একাধিক সারিগুলিকে মঞ্জুরি দেয়, কারণ বন্ধনীগুলির বাইরে কমা সহ একটি বন্ধ লুপ রয়েছে VALUES
জোহানেস জেরার

@ জোহনেস জিয়ারার এই চিত্রটি এম্বেড করার পরে তারা আপডেট করেছে। আমি যখন এটি ইন্টারনেট সংরক্ষণাগারে এম্বেড করেছিলাম তখন ডায়াগ্রামটি দেখতে পাবেন । প্রকৃতপক্ষে, মাত্র দু'মাস আগে তারা anোকানো একাধিক সারিটির জন্য সমর্থন যোগ করেছিল এবং মাত্র দু'দিন আগে তারা এই পরিবর্তনের সাথে একটি সংস্করণ প্রকাশ করেছিল। আমি আমার উত্তর অনুসারে আপডেট করব।
ব্রায়ান ক্যাম্পবেল

1
@Brian, আপনি SQLite ডকুমেন্টেশন টেক্সট cite দয়া পারে, যে রাজ্যের যে এই IS কি সম্ভব? আমি 3 বার ডকগুলি সন্নিবেশ করলাম এবং একাধিক সারি সন্নিবেশ করানোর কিছুই পাইনি, তবে কেবলমাত্র এই চিত্রটি (এবং কমাতে কিছুই নেই VALUES (...), (...)) :(
প্রাইজফ

1
@ প্রিজফ আমি প্রতিশ্রুতিবদ্ধতার সাথে লিঙ্ক করেছি যাতে পরীক্ষার মামলা সহ এই সমর্থনটি যুক্ত হয়েছিল । আপনি চিত্রটিতে দেখতে পাচ্ছেন ( আইএ লিঙ্কটি তুলনা করুন ), এর পরে এক্সপ্রেশনটির চারপাশে একটি লুপ রয়েছে যা VALUESইঙ্গিত করে যে এটি কমা দ্বারা পৃথক করা যায়। এবং আমি বৈশিষ্ট্যটি যুক্ত করে সংস্করণটির জন্য প্রকাশিত নোটগুলির সাথে সংযুক্ত করেছি , যা "VALUES ধারাটির মাধ্যমে একাধিক সারি সন্নিবেশ করানোর জন্য INSERT বাক্য গঠনটি বাড়ান" state
ব্রায়ান ক্যাম্পবেল

1
@ প্রিজফ আমি এসকিউএল রক্ষণাবেক্ষণকারীকে এটি উল্লেখ করেছি, তিনি একটি সংশোধন করেছেন যা খসড়া ডকুমেন্টেশনে উপলভ্য । আমি অনুমান করছি এটি পরবর্তী প্রকাশের হিসাবে অফিসিয়াল ডকুমেন্টেশনে থাকবে।
ব্রায়ান ক্যাম্পবেল

57

আমি কিছু রুবি কোড লিখেছিলাম একটি একক 500 উপাদান মাল্টি-সারি সন্নিবেশ বিবরণীর একটি সিরিজ থেকে সন্নিবেশ যা ব্যক্তিগত সন্নিবেশ চালানোর চেয়ে যথেষ্ট দ্রুত ছিল। তারপরে আমি একাধিক সন্নিবেশকে কেবল একটি একক লেনদেনে মোড়ানোর চেষ্টা করেছি এবং দেখতে পেয়েছি যে আমি খুব কম কোডের সাথে একই ধরণের গতি পেতে পারি।

BEGIN TRANSACTION;
INSERT INTO table VALUES (1,1,1,1);
INSERT INTO table VALUES (2,2,2,2);
...
COMMIT;

1
এটি কোডে কাজ করে না, যখন এটি সরাসরি এসকিউএলটি ম্যানেজারে কাজ করে। কোডে এটি কেবল প্রথম সারির সন্নিবেশ করায় :(
বৈভব সরান

4
আমি আমার কোডে এই স্টাইলটি usingোকানোর জন্য ব্যবহার করছি এবং এটি পুরোপুরি কার্যকর হয়। আপনাকে কেবলমাত্র একবারে সমস্ত এসকিউএল জমা দেওয়ার বিষয়টি নিশ্চিত করতে হবে। এটি আমার জন্য একটি বিশাল গতি বৃদ্ধি ছিল তবে আমি আগ্রহী যে যদি গৃহীত উত্তরটি দ্রুত বা ধীর হয় তবে এই?
ড্যান

একটি একক লেনদেনের মধ্যে একাধিক সারণী সংশোধন করার সময় এই পদ্ধতিরটি সত্যই ভাল হয় which
ফ্রাঙ্ক

মনে রাখবেন যে আপনার যদি বাইন্ডিং ব্যবহারের প্রয়োজন হয় তবে এই পদ্ধতিটি কার্যকর হবে না । এসকিউএলাইট 3 ইঞ্জিন ধরে নিবে যে আপনার সমস্ত বাইন্ডিং প্রথম বিবৃতিতে প্রয়োগ করা হবে এবং নিম্নলিখিত বিবৃতিগুলি উপেক্ষা করুন। আরও বিশদ ব্যাখ্যার জন্য এই এসও প্রশ্নটি দেখুন ।
ফিলিপ হেবার্ট

38

এই পৃষ্ঠা অনুসারে এটি সমর্থিত নয়:

  • 2007-12-03: মাল্টি-সারি INSERT ওরফে যৌগিক INSERT সমর্থিত নয়।
  INSERT INTO table (col1, col2) VALUES 
      ('row1col1', 'row1col2'), ('row2col1', 'row2col2'), ...

আসলে, এসকিউএল 92 স্ট্যান্ডার্ড অনুযায়ী, একটি ভ্যালু এক্সপ্রেশন নিজেই দাঁড়াতে সক্ষম হওয়া উচিত। উদাহরণস্বরূপ, নীচে তিনটি সারি সহ একটি-কলামের টেবিলটি ফেরত দেওয়া উচিত:VALUES 'john', 'mary', 'paul';

সংস্করণ 3.7.11 হিসাবে এসকিউএলাইট মাল্টি-সারি-সন্নিবেশকে সমর্থন করে । রিচার্ড হিপ মন্তব্য করেছেন:

"নতুন বহু-মূল্যবান সন্নিবেশটি যৌগিক সন্নিবেশের জন্য নিছক সিনট্যাকটিক সুগার (সিক) or


একভাবে বা অন্যভাবে কোনও পারফরম্যান্স সুবিধা নেই। - আপনি আমাকে বলতে পারেন যে আপনি কোথায় এই মন্তব্য দেখেছেন? আমি এটি কোথাও খুঁজে পেলাম না।
অ্যালিক্স অ্যাক্সেল

15

সংস্করণ থেকে শুরু 2012-03-20 (3.7.11), স্ক্লাইট নিম্নলিখিত INSERT বাক্য গঠন সমর্থন:

INSERT INTO 'tablename' ('column1', 'column2') VALUES
  ('data1', 'data2'),
  ('data3', 'data4'),
  ('data5', 'data6'),
  ('data7', 'data8');

ডকুমেন্টেশন পড়ুন: http://www.sqlite.org/lang_insert.html

PS: ব্রায়ান ক্যাম্পবেলের জবাব / উত্তরটি দয়া করে +1 করুন। আমার না! তিনি প্রথমে সমাধানটি উপস্থাপন করেছিলেন।


10

অন্য পোস্টারগুলি যেমন বলেছে, এসকিউএলাইট এই বাক্য গঠনটিকে সমর্থন করে না। আমি জানি না যৌগিক INSERT গুলি এসকিউএল স্ট্যান্ডার্ডের অংশ কিনা, তবে আমার অভিজ্ঞতায় সেগুলি অনেক পণ্যতে প্রয়োগ করা হয়নি

একদিকে যেমন আপনার স্পষ্ট হওয়া উচিত যে আপনি যদি স্পষ্ট লেনদেনে একাধিক INSERT টি মোড়ানো থাকেন তবে এসকিউএলটিতে INSERT এর পারফরম্যান্স যথেষ্ট উন্নত হবে।


10

হ্যাঁ, এসকিউএল এটি করতে পারে তবে আলাদা সিনট্যাক্স সহ। SQLite ডকুমেন্টেশন উপায় দ্বারা, বেশ ভাল। এটি আপনাকে এও বলবে যে কয়েকটি সারি সন্নিবেশ করার একমাত্র উপায় হ'ল selectোকানোর জন্য ডেটার উত্স হিসাবে একটি নির্বাচনী বিবৃতি ব্যবহার করা।


9

স্কেলাইট 3 কোনও এসএলপেটের মাধ্যমে এসকিউএলে সরাসরি এটি করতে পারে না এবং যখন নির্বাচন বাছাইয়ের একটি "সারি" ফিরিয়ে দিতে পারে, আমি এটিকে কোনও ফোনি কলাম ফেরত দেওয়ার কোনও উপায় জানি না।

তবে, সিএলআই এটি করতে পারে:

.import FILE TABLE     Import data from FILE into TABLE
.separator STRING      Change separator used by output mode and .import

$ sqlite3 /tmp/test.db
SQLite version 3.5.9
Enter ".help" for instructions
sqlite> create table abc (a);
sqlite> .import /dev/tty abc
1
2
3
99
^D
sqlite> select * from abc;
1
2
3
99
sqlite> 

আপনি যদি সিএলআই .importকমান্ড ব্যবহার না করে কোনও INSERT এর আশেপাশে একটি লুপ রেখে থাকেন তবে অবশ্যই INSERT গতির জন্য স্ক্লাইট FAQ এ পরামর্শটি অনুসরণ করতে ভুলবেন না:

ডিফল্টরূপে, প্রতিটি INSERT বিবৃতি তার নিজস্ব লেনদেন হয়। তবে আপনি যদি BEGIN ... COMMIT এর সাথে একাধিক INSERT বিবৃতি ঘিরে থাকেন তবে সমস্ত সন্নিবেশকে একটি একক লেনদেনে গ্রুপ করা হবে। লেনদেন করার জন্য প্রয়োজনীয় সময়টি সমস্ত বদ্ধ সন্নিবেশ বিবৃতিগুলির তুলনায় সাদৃশ্যযুক্ত হয় এবং তাই প্রতি সন্নিবেশ বিবৃতিতে সময়টি হ্রাস করা হয়।

আর একটি বিকল্প হল PRAGMA সিঙ্ক্রোনাস = অফ চালানো। এই কমান্ডের ফলে এসকিউএলাইট ডিস্কের পৃষ্ঠে পৌঁছানোর জন্য ডেটাতে অপেক্ষা না করবে, যা লেখার ক্রিয়াকলাপটি আরও দ্রুত দেখায়। তবে আপনি যদি কোনও লেনদেনের মাঝখানে শক্তি হারিয়ে ফেলেন তবে আপনার ডাটাবেস ফাইলটি দুর্নীতিগ্রস্থ হতে পারে।


আপনি যদি এসকিউএলাইটের .importকমান্ডের উত্স কোডটি দেখেন তবে এটি কেবল একটি লুপ, ইনপুট ফাইল (বা টিটি) থেকে একটি লাইন এবং তারপরে সেই লাইনের জন্য একটি ইনসার্ট স্টেটমেন্ট। দুর্ভাগ্যক্রমে দক্ষতার উন্নতি হয়নি not
বিল কারভিন

8

অ্যালেক্স সঠিক: "নির্বাচন করুন ... ইউনিয়ন" বিবৃতিটি ক্রম হারাবে যা কিছু ব্যবহারকারীর পক্ষে অত্যন্ত গুরুত্বপূর্ণ। এমনকি আপনি যখন কোনও নির্দিষ্ট ক্রমে সন্নিবেশ করান তখনও স্ক্লাইট জিনিসগুলি পরিবর্তন করে তাই সন্নিবেশ ক্রমটি গুরুত্বপূর্ণ যদি লেনদেন ব্যবহার করতে পছন্দ করেন use

create table t_example (qid int not null, primary key (qid));
begin transaction;
insert into "t_example" (qid) values (8);
insert into "t_example" (qid) values (4);
insert into "t_example" (qid) values (9);
end transaction;    

select rowid,* from t_example;
1|8
2|4
3|9

8

পুরানো সংস্করণগুলির জন্য নির্ভীক_ফুলের দুর্দান্ত উত্তর রয়েছে। আমি কেবল যুক্ত করতে চেয়েছিলাম যে আপনার অবশ্যই সমস্ত কলাম তালিকাভুক্ত রয়েছে তা নিশ্চিত করা দরকার। সুতরাং আপনার কাছে যদি 3 টি কলাম রয়েছে, আপনার 3 টি কলামে নিশ্চিত নির্বাচনগুলি নির্বাচন করা দরকার।

উদাহরণ: আমার কাছে 3 টি কলাম রয়েছে তবে আমি কেবল 2 কলামের মূল্যবান ডেটা sertোকাতে চাই। ধরুন আমি প্রথম কলামটি সম্পর্কে যত্ন নিই না কারণ এটি একটি স্ট্যান্ডার্ড পূর্ণসংখ্যার আইডি। আমি নিম্নলিখিতগুলি করতে পারি ...

INSERT INTO 'tablename'
      SELECT NULL AS 'column1', 'data1' AS 'column2', 'data2' AS 'column3'
UNION SELECT NULL, 'data3', 'data4'
UNION SELECT NULL, 'data5', 'data6'
UNION SELECT NULL, 'data7', 'data8'

দ্রষ্টব্য: মনে রাখবেন "নির্বাচন করুন ... ইউনিয়ন" বিবৃতিটি অর্ডারটি হারাবে। (এজি 1 থেকে)



6

আপনি পারবেন না তবে আমি মনে করি না যে আপনি কিছু মিস করছেন।

যেহেতু আপনি স্ক্য্লাইটকে সর্বদা প্রক্রিয়াতে কল করেন তাই আপনি 1 সন্নিবেশ বিবৃতি বা 100 টি সন্নিবেশ বিবৃতি কার্যকর করেন কিনা তা পারফরম্যান্সে মোটেই গুরুত্বপূর্ণ নয়। কমিট যদিও অনেক সময় নেয় তাই লেনদেনের মধ্যে সেই 100 টি সন্নিবেশ রাখুন।

যখন আপনি প্যারামিটারাইজড ক্যোয়ারী ব্যবহার করেন (স্ক্রাইটটি আরও দ্রুত পার্সিংয়ের প্রয়োজন হয়) তখন আমি এর চেয়ে বড় বিবৃতিটি প্রকাশ করতে পারি না:

insert into mytable (col1, col2)
select 'a','b'
union 
select 'c','d'
union ...

এগুলি বারবার বিশ্লেষণ করা দরকার কারণ প্রতিটি মনগড়া বক্তব্য আলাদা।


6

মাইএসকিএল লাইটে আপনি একাধিক মান সন্নিবেশ করতে পারবেন না তবে আপনি কেবল একবারে সংযোগ খোলার পরে সমস্ত সন্নিবেশ এবং তারপরে সংযোগ বন্ধ করে সময় সাশ্রয় করতে পারবেন। এটি অনেক সময় সাশ্রয় করে


5

লেনদেন ব্যবহারে সমস্যা হ'ল আপনি পড়ার জন্য টেবিলটি লকও করেন। সুতরাং যদি আপনার কাছে সত্যিকারের অনেক বেশি ডেটা toোকাতে হয় এবং আপনার পূর্বরূপ বা তার উদাহরণ উদাহরণ হিসাবে আপনার ডেটা অ্যাক্সেস করতে হবে তবে এই পদ্ধতিটি ভালভাবে কাজ করে না।

অন্যান্য সমাধানের সাথে সমস্যা হ'ল আপনি সন্নিবেশ করার ক্রমটি হারাবেন

insert into mytable (col)
select 'c'
union 
select 'd'
union 
select 'a'
union 
select 'b';

স্ক্লাইটে ডেটা হ'ল এ, বি, সি, ডি ...


5

সংস্করণ 3.7.11 হিসাবে এসকিউএলাইট মাল্টি-সারি-সন্নিবেশকে সমর্থন করে। রিচার্ড হিপ মন্তব্য করেছেন:

আমি 3.6.13 ব্যবহার করছি

আমি এই মত আদেশ:

insert into xtable(f1,f2,f3) select v1 as f1, v2 as f2, v3 as f3 
union select nextV1+, nextV2+, nextV3+

এক সাথে 50 টি রেকর্ড সন্নিবেশ করাতে, এটি কেবল দ্বিতীয় বা তার চেয়ে কম সময় নেয়।

একসাথে একাধিক সারি সন্নিবেশ করানোর জন্য স্ক্লাইট ব্যবহার করা সত্য true লিখেছেন অ্যান্ডি লিখেছেন।

ধন্যবাদ অ্যান্ডি +1



2

আপনি যদি স্ক্লাইট ম্যানেজার ফায়ারফক্স প্লাগইন ব্যবহার করেন তবে এটি INSERTএসকিউএল স্টেটমেন্ট থেকে বাল্ক সন্নিবেশকে সমর্থন করে ।

প্রকৃতপক্ষে এটি এটিকে সমর্থন করে না, তবে স্ক্লাইট ব্রাউজারটি করে (উইন্ডোজ, ওএস এক্স, লিনাক্সে কাজ করে)


2

আমার নীচের মতো একটি প্রশ্ন রয়েছে, তবে ওডিবিসি ড্রাইভার এসকিউএলাইটের সাথে "," এর ত্রুটি রয়েছে it আমি এইচটিএ (এইচটিএমএল অ্যাপ্লিকেশন) এ ভিসস্ক্রিপ্ট চালাচ্ছি।

INSERT INTO evrak_ilac_iliskileri (evrak_id, ilac_id, baglayan_kullanici_id, tarih) VALUES (4150,762,1,datetime()),(4150,9770,1,datetime()),(4150,6609,1,datetime()),(4150,3628,1,datetime()),(4150,9422,1,datetime())

2

স্ক্লাইটে ৩. 3..২:

INSERT INTO table_name (column1, column2) 
                SELECT 'value1', 'value1' 
          UNION SELECT 'value2', 'value2' 
          UNION SELECT 'value3', 'value3' 

ইত্যাদি


2

আমি ক্যোয়ারিকে গতিশীল করতে সক্ষম হয়েছি। এটি আমার টেবিল:

CREATE TABLE "tblPlanner" ("probid" text,"userid" TEXT,"selectedtime" DATETIME,"plannerid" TEXT,"isLocal" BOOL,"applicationid" TEXT, "comment" TEXT, "subject" TEXT)

এবং আমি একটি মাধ্যমে সমস্ত তথ্য পাচ্ছি JSON, সুতরাং একটি ভিতরে সমস্ত কিছু পরে NSArrayআমি এটি অনুসরণ:

    NSMutableString *query = [[NSMutableString alloc]init];
    for (int i = 0; i < arr.count; i++)
    {
        NSString *sqlQuery = nil;
        sqlQuery = [NSString stringWithFormat:@" ('%@', '%@', '%@', '%@', '%@', '%@', '%@', '%@'),",
                    [[arr objectAtIndex:i] objectForKey:@"plannerid"],
                    [[arr objectAtIndex:i] objectForKey:@"probid"],
                    [[arr objectAtIndex:i] objectForKey:@"userid"],
                    [[arr objectAtIndex:i] objectForKey:@"selectedtime"],
                    [[arr objectAtIndex:i] objectForKey:@"isLocal"],
                    [[arr objectAtIndex:i] objectForKey:@"subject"],
                    [[arr objectAtIndex:i] objectForKey:@"comment"],
                    [[NSUserDefaults standardUserDefaults] objectForKey:@"applicationid"]
                    ];
        [query appendString:sqlQuery];
    }
    // REMOVING LAST COMMA NOW
    [query deleteCharactersInRange:NSMakeRange([query length]-1, 1)];

    query = [NSString stringWithFormat:@"insert into tblPlanner (plannerid, probid, userid, selectedtime, isLocal, applicationid, subject, comment) values%@",query];

এবং অবশেষে আউটপুট ক্যোয়ারী হ'ল:

insert into tblPlanner (plannerid, probid, userid, selectedtime, isLocal, applicationid, subject, comment) values 
<append 1>
('pl1176428260', '', 'US32552', '2013-06-08 12:00:44 +0000', '0', 'subj', 'Hiss', 'ap19788'),
<append 2>
('pl2050411638', '', 'US32552', '2013-05-20 10:45:55 +0000', '0', 'TERI', 'Yahoooooooooo', 'ap19788'), 
<append 3>
('pl1828600651', '', 'US32552', '2013-05-21 11:33:33 +0000', '0', 'test', 'Yest', 'ap19788'),
<append 4>
('pl549085534', '', 'US32552', '2013-05-19 11:45:04 +0000', '0', 'subj', 'Comment', 'ap19788'), 
<append 5>
('pl665538927', '', 'US32552', '2013-05-29 11:45:41 +0000', '0', 'subj', '1234567890', 'ap19788'), 
<append 6>
('pl1969438050', '', 'US32552', '2013-06-01 12:00:18 +0000', '0', 'subj', 'Cmt', 'ap19788'),
<append 7>
('pl672204050', '', 'US55240280', '2013-05-23 12:15:58 +0000', '0', 'aassdd', 'Cmt', 'ap19788'), 
<append 8>
('pl1019026150', '', 'US32552', '2013-06-08 12:15:54 +0000', '0', 'exists', 'Cmt', 'ap19788'), 
<append 9>
('pl790670523', '', 'US55240280', '2013-05-26 12:30:21 +0000', '0', 'qwerty', 'Cmt', 'ap19788')

যা কোডের মাধ্যমেও ভাল চলছে এবং আমি এসকিউএলাইটে সমস্ত কিছু সাফল্যের সাথে সংরক্ষণ করতে সক্ষম হয়েছি।

এর আগে আমি UNIONকোয়েরি স্টাফগুলি গতিশীল করেছিলাম তবে এটি কিছু বাক্য গঠন ত্রুটি দেওয়া শুরু করে। যাইহোক, এটি আমার পক্ষে ভাল চলছে।


2

আমি অবাক হয়েছি যে কেউ প্রস্তুত বিবৃতি উল্লেখ করেনি । আপনি যদি নিজেরাই এসকিউএল ব্যবহার করেন এবং অন্য কোনও ভাষার মধ্যে না ব্যবহার করেন তবে আমি ভাবব যে কোনও লেনদেনে মোড়ানো প্রস্তুত বিবৃতিগুলি একাধিক সারি সন্নিবেশ করার সবচেয়ে কার্যকর উপায় হবে way


1
প্রস্তুত বিবৃতি সর্বদা একটি ভাল ধারণা, তবে ওপি যে প্রশ্নটি জিজ্ঞাসা করছে তার সাথে সম্পর্কিত নয়। তিনি জিজ্ঞাসা করছেন এক বিবৃতিতে একাধিক ডেটা forোকানোর জন্য মূল সিনট্যাক্সটি কী।
লেকী

0

আপনি InsertHelper ব্যবহার করতে পারেন, এটি সহজ এবং দ্রুত

ডকুমেন্টেশন: http://developer.android.com/references/android/datedia/DatabaseUtils.InsertHelper.html

টিউটোরিয়াল: http://www.outofwhatbox.com/blog/2010/12/android- using-dat databaseutils-inserthelper-for-faster-insertions-into-sqlite-database /

সম্পাদনা করুন: InsertHelper এপিআই স্তরের 17 হিসাবে অবহিত করা হয়েছে


3
InsertHelper এপিআই 17
গ্রেগম

-1

আপনি যদি ব্যাশ শেল ব্যবহার করেন তবে আপনি এটি ব্যবহার করতে পারেন:

time bash -c $'
FILE=/dev/shm/test.db
sqlite3 $FILE "create table if not exists tab(id int);"
sqlite3 $FILE "insert into tab values (1),(2)"
for i in 1 2 3 4; do sqlite3 $FILE "INSERT INTO tab (id) select (a.id+b.id+c.id)*abs(random()%1e7) from tab a, tab b, tab c limit 5e5"; done; 
sqlite3 $FILE "select count(*) from tab;"'

বা আপনি যদি স্ক্লাইট সিএলআই এ থাকেন তবে আপনার এটি করা দরকার:

create table if not exists tab(id int);"
insert into tab values (1),(2);
INSERT INTO tab (id) select (a.id+b.id+c.id)*abs(random()%1e7) from tab a, tab b, tab c limit 5e5;
INSERT INTO tab (id) select (a.id+b.id+c.id)*abs(random()%1e7) from tab a, tab b, tab c limit 5e5;
INSERT INTO tab (id) select (a.id+b.id+c.id)*abs(random()%1e7) from tab a, tab b, tab c limit 5e5;
INSERT INTO tab (id) select (a.id+b.id+c.id)*abs(random()%1e7) from tab a, tab b, tab c limit 5e5;
select count(*) from tab;

এটা কিভাবে কাজ করে? এটি যদি সারণী tab:

id int
------
1
2

তারপরে select a.id, b.id from tab a, tab bফিরে আসে

a.id int | b.id int
------------------
    1    | 1
    2    | 1
    1    | 2
    2    | 2

ইত্যাদি। প্রথম প্রয়োগের পরে আমরা 2 টি সারি sertোকান, তারপরে 2 ^ 3 = 8। (তিনটি কারণ আমাদের রয়েছেtab a, tab b, tab c )

দ্বিতীয় নির্বাহের পরে আমরা অতিরিক্ত (2+8)^3=1000সারি সন্নিবেশ করি

আফ্রি থ্রিড আমরা max(1000^3, 5e5)=500000সারিগুলি সন্নিবেশ করিয়েছি এবং আরও কিছু ...

এটি এসকিউএল ডাটাবেস পপুলেশন করার পদ্ধতিটি আমার পক্ষে দ্রুততম।


2
আপনি দরকারী ডেটা sertোকাতে চাইলে এটি কাজ করে না ।
সিএল

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