মাইএসকিউএল কিছু বিদেশী কী সরানো হচ্ছে


190

আমার একটি টেবিল রয়েছে যার প্রাথমিক কীটি অন্যান্য বেশ কয়েকটি টেবিলগুলিতে ব্যবহৃত হয় এবং অন্যান্য টেবিলের জন্য বেশ কয়েকটি বিদেশী কী রয়েছে।

CREATE TABLE location (
   locationID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
   ...
) ENGINE = InnoDB;

CREATE TABLE assignment (
   assignmentID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
   locationID INT NOT NULL,
   FOREIGN KEY locationIDX (locationID) REFERENCES location (locationID)
   ...
) ENGINE = InnoDB;

CREATE TABLE assignmentStuff (
   ...
   assignmentID INT NOT NULL,
   FOREIGN KEY assignmentIDX (assignmentID) REFERENCES assignment (assignmentID)
) ENGINE = InnoDB;

সমস্যাটি হ'ল যখন আমি কোনও বিদেশী কী কলামগুলি (যেমন লোকেশনআইডিএক্স) ছাড়ার চেষ্টা করি তখন এটি আমাকে একটি ত্রুটি দেয়।

"ERROR 1025 (HY000): নাম পরিবর্তন করার সময় ত্রুটি"

এই ত্রুটি না পেয়ে আমি কীভাবে উপরের অ্যাসাইনমেন্ট টেবিলে কলামটি ফেলে দিতে পারি?

উত্তর:


447

যেমনটি এখানে ব্যাখ্যা করা হয়েছে , মনে হচ্ছে বিদেশী কী বাধাটি সীমাবদ্ধতার নাম অনুসারে বাদ দিতে হবে , সূচকের নাম নয়। বাক্য গঠনটি হ'ল:

alter table footable drop foreign key fooconstraint

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

14
পরামর্শ: SHOW CREATE TABLE footable;সীমাবদ্ধতার নাম কী তা দেখতে ব্যবহার করুন । এটি প্রতি সেয়ে কলামের নাম নয়। উত্তর করার জন্য ধন্যবাদ!
ক্রিস বেকার 6

2
আপনি বিদেশী কী বাধার সীমাবদ্ধতা এটির জন্য এটি ব্যবহার করতে পারেন: নির্বাচন করুন * তথ্য_চেমা থেকে টেবিল_কেন্দ্রগুলি যেখানে সীমাবদ্ধতা_স্কেমা = '<আপনার ডিবি নাম>' এবং সীমাবদ্ধতা_প্রকার = 'বিদেশী কী'
গায়ান দাশনায়েকে

21

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

আমি মনে করি নীচের জিজ্ঞাসাটি এটি করবে:

ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX;

16

সবাই যেমন উপরে বলেছে, আপনি সহজেই একটি এফকে মুছতে পারেন। যাইহোক, আমি কেবল লক্ষ্য করেছি যে কোনও সময়ে KEY নিজেই ফেলে দেওয়া প্রয়োজন হতে পারে। শেষের মতো অন্য সূচি তৈরি করতে আপনার যদি কোনও ত্রুটি বার্তা থাকে তবে আমি একই নামের সাথে বোঝাতে চাইছি that সূচক সম্পর্কিত সমস্ত কিছু ফেলে দেওয়া দরকারী হবে।

ALTER TABLE your_table_with_fk
  drop FOREIGN KEY name_of_your_fk_from_show_create_table_command_result,
  drop KEY the_same_name_as_above

10

চুক্তি নাম এবং বিদেশী কী নাম কী তা পরীক্ষা করুন:

SHOW CREATE TABLE table_name;

উভয় চুক্তি নাম এবং বিদেশী কী নাম মুছে ফেলুন:

ALTER TABLE table_name
  DROP FOREIGN KEY the_name_after_CONSTRAINT,
  DROP KEY the_name_after_FOREIGN_KEY;

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


4

বিদেশী কী বাধা পড়ার উপায় এখানে, এটি কার্যকর হবে it টেবিল পরিবর্তন করুন locationlocation_id বিদেশী কী ড্রপ location_ibfk_1;


2

আরে আমি উপরে কিছু ক্রম অনুসরণ করেছি এবং এর কিছু সমাধান পেয়েছি।

SHOW CREATE TABLE footable;

আপনি এফ কে কনস্ট্রেন নামটি পেয়ে যাবেন

ProjectsInfo_ibfk_1

এখন আপনার এই সীমাবদ্ধতাগুলি সরিয়ে ফেলতে হবে। পরিবর্তিত টেবিল কমেন্ট দ্বারা

alter table ProjectsInfo drop foreign key ProjectsInfo_ibfk_1;

তারপরে টেবিলের কলামটি ফেলে দিন,

alter table ProjectsInfo drop column clientId;

1

যদি আপনার টেবিলগুলি InnoDB ইঞ্জিন ব্যবহার করে তবে আপনি সাধারণত এই ত্রুটিটি পান। সেক্ষেত্রে আপনাকে বিদেশী কীটি ফেলে দিতে হবে, এবং তারপরে পরিবর্তিত টেবিলটি করতে হবে এবং কলামটি ড্রপ করতে হবে।

তবে জটিল অংশটি হ'ল আপনি কলামের নামটি ব্যবহার করে বিদেশী কীটি ফেলে দিতে পারবেন না, পরিবর্তে আপনাকে এটি সূচী করতে ব্যবহৃত নামটি সন্ধান করতে হবে। এটির জন্য, নিম্নলিখিত নির্বাচনটি ইস্যু করুন:

টেবিল অঞ্চল তৈরি করুন; এটি আপনাকে একটি সারি দেখাবে, বাম উপরের কোণে + বিকল্পটি ক্লিক করুন, সম্পূর্ণ পাঠ্য রায়ও বোতামটি ক্লিক করুন এবং তারপরে যান ক্লিক করুন here আপনি সূচকের নাম পাবেন, এরকম কিছু:

অঞ্চল অঞ্চল_আইবিএফকে_1 বিদেশি কী (কান্ট্রি_আইডি) দেশকে রেফারেন্স দেয় (আইডি) আপডেট না করে কোন অ্যাকশন ছাড়ুন এখনই একটি ইস্যু করুন:

টেবিলের অঞ্চল পরিবর্তন করুন বিদেশী কী অঞ্চল ছেড়ে দিন_আইবিফক_1;

অথবা

আরও সহজভাবে কেবল টাইপ করুন: - টেবিলের নাম টেবিলের নাম পরিবর্তন করুন বিদেশী কী টেবিলনাম_আইবিফক_1 ;

মনে রাখবেন একমাত্র জিনিসটি আপনার টেবিলের নামের পরে _ibfk_1 যুক্ত করার জন্য: - টেবিলের নাম _ibfk_1


0

আপনি বিদেশী কী কলামটি বাদ দিতে পারবেন না কারণ এটি সারণী থেকে উল্লেখ করা হচ্ছে assignmentStuff। সুতরাং আপনার প্রথমে বিদেশী কী সীমাবদ্ধতা বাদ দেওয়া উচিত assignmentStuff.assignmentIDX

ইতিমধ্যে এখানে অনুরূপ প্রশ্ন করা হয়েছে । আরও তথ্যের জন্য এখানে চেক করুন ।


1
সুতরাং, যেহেতু অ্যাসাইনমেন্ট স্টাফ অ্যাসাইনমেন্টের প্রাথমিক কীটি রেফারেন্স করে, তাই আমি অ্যাসাইনমেন্টের লোকেশন আইডি কলামটি ড্রপ করতে পারি না? এটি এক ধরনের স্বজ্ঞাত বলে মনে হচ্ছে।
ড্র

দেখে মনে হচ্ছে যে আমি কিছু কলামের নাম পরিবর্তন করেছি যাতে আমার উত্তরটি সত্যই বোঝায় না। তার জন্য দুঃখিত ...
রোনাল্ড ওয়াইল্ডেনবার্গ


0

ধাপ 1: show create table vendor_locations;

ধাপ ২: ALTER TABLE vendor_locations drop foreign key vendor_locations_ibfk_1;

এটা আমার জন্য কাজ করে।


0

এই ক্যোয়ারির দ্বারা প্রথমে প্রকৃত সীমাবদ্ধতার নাম পাওয়া দরকার

SHOW CREATE TABLE TABLE_NAME

এই ক্যোয়ারির ফলে বিদেশী কীটির নাম সীমাবদ্ধ হয়ে যাবে, এখন কোয়েরির নীচে এটি বাদ পড়বে।

ALTER TABLE TABLE_NAME DROP FOREIGN KEY COLUMN_NAME_ibfk_1

উপরের সীমাবদ্ধ নামের সর্বশেষ সংখ্যাটি নির্ভর করে যে আপনার টেবিলে কতগুলি বিদেশী কী রয়েছে

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