আমি কীভাবে মাইএসকিউএলে একাধিক কলামের জন্য অনন্য সীমাবদ্ধতা নির্দিষ্ট করব?


863

আমার একটি টেবিল রয়েছে:

table votes (
    id,
    user,
    email,
    address,
    primary key(id),
);

এখন আমি কলামগুলি ব্যবহারকারী, ইমেল, ঠিকানাটিকে অনন্য (একসাথে) করতে চাই।

আমি কীভাবে এটি MySQL এ করব?

অবশ্যই উদাহরণটি কেবল ... একটি উদাহরণ। সুতরাং দয়া করে শব্দার্থবিদ্যা সম্পর্কে চিন্তা করবেন না।

উত্তর:


1435
ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);

31
এটি INSERT বিবৃতিগুলির অনুলিপি কী অনুচ্ছেদে সঠিকভাবে কাজ করবে? এটিই, যদি আমি একটি সারি সন্নিবেশ করানোর চেষ্টা করতাম যা অন্য সারিটির ব্যবহারকারী / ইমেল / ঠিকানা মানগুলির সাথে বিরোধিত হয়, তবে কী কী INSERT এর পরিবর্তে ON DUPLICATE KEY ধারা দ্বারা সুনির্দিষ্ট ক্রিয়াগুলি সম্পাদন করবে?
clizzin

6
তিনটি পথের সমন্বয়টি কী অনন্য হবে? বা সমস্ত পৃথক তিনটি কলাম অনন্য হবে?
গ্যারি লিন্ডাল

95
এই লোকগুলির জন্য মাইএসকিউএল ওয়ার্কবেঞ্চ ব্যবহার করছেন: সূচী ট্যাবে যান এবং আপনার টাইপ হিসাবে অনন্য নির্বাচন করুন। আপনার সূচককে একটি নাম দিন এবং "সূচক কলাম" বিভাগের অধীনে উপযুক্ত কলামগুলি পরীক্ষা করুন
পাকম্যান

10
আমার মতো, অন্য কেউ যদি অনুসন্ধান ইঞ্জিনগুলি থেকে এটি খুঁজে পেয়েছিল ... এবং ডিপ্লিক্যাট কী কোনও সংমিশ্রিত কী নিয়ে কাজ করবে কিনা সে সম্পর্কে ক্লিজিনের প্রশ্নের উত্তর দেওয়ার জন্য - এটি একেবারে হবে, তবে এটি সিনট্যাক্সে কিছুটা সামান্য সমন্বয় প্রয়োজন। দেখতে stackoverflow.com/questions/9537710/...
জো

2
কীভাবে এটি NULL মান সহ কার্যকর করা যায়। আমরা যদি দুটি একই সারি NULL মান সহ সন্নিবেশ করি তবে এটি কার্যকর হয় না ...
ওয়াসিম এ।

237

আমার একটি মাইএসকিউএল টেবিল রয়েছে:

CREATE TABLE `content_html` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_box_elements` int(11) DEFAULT NULL,
  `id_router` int(11) DEFAULT NULL,
  `content` mediumtext COLLATE utf8_czech_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_box_elements` (`id_box_elements`,`id_router`)
);

এবং অনন্য কী কেবল প্রত্যাশার মতোই কাজ করে, এটি id_box_e উপাদান এবং id_router এর একাধিক NULL সারি মঞ্জুরি দেয়।

আমি মাইএসকিউএল 5.1.42 চালাচ্ছি, তাই সম্ভবত উপরে আলোচিত ইস্যুতে কিছু আপডেট ছিল। ভাগ্যক্রমে এটি কাজ করে এবং আশা করি এটি সেভাবেই থাকবে।


34
আমি এই উত্তরটি চিহ্নিত করতে চেয়েছিলাম কারণ এটি আপনাকে দেখায় যে কীভাবে একটি অনন্য সূচী দিয়ে একটি নতুন টেবিল তৈরি করা যায় যেখানে উপরের জোনস্টজহানের উত্তর আপনাকে কীভাবে বিদ্যমান টেবিলটি আপডেট করবেন তা বলে দেয়। আপনার নতুন টেবিল তৈরি করা বা বিদ্যমান কোনও আপডেট করা আছে কিনা তার উপর নির্ভর করে যদিও তারা একই কাজ করে। :)
GazB

3
সমস্ত ব্যাককোটিসের সাথে কী রয়েছে, তারা কি কোনও উদ্দেশ্যে কাজ করে?
puk

8
এটি অ্যাডমিনারের আউটপুট (www.adminer.org) যা এই ব্যাককোটগুলি স্বয়ংক্রিয়ভাবে সন্নিবেশ করায় তাই কলামের নাম হিসাবে ব্যবহৃত মাইএসকিএল কীওয়ার্ডগুলির সংঘর্ষে কোনও সমস্যা নেই।
ফ্রডিক

50

মাল্টি কলামের অনন্য সূচীগুলি মাইএসকিউএলে কাজ করে না যদি আপনার ন্যূনতম মান থাকে তবে মাইএসকিউএল NULL কে একটি অনন্য মান হিসাবে বিবেচনা করে এবং কমপক্ষে বর্তমানে বহু-কলাম সূচকগুলিতে কাজ করার কোনও যুক্তি নেই। হ্যাঁ আচরণটি পাগল, কারণ এটি বহু-কলাম সূচকের বৈধ অ্যাপ্লিকেশনগুলিকে প্রচুর পরিমাণে সীমাবদ্ধ করে, তবে এটি যা হয় ... এখনও হিসাবে, এটি একটি বাগ যা মাইএসকিউএলে "ঠিক করবে না" দিয়ে স্ট্যাম্প করা হয়েছে is বাগ ট্র্যাক ...


11
শোধন দুই পয়েন্ট: 1) এই আচরণের জন্য না রাখা ENGINE BDB, এবং, 2) এই হয় নথিভুক্ত , ব্যবহার যদিও এই প্রোগ্রামটিতে না নথিভুক্ত স্পষ্টত যথেষ্ট দেওয়া কিভাবে এটি বিস্ময়কর / অপ্রীতিকর হতে পারে। মাইএসকিউএল বাগ 25544 দেখুন bugs.mysql.com/bug.php?id=25544 আলোচনার জন্য।
পাইলক্রো

2
NUL মাথা উঁচু করার জন্য ধন্যবাদ, আমার যে সমস্যাটি ছিল তা সম্বোধন করে ... আমি মনে করি আমি একটি হ্যাশ চেকসাম নিয়ে যাব
ড্যানিয়েল ডয়েজেমা

7
এটি কোনও উত্তর নয়। এটি মূল প্রশ্নের একটি মন্তব্য হওয়া উচিত।
সীমিত প্রায়শ্চিত্ত

অফিসিয়াল ডকস বলেছেন: নোট করুন যে, মাইএসকিউএল 5.1 হিসাবে, বিডিবি আর সমর্থন করে না।
জর্জি ডি

2
খুব ভাল তথ্য, কিন্তু একটি উত্তর না। শুধুমাত্র পেরিফেরিয়ালি প্রশ্নের সাথে সম্পর্কিত।
বিলিএনাহ

23

আপনি কি এই চেষ্টা করেছেন?

UNIQUE KEY `thekey` (`user`,`email`,`address`)

কি এরিক আমার জন্য কাজ করে বললেন ঠিক সূক্ষ্ম: UNIQUE KEY thekey` ( user, email, address) `। আমি মাইএসকিউএল সংস্করণ 5.5.24 ব্যবহার করছি আপনি যদি এটি ব্যবহার করেন তবে আপনি এটি পিএইচপিএমওয়াইডমিনে সেট করতে পারেন। আমি পিএমএর 3.5.1 সংস্করণ ব্যবহার করছি।
ডাব্লিউকিউসি

এটি MySQL 5.6 দিয়ে চেষ্টা করেছেন। প্রথম চেষ্টা থেকে কাজ করে। ধন্যবাদ এরিক!
লরেন্স

11

এটি mysql 5.5.32 সংস্করণে কাজ করে

ALTER TABLE  `tablename` ADD UNIQUE (`column1` ,`column2`);

1
এটি কলাম নামের একক উদ্ধৃতি ব্যতীত কাজ করে বলে মনে হচ্ছে।
প্রতীক সিংহল

7

মাইএসকিউএল 5 বা উচ্চতর এই জাতীয় আচরণ করে (আমি কেবল পরীক্ষা করেছি):

  • আপনি কমনীয় কলামগুলি জড়িত অনন্য প্রতিবন্ধকগুলি নির্ধারণ করতে পারেন। বলুন আপনি একটি সীমাবদ্ধ অনন্য (এ, বি) সংজ্ঞায়িত করেন যেখানে A টি সংক্ষিপ্ত নয় তবে বি হয়
  • এ জাতীয় সীমাবদ্ধতার মূল্যায়ন করার সময় আপনি যতবার চান (একই মান)!
  • আপনার কাছে কেবল একটি (এ, নাল বি নয়) জোড়া থাকতে পারে

উদাহরণ: PRODUCT_NAME, PRODUCT_VERSION 'গ্লাস', নাল 'গ্লাস', নাল 'ওয়াইন', 1

এখন যদি আপনি আবার '' ওয়াইন '1) toোকানোর চেষ্টা করেন তবে এটি একটি সীমাবদ্ধতা লঙ্ঘনের রিপোর্ট করবে আশা করি এটি সাহায্য করে


ব্যাখ্যা করার জন্য ধন্যবাদ। আমার কাছে অনন্য (এ, বি, সি) রয়েছে এবং আমি জানতাম না কেন এটি একই নন বিকল্পগুলির সাথে নাল সংমিশ্রণের অনুমতি দেয়
আলেকজান্দ্রু টপাল ă

6

আপনি মাধ্যমে একাধিক-কলাম অনন্য ইনডেক্স যোগ করতে পারেন পিএইচপি মাই এডমিন । (আমি ৪.০.৪ সংস্করণে পরীক্ষা করেছি)

আপনার লক্ষ্য সারণির জন্য কাঠামো পৃষ্ঠায় নেভিগেট করুন । কলামগুলির মধ্যে একটিতে একটি অনন্য সূচক যুক্ত করুন। আপনার সদ্য যুক্ত হওয়া অনন্য সূচকটি দেখতে কাঠামো পৃষ্ঠার নীচে সূচকগুলির তালিকাটি প্রসারিত করুন । সম্পাদনা আইকনটিতে ক্লিক করুন এবং নিম্নলিখিত সংলাপে আপনি সেই অনন্য সূচকে অতিরিক্ত কলাম যুক্ত করতে পারেন।


3

আমি এটি এইভাবে করি:

CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);

একটি অনন্য জন্য আমার সম্মেলন index_nameহয় TableName_Column1_Column2_Column3_uindex


2

অনন্য সূচক যুক্ত করার জন্য নিম্নলিখিতগুলি প্রয়োজনীয়:

1)
টেবিলের নাম 2) সূচি_নাম
3) কলামগুলিতে আপনি সূচি যোগ করতে চান

ALTER TABLE  `tablename` 
ADD UNIQUE index-name
(`column1` ,`column2`,`column3`,...,`columnN`);

আপনার ক্ষেত্রে আমরা নিম্নলিখিত হিসাবে অনন্য সূচক তৈরি করতে পারি:

ALTER TABLE `votes`ADD 
UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);

1

আপনি যদি ভবিষ্যতে সদৃশ এড়াতে চান। আইডি 2 বলে আরেকটি কলাম তৈরি করুন।

UPDATE tablename SET id2 = id;

এখন দুটি কলামে অনন্যটি যুক্ত করুন:

alter table tablename add unique index(columnname, id2);

1

আপনি যদি মাইএসকিএলে টেবিল তৈরি করে থাকেন তবে নিম্নলিখিতগুলি ব্যবহার করুন:

create table package_template_mapping (
mapping_id  int(10) not null auto_increment  ,
template_id int(10) NOT NULL ,
package_id  int(10) NOT NULL ,
remark      varchar(100),
primary key (mapping_id) ,
UNIQUE KEY template_fun_id (template_id , package_id)
);

0

প্রথমে বিদ্যমান নকলগুলি থেকে মুক্তি পান

delete a from votes as a, votes as b where a.id < b.id 
and a.user <=> b.user and a.email <=> b.email 
and a.address <=> b.address;

তারপরে অনন্য সীমাবদ্ধতা যুক্ত করুন

ALTER TABLE votes ADD UNIQUE unique_index(user, email, address);

সাথে সীমাবদ্ধতা যাচাই করুন

SHOW CREATE TABLE votes;

মনে রাখবেন যে তাদের ব্যবহারকারীর, ইমেল, ঠিকানাটি অনন্য হিসাবে বিবেচিত হবে যদি তাদের কারও মধ্যে এটির নালিকা থাকে।


0

PostgreSQL এর জন্য ... এটি সূচক সহ আমার পক্ষে কাজ করে না; এটি আমাকে একটি ত্রুটি দিয়েছে, তাই আমি এটি করেছি:

alter table table_name
add unique(column_name_1,column_name_2);

পোস্টগ্র্যাসএসকিউএল অনন্য সূচককে তার নিজস্ব নাম দিয়েছে। আমার ধারণা আপনি টেবিলের বিকল্পগুলিতে সূচকের নাম পরিবর্তন করতে পারেন, যদি এটি পরিবর্তন করা প্রয়োজন ...

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