মাইএসকিউএল অনন্য বাধা সম্পর্কে নাল মান অগ্রাহ্য করে?


289

আমার একটি ইমেল কলাম রয়েছে যা আমি অনন্য হতে চাই। তবে আমি এটিও নাল মান গ্রহণ করতে চাই। আমার ডাটাবেসে 2 নাল ইমেল থাকতে পারে?


উত্তর:


423

হ্যাঁ, মাইএসকিউএল একটি অনন্য সীমাবদ্ধতার সাথে একটি কলামে একাধিক NULL অনুমতি দেয়।

CREATE TABLE table1 (x INT NULL UNIQUE);
INSERT table1 VALUES (1);
INSERT table1 VALUES (1);   -- Duplicate entry '1' for key 'x'
INSERT table1 VALUES (NULL);
INSERT table1 VALUES (NULL);
SELECT * FROM table1;

ফলাফল:

x
NULL
NULL
1

এটি সমস্ত ডাটাবেসের ক্ষেত্রে সত্য নয়। উদাহরণস্বরূপ, এসকিউএল সার্ভার ২০০৫ এবং তার চেয়েও পুরনো কেবল একটি কলামে একক নূন্যমূল্যকে মঞ্জুরি দেয় যা অনন্য সীমাবদ্ধ।


37
এটি কীভাবে mysql এ সত্য তা সম্পর্কে দুর্দান্ত মন্তব্য, তবে সাধারণভাবে অগত্যা নয়।
ব্যবহারকারী 2910265

11
মতে SQLite প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী , ব্যবহার হয় মাইএসকিউএল, পোস্টগ্রি SQLite, ওরাকল, এবং Firebird একই।
আমির আলী আকবরী

4
আপনার উত্তর আপডেট করুন। এসকিউএল সার্ভার ২০০৮+ এটির জন্য একেবারে অনুমতি দেয়, আপনাকে কেবল একটি পুরো ধারা যুক্ত করতে হবে ... ২০১৩ সালে, ২০০
ম্যাথিউ টারকোট

এই সামান্য বৈশিষ্ট্যটির একটি উত্তর খুঁজে পাওয়া খুব কঠিন হয়ে গেছে যার প্রয়োজন নেই যে ডাটাবেসে একটি নতুন কলাম যুক্ত করা বা মাইএসকিউএলকে খুব পুরানো অ্যাপ্লিকেশনটিতে আপগ্রেড করা দরকার। আমি সত্যিই পোস্টগ্রিসের মতো সমাধান খুঁজছিলাম যেখানে আমি COALESCE ব্যবহার করতে পারি তবে মনে হয় উত্তরটি সর্বদা এটি কীভাবে এটি ডিজাইন করা হয়েছে তা কোনও বাগ নয়। এমনকি WHERE column IS NOT NULLএটি আমার ব্যর্থ হয়েছে বলে মনে হয় না এটি MySQL এর আমার সংস্করণে সমর্থন করে না। আমি কোথায় দেখতে পারে কেউ জানেন?
newdark-it

1
দ্রষ্টব্য: এটি অনন্য সূচকগুলিতেও কাজ করে যাতে আরও কলাম রয়েছে। সুতরাং আপনি যদি ক, ক এবং সি কলামগুলি অনন্য হতে চান তবে এখনও টেবিলের নাল, বি, সি দিয়ে ডাবল সারি রাখতে পারেন
মিহাই ক্রিশ

111

দস্তাবেজগুলি থেকে :

"একটি অনন্য সূচক কলামগুলির জন্য একাধিক নুল মানকে অনুমতি দেয় যা নুল থাকতে পারে"

এটি সমস্ত ইঞ্জিনের জন্য প্রযোজ্য তবে বিডিবি


3
বিডিবি আর বর্তমান মাইএসকিএল সংস্করণে উপলব্ধ নেই (5.1.12 দিয়ে শুরু))
আলিম dezdemir

1
আমার পরীক্ষাটি জাভা ডার্বি ডাটাবেস v10.13.1.1 দেখায় বলে মনে হচ্ছে। একইভাবে অনন্য সূচকযুক্ত কলামে কেবল একটি নালকে মঞ্জুরি দেয়।
খ্রিস্টমটাউন

7

আমি নিশ্চিত নই যে লেখক মূলত কেবল এটিই অনুরোধ করেছিলেন যে এটি নকল মানগুলিকে অনুমতি দেয় কিনা বা এখানে যদি এখানে একটি অন্তর্নিহিত প্রশ্ন জিজ্ঞাসা করা হয়েছিল, " NULLব্যবহারের সময় নকল মানকে কীভাবে অনুমতি দেওয়া যায় UNIQUE?" বা "কেবলমাত্র একটি UNIQUE NULLমানকে কীভাবে অনুমতি দেওয়া যায় ?"

ইতিমধ্যে প্রশ্নের উত্তর দেওয়া হয়েছে, হ্যাঁ সূচকটি NULLব্যবহার করার সময় আপনার সদৃশ মান থাকতে পারে UNIQUE

যেহেতু "একটি UNIQUE NULLমানকে কীভাবে অনুমোদন করা যায়" সন্ধান করার সময় আমি এই উত্তরটিতে হোঁচট খেয়েছি। অন্য যে কেউ একই কাজ করার সময় এই প্রশ্নটিতে হোঁচট খেতে পারে তার জন্য আমার বাকী উত্তরটি আপনার জন্য ...

মাইএসকিউএলে আপনার একটি UNIQUE NULLমান থাকতে পারে না , তবে UNIQUEখালি স্ট্রিংয়ের মান সন্নিবেশ করে আপনার একটি খালি মান থাকতে পারে ।

সতর্কতা: সংখ্যার এবং স্ট্রিং ব্যতীত প্রকারগুলি 0 বা অন্য কোনও ডিফল্ট মানতে ডিফল্ট হতে পারে।


1
প্রতিবন্ধকের সূচকের সাথে কোনও সম্পর্ক নেই। প্রকৃতপক্ষে, এমন কোনও সারি নেই সত্ত্বেও আপনি নুল মান সহ একটি একক সারিও রাখতে সক্ষম হবেন না।
পাইজুসন

1
@ পাইজুসন "সীমাবদ্ধতার সূচকের সাথে কিছু করার নেই?" এর অর্থ কী? আপনার দ্বিতীয় বাক্যটি সম্পর্কে, আমি কখনই বলিনি যে আপনি নুল মান সহ একটি সারি রাখতে পারেন, এই কারণেই আমি পোস্টের শুরুতে বলেছিলাম, নাল মানগুলি ব্যবহার না করা হলেই এটিই একটি সমাধান।
bluegman991

আমি যা বোঝাতে চেয়েছি তা হল যে নতুন উপাদান যুক্ত করা UNIQUEবাধা কারণে নয়, NOT NULLবাধা কারণে ails আমি মনে করি এই উত্তরটি প্রশ্নের সাথে অপ্রাসঙ্গিক কারণ প্রশ্নটি বিশেষভাবে UNIQUEসীমাবদ্ধতার আচরণ সম্পর্কে ।
পাইজুসন

@ পাইজুসন আমি তোমাকে পেয়েছি আপনি ঠিক বলেছেন, আমি শব্দটিকে অন্যথায় পরামর্শ দিয়ে সরিয়েছি। আমি প্রশ্নটি ভুলভাবে পড়েছি। তবে আমি বিশ্বাস করি যে উত্তরগুলি এখনও এই ব্যবহারকারীদের পক্ষে কার্যকর হতে পারে যা এই প্রশ্নের উপর হোঁচট খায় যেমন আমি অনন্য "কিছুই না" মূল্য দেওয়ার উপায় খুঁজতে গিয়ে চেষ্টা করেছি, কিন্তু ভুল করে নাল-সক্ষমতার অনুমতি দিচ্ছি।
bluegman991

1
আমি এই উত্তরটি দরকারী বলে মনে করেছি। তবে এর উত্তরও এখানে দেওয়া আছে । এই উত্তরটি আমার গুগল অনুসন্ধান থেকে প্রথম ফলাফল ছিল, যদিও এই উত্তর এবং লিঙ্কযুক্ত প্রশ্নটি আমি যা খুঁজছিলাম।
কিংডোলিয়ন

5

অযোগ্য অনন্য বাধা এড়ান id আপনি কলামটি সর্বদা একটি নতুন টেবিলের মধ্যে রাখতে পারেন, এটিকে শূন্য ও অনন্য করে তুলুন এবং তারপরে সেই টেবিলটি কেবল তখনই তৈরি করতে পারেন যখন তার জন্য কোনও মূল্য থাকবে। এটি নিশ্চিত করে যে কলামে কোনও মূল নির্ভরতা সঠিকভাবে প্রয়োগ করা যেতে পারে এবং শূন্যতার কারণে যে কোনও সমস্যা এড়ানো যায়।


6
হ্যাঁ, তবে আপনি যা প্রস্তাব করেন তা হ'ল মাইএসকিএল ইতিমধ্যে পর্দার পিছনে কি করে। এই কার্যকারিতাটি যদি অন্তর্নির্মিত হয় তবে কেন চাকাটি পুনরায় উদ্ভাবন করবেন?
ProfileTwist

2
কারণ এটি বৈধ এসকিউএল নয়। আমি বিশ্বাস করি যে এই টিপটি সকলের জন্য দরকারী হবে যারা ডেটাবেস অজ্ঞাব্য নকশা চান (বা প্রয়োজন)।
আর্সেন

@ আরসেন 7 আপনার একাধিক ব্যবসা থাকলে - প্রতিটি একাধিক ক্লায়েন্ট সহ। আপনি সমস্ত ব্যবসা তাদের ক্লায়েন্টদের ইমেল ঠিকানা দিয়ে একটি ফাইলে সংরক্ষণ করেন। সুতরাং আপনি ইমেল_এড্রেসটিকে অনন্য করতে পারবেন না কারণ বিভিন্ন ব্যবসায়ের একই ক্লায়েন্ট থাকতে পারে। সুতরাং আপনাকে বিজনেস_আইডি এবং ইমেল_ড্রেসের একটি সম্মিলিত অনন্য সূচক তৈরি করতে হবে। এটি কি একটি নতুন টেবিলের মধ্যে রাখা সম্ভব - ব্যাখ্যা হিসাবে?
গেরহার্ড লাইবেনবার্গ

4
আমার একটি কেস রয়েছে যেখানে একটি "ইমেল" কলামটি অনন্য বা নাল হওয়া দরকার। আমি যদি আপনার পরামর্শ অনুসরণ করি তবে আমাকে একটি একক "ইমেল" কলাম সহ একটি নতুন টেবিল তৈরি করতে হবে। এই মাইএসকিএল নির্দিষ্ট আচরণের উপর নির্ভর করা অনেক সহজ এবং ফলাফল একই। আমি ইমেলটি কোনও নতুন টেবিলের মধ্যে সঞ্চয় করি কিনা তা গ্রাহক তাতে চিন্তা করে না। এছাড়াও, ডাটাবেস অগ্নিস্টিক ডিজাইন সবসময়ই ওভাররেটেড হয়। প্রচুর প্রকল্পের জন্য, আপনি পারবেন না এবং সম্ভবত একটি ডিবি থেকে অন্যটিতে সহজেই স্যুইচ করবেন না।
conradkleinespel

1
@ ডিজেএমজে নিশ্চিত, তবে কার্যকরী নির্ভরতা বেশিরভাগ মানুষের কাছে গুরুত্বপূর্ণ এবং অযোগ্য অনন্য বাধা সংস্করণ বিসিএনএফ সংস্করণের মতো একই নির্ভরতা প্রয়োগ করে না। কোন বিকল্পটি কম বেশি ব্যবহারিক তা নির্ভর করে আপনার উপর কোন নির্ভরতা গুরুত্বপূর্ণ on সে কারণেই এটি একটি নতুন টেবিল তৈরি বিবেচনা করা মূল্যবান।
নভেম্বর 5:53
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.