এক কমান্ডে বিদেশী কী সীমাবদ্ধতার সাথে নতুন কলাম যুক্ত করুন


128

আমি একটি নতুন কলাম যুক্ত করার চেষ্টা করছি যা একটি বিদেশী কী হবে। আমি দুটি পৃথক ALTER TABLEকমান্ড ব্যবহার করে কলাম এবং বিদেশী কী সীমাবদ্ধ করতে সক্ষম হয়েছি :

ALTER TABLE one
ADD two_id integer;

ALTER TABLE one
ADD FOREIGN KEY (two_id) REFERENCES two(id);

দুজনের পরিবর্তে একটি অলটার টেবল কমান্ড দিয়ে এটি করার কোনও উপায় আছে? আমি কাজ করে এমন কিছু নিয়ে আসতে পারিনি।


উত্তর:


185

এসকিউএল সম্পর্কিত প্রশ্নের সাথে প্রায়শই এটি ডিবিএমএসের উপর নির্ভর করে। কিছু ডিবিএমএস আপনাকে কমা দ্বারা বিচ্ছিন্ন ALTER টেবিল ক্রিয়াকলাপগুলি একত্রিত করার অনুমতি দেয়। উদাহরণ স্বরূপ...

ইনফর্মিক্স সিনট্যাক্স:

ALTER TABLE one
    ADD two_id INTEGER,
    ADD CONSTRAINT FOREIGN KEY(two_id) REFERENCES two(id);

আইবিএম ডিবি 2 এলইউডাব্লু এর সিনট্যাক্সটি অনুরূপ, এওয়ার্ড মূলশব্দটি পুনরাবৃত্তি করে তবে (আমি যদি চিত্রটি সঠিকভাবে পড়ি) যোগ করা আইটেমগুলি পৃথক করার জন্য কমা প্রয়োজন হয় না।

মাইক্রোসফ্ট এসকিউএল সার্ভার সিনট্যাক্স:

ALTER TABLE one
    ADD two_id INTEGER,
    FOREIGN KEY(two_id) REFERENCES two(id);

অন্য কেউ কেউ আপনাকে তার মতো ALTER TABLE অপারেশন একত্রিত করার অনুমতি দেয় না। স্ট্যান্ডার্ড এসকিউএল কেবলমাত্র টেল স্টেটমেন্ট স্টেটমেন্টে একক ক্রিয়াকলাপের অনুমতি দেয়, সুতরাং স্ট্যান্ডার্ড এসকিউএল এ এটি দুটি ধাপে সম্পন্ন করতে হবে।


5
দ্বিতীয় যোগ করুন এবং সীমাবদ্ধতা।
ইমরান

18
এসকিউএল অংশের জন্য, সীমাবদ্ধতার নাম দেওয়ার জন্য, আপনি এগুলি লিখুন: ALTER TABLE [বার্তাগুলি] যোগ করুন [সতর্কতা ট্র্যাগারআইডি] বিগিন্ট নল, কনট্রিন্ট FK_Messages_AlertTriggers বিদেশী কী (সতর্কতা ট্র্যাকারস অ্যালার্টট্রিজারস);
ড্রাগগোস ডুরলুট

78

এমএস-এসকিউএল সার্ভারে:

ALTER TABLE one
ADD two_id integer CONSTRAINT fk FOREIGN KEY (two_id) REFERENCES two(id)

এটি কি ডিবি ইঞ্জিনের জন্য?
নট করুন

@knocte এটি এমএসএস এসএলএল সার্ভারের জন্য - প্রশ্নটি এখন তা স্পষ্ট করতে ট্যাগ করা হয়েছে
স্ক্লাদমিন

আমি মনে করি না যে প্রশ্নটি স্পষ্ট করা দরকার, কারণ গৃহীত উত্তরটি ইতিমধ্যে জানিয়েছে যে এটি কীভাবে করবেন ডিবি ইঞ্জিনের মধ্যে একটি বড় পার্থক্য রয়েছে, যা স্পষ্ট করা দরকার তা আপনার উত্তর, তাই আমি কেবল এটি করেছি
নট

9
আপনার সীমাবদ্ধতার নামকরণের জন্য আপ। গৃহীত উত্তরটি সিস্টেমটিকে নাম তৈরি করতে দেয় যা আইকি এবং পরে পরিচালনা করা শক্ত।
ডের্পি

17

এসকিউএল সার্ভারের জন্য এটির মতো কিছু হওয়া উচিত

ALTER TABLE one
ADD two_id integer constraint fk foreign key references two(id)

1
এটি অন্যান্য উত্তরের চেয়ে কিছুটা সংক্ষিপ্ত।
স্যাম

11

ইন মাইক্রোসফট এসকিউএল সার্ভার:

ব্যবহারকারীর সংজ্ঞাযুক্ত বিদেশী কী নাম সহ

ALTER TABLE tableName
ADD columnName dataType,
CONSTRAINT fkName FOREIGN KEY(fkColumnName) 
   REFERENCES pkTableName(pkTableColumnName);

ব্যবহারকারী সংজ্ঞায়িত বিদেশী কী নাম ছাড়াই

ALTER TABLE tableName
ADD columnName dataType,
FOREIGN KEY(fkColumnName) REFERENCES pkTableName(pkTableColumnName);


2

2020 আপডেট

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

আমার ক্ষেত্রে, আমি লারাভেল ব্যবহার করছিলাম এবং আমি আমার সমস্ত আইডির জন্য "স্বাক্ষরবিহীন পূর্ণসংখ্যা" ব্যবহার করি কারণ নেতিবাচক আইডি এলওএল থাকার কোনও মানে নেই।

সুতরাং তার জন্য, কাঁচা এসকিউএল ক্যোয়ারী এর মতো পরিবর্তিত হবে:

ALTER TABLE `table_name`
ADD `column_name` INTEGER UNSIGNED,
ADD CONSTRAINT constrain_name FOREIGN KEY(column_name) REFERENCES foreign_table_name(id);

আমি আসা করি এটা সাহায্য করবে


1
"ADC CONSTRAINT" ঠিক "নিয়ন্ত্রণ" হওয়া উচিত, হ্যাঁ?
টিমএইচ

1

আপনি এটি এসকিউএল সার্ভারের নীচে মতো করতে পারেন

ALTER TABLE one
ADD two_id int foreign key
REFERENCES two(id)




0

আপনার কাছে ক্ষেত্রে ডিফল্ট মান যোগ করতে হবে আপনি ইতিমধ্যে কিছু সারি টেবিল তারপর যোগ আছে ডিফল্ট Val

ALTER TABLE one
ADD two_id int DEFAULT 123,
FOREIGN KEY(two_id) REFERENCES two(id);

0

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

ALTER TABLE product
ADD FOREIGN KEY (product_ID) REFERENCES product(product_ID);

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