মাইএসকিউএল - আমি একটি একক INSERT বিবৃতিতে কয়টি সারি ?োকাতে পারি?


91

এটি মান সেটগুলির সংখ্যার উপর নির্ভর করে? এটি INSERT বিবৃতিতে বাইটের সংখ্যার উপর নির্ভর করে?

উত্তর:


93

INSERT ... SELECTপ্যাটার্ন ব্যবহার করে আপনি অসীম সংখ্যক রেকর্ড সন্নিবেশ করতে পারেন , শর্ত থাকে যে অন্য টেবিলে আপনার কাছে সেই রেকর্ডগুলি বা এর কিছু অংশ রয়েছে।

তবে আপনি যদি INSERT ... VALUESপ্যাটার্নটি ব্যবহার করে মানগুলি কঠোরভাবে কোডিং করছেন তবে আপনার বিবৃতিটি কত বড় / দীর্ঘ তা সীমাবদ্ধতা রয়েছে: ম্যাক্স_নিয়েলড_প্যাক্ট যা ক্লায়েন্ট কর্তৃক ডেটাবেস সার্ভারে প্রেরিত এসকিউএল বিবৃতিগুলির দৈর্ঘ্যকে সীমাবদ্ধ করে এবং এটি কোনও ধরণের প্রশ্নের উপর প্রভাব ফেলে এবং কেবল INSERT বিবৃতিতে নয়।


44

আদর্শভাবে, মাইএসকিএল একক সন্নিবেশ (একবারে) কিন্তু যখন ক

মাইএসকিউএল ক্লায়েন্ট বা মাইএসকিউএল সার্ভারটি ম্যাক্স_গ্রেড_প্যাককেট বাইটের চেয়ে বড় একটি প্যাকেট গ্রহণ করে, এটি একটি প্যাকেটটি খুব বড় ত্রুটি জারি করে এবং সংযোগটি বন্ধ করে দেয়।

সর্বোচ্চ_নয়েড_প্যাকটি ভেরিয়েবলের জন্য ডিফল্ট মানটি কী তা দেখতে, মাইএসকিউএল-এ নিম্নলিখিত কমান্ডটি কার্যকর করুন:

show variables like 'max_allowed_packet';

স্ট্যান্ডার্ড মাইএসকিউএল ইনস্টলেশনের ডিফল্ট মান 1048576 বাইট (1 এমবি) রয়েছে has এটি একটি অধিবেশন বা সংযোগের জন্য উচ্চতর মান সেট করে বাড়ানো যেতে পারে।

এটি প্রত্যেকের জন্য 500MB এর মান নির্ধারণ করে (এটি বিশ্বব্যাপী যা বোঝায়):

SET GLOBAL max_allowed_packet=524288000;

নতুন সংযোগ সহ নতুন টার্মিনালে আপনার পরিবর্তনটি পরীক্ষা করুন:

show variables like 'max_allowed_packet';

অসীম রেকর্ড inোকানোর জন্য এখন এটি কোনও ত্রুটি ছাড়াই কাজ করা উচিত। ধন্যবাদ


11
500 এমবি অসীম নয়। এটি ডিফল্ট মানের চেয়ে অনেক বড়, তবে এখনও অসীম নয়।
কার্লোস 2 ডাব্লু

একটি প্রশ্ন: এই সীমাটি ঠিক কী জন্য? প্রশ্ন নিজেই? ডেটা সম্পর্কে কী, বিবৃতি কার্যকর করার সময় বাইন্ড? আমি কি নিরাপদ থাকতে পারি strlen($query_with_questionmarks) < $max_alloweed_packet?
পাইলেটটি

আপনি যদি এটির সর্বাধিক সম্ভাব্য মান হিসাবে সেট করার চেষ্টা করছিলেন তবে এটি 1 জিবি যা দেখতে এটির মতো হবে: সেট করুন গ্লোবাল সর্বোচ্চ_নোকৃত_প্যাকেট = 1073741824
পিএইচপি গুরু



6

আপনি একটি INSERT বিবৃতি দিয়ে সীমাহীন সংখ্যক সারি সন্নিবেশ করতে পারেন। উদাহরণস্বরূপ, আপনি কোনও সঞ্চিত প্রক্রিয়া চালিত করতে পারেন যা প্রতিবার একটি ইনসার্ট ক্যোয়ারী চালিয়ে একটি লুপ হাজারবার কার্যকর হয়েছিল।

অথবা আপনার INSERT একটি ট্রিগার ভ্রমণ করতে পারে যা নিজেই একটি INSERT সম্পাদন করে। যা অন্য ট্রিগার ট্রিপস। ইত্যাদি।

না, এটি মান সেটগুলির সংখ্যার উপর নির্ভর করে না। বা এটি বাইটের সংখ্যার উপর নির্ভর করে না।

আপনার বন্ধনী কতটা গভীরভাবে বাসা বেঁধে থাকতে পারে তার সীমাবদ্ধতা এবং আপনার মোট বিবৃতিটি কত দিন তার সীমাবদ্ধতা রয়েছে। এ দুটোই ডেইলিওয়েটিএফ.কম-এ বিদ্রূপযুক্তভাবে উল্লেখ করা হয়। যাইহোক, আমি উপরে উল্লিখিত দুটি মাধ্যমই এই সীমাবদ্ধতার আশেপাশে।


আপনার উদাহরণগুলি একাধিক INSERT চালানোর জন্য, এবং এটি একটি INSERT বিবৃতিতে একাধিক সারি সন্নিবেশ করার বিষয়ে প্রদর্শন করে না ..
লুকমান

@ লুকম্যান: একটি ইনসার্ট ক্যোয়ারির ফলে একাধিক INSERTS ডাটাবেস হিট হতে পারে। কে কী গণনা করছে এটি কেবল বিষয়।
বোরিলিড

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

কেউ অসীম কিছু করতে পারে না। সর্বদা সংস্থান সীমা আছে।
এড্রিয়েন

এটি নির্বাচন করুন ... বিবৃতি থেকেও কি প্রয়োগ করা যায়? মানে আমি যদি ডেটা প্রথম স্থানে সর্বাধিক_মুক্ত_প্যাকেট সহ সন্নিবেশ করানো হয়, তবে এটির পরেও এটি নির্বাচন করা উচিত নয় ?. এটি অন্যান্য পোস্টারের মতো কেন এটি অন্য যে কোনও বিবৃতিতে প্রথমে Iোকাতে হবে বলে অন্য পোস্টারের মতো অন্যান্য বিবৃতিতে কেন প্রয়োগ করা হয়েছে তা আমি পাই না।
থাইলিসিয়াস

6

আপনি সর্বোচ্চ_গোলিত_ প্যাকেট সীমাতে এবং আঘাত করবেন

ত্রুটি: 1390 প্রস্তুত বিবৃতিতে অনেকগুলি স্থানধারক রয়েছে।

আপনি 65535 স্থানধারককে একটি স্কোলে রেখে দিতে পারেন o সুতরাং যদি আপনার এক সারিতে দুটি কলাম থাকে তবে আপনি একটি বর্গ বায়ুতে 32767 সারি সন্নিবেশ করতে পারেন।

মাইএসকিউএল এ 50 কে + রেকর্ডস আমদানি সাধারণ ত্রুটি দেয়: 1390 প্রস্তুত বিবৃতিতে অনেকগুলি স্থানধারক রয়েছে


2

আমি বিশ্বাস করি যে প্রতি INSERT সন্নিবেশ করানোর ক্ষেত্রে সীমাবদ্ধ নেই এমন কোনও সারি নেই তবে সাধারণভাবে ক্যোয়ারির জন্য সর্বাধিক আকারের কিছু আকার থাকতে পারে।


2

এটি সর্বাধিক_বিহীন_প্যাকেট দ্বারা সীমাবদ্ধ।
আপনি ব্যবহার করে উল্লেখ করতে পারেন: mysqld --max_allowed_packet=32M এটি ডিফল্ট 16 এম।
আপনি / etc / mysql / এ my.cnf এও নির্দিষ্ট করতে পারেন

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