মাইএসকিউএল বিদেশী কী সীমাবদ্ধতা যোগ করতে পারে না


314

সুতরাং আমি প্রকল্পের প্রয়োজনীয়তা হিসাবে আমার ডাটাবেসে বিদেশী কী বাধাগুলি যুক্ত করার চেষ্টা করছি এবং এটি প্রথম টেবিলে দু'বার বিভিন্ন টেবিলে কাজ করেছে, তবে আমার দুটি টেবিল রয়েছে যাতে বিদেশী কী সীমাবদ্ধতা যুক্ত করার চেষ্টা করার সময় আমি একটি ত্রুটি পেয়েছি। আমি যে ত্রুটি বার্তাটি পাই তা হ'ল:

ত্রুটি 1215 (HY000): বিদেশী কী সীমাবদ্ধতা যুক্ত করতে পারে না

এই এসকিউএলটি আমি টেবিলগুলি তৈরি করতে ব্যবহার করছি, দুটি আপত্তিজনক টেবিলগুলি Patientএবং Appointment

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=1;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

CREATE SCHEMA IF NOT EXISTS `doctorsoffice` DEFAULT CHARACTER SET utf8 ;
USE `doctorsoffice` ;

-- -----------------------------------------------------
-- Table `doctorsoffice`.`doctor`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `doctorsoffice`.`doctor` ;

CREATE  TABLE IF NOT EXISTS `doctorsoffice`.`doctor` (
  `DoctorID` INT(11) NOT NULL AUTO_INCREMENT ,
  `FName` VARCHAR(20) NULL DEFAULT NULL ,
  `LName` VARCHAR(20) NULL DEFAULT NULL ,
  `Gender` VARCHAR(1) NULL DEFAULT NULL ,
  `Specialty` VARCHAR(40) NOT NULL DEFAULT 'General Practitioner' ,
  UNIQUE INDEX `DoctorID` (`DoctorID` ASC) ,
  PRIMARY KEY (`DoctorID`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;


-- -----------------------------------------------------
-- Table `doctorsoffice`.`medicalhistory`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `doctorsoffice`.`medicalhistory` ;

CREATE  TABLE IF NOT EXISTS `doctorsoffice`.`medicalhistory` (
  `MedicalHistoryID` INT(11) NOT NULL AUTO_INCREMENT ,
  `Allergies` TEXT NULL DEFAULT NULL ,
  `Medications` TEXT NULL DEFAULT NULL ,
  `ExistingConditions` TEXT NULL DEFAULT NULL ,
  `Misc` TEXT NULL DEFAULT NULL ,
  UNIQUE INDEX `MedicalHistoryID` (`MedicalHistoryID` ASC) ,
  PRIMARY KEY (`MedicalHistoryID`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;


-- -----------------------------------------------------
-- Table `doctorsoffice`.`Patient`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `doctorsoffice`.`Patient` ;

CREATE  TABLE IF NOT EXISTS `doctorsoffice`.`Patient` (
  `PatientID` INT unsigned NOT NULL AUTO_INCREMENT ,
  `FName` VARCHAR(30) NULL ,
  `LName` VARCHAR(45) NULL ,
  `Gender` CHAR NULL ,
  `DOB` DATE NULL ,
  `SSN` DOUBLE NULL ,
  `MedicalHistory` smallint(5) unsigned NOT NULL,
  `PrimaryPhysician` smallint(5) unsigned NOT NULL,
  PRIMARY KEY (`PatientID`) ,
  UNIQUE INDEX `PatientID_UNIQUE` (`PatientID` ASC) ,
  CONSTRAINT `FK_MedicalHistory`
    FOREIGN KEY (`MEdicalHistory` )
    REFERENCES `doctorsoffice`.`medicalhistory` (`MedicalHistoryID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `FK_PrimaryPhysician`
    FOREIGN KEY (`PrimaryPhysician` )
    REFERENCES `doctorsoffice`.`doctor` (`DoctorID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `doctorsoffice`.`Appointment`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `doctorsoffice`.`Appointment` ;

CREATE  TABLE IF NOT EXISTS `doctorsoffice`.`Appointment` (
  `AppointmentID` smallint(5) unsigned NOT NULL AUTO_INCREMENT ,
  `Date` DATE NULL ,
  `Time` TIME NULL ,
  `Patient` smallint(5) unsigned NOT NULL,
  `Doctor` smallint(5) unsigned NOT NULL,
  PRIMARY KEY (`AppointmentID`) ,
  UNIQUE INDEX `AppointmentID_UNIQUE` (`AppointmentID` ASC) ,
  CONSTRAINT `FK_Patient`
    FOREIGN KEY (`Patient` )
    REFERENCES `doctorsoffice`.`Patient` (`PatientID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `FK_Doctor`
    FOREIGN KEY (`Doctor` )
    REFERENCES `doctorsoffice`.`doctor` (`DoctorID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `doctorsoffice`.`InsuranceCompany`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `doctorsoffice`.`InsuranceCompany` ;

CREATE  TABLE IF NOT EXISTS `doctorsoffice`.`InsuranceCompany` (
  `InsuranceID` smallint(5) NOT NULL AUTO_INCREMENT ,
  `Name` VARCHAR(50) NULL ,
  `Phone` DOUBLE NULL ,
  PRIMARY KEY (`InsuranceID`) ,
  UNIQUE INDEX `InsuranceID_UNIQUE` (`InsuranceID` ASC) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `doctorsoffice`.`PatientInsurance`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `doctorsoffice`.`PatientInsurance` ;

CREATE  TABLE IF NOT EXISTS `doctorsoffice`.`PatientInsurance` (
  `PolicyHolder` smallint(5) NOT NULL ,
  `InsuranceCompany` smallint(5) NOT NULL ,
  `CoPay` INT NOT NULL DEFAULT 5 ,
  `PolicyNumber` smallint(5) NOT NULL AUTO_INCREMENT ,
  PRIMARY KEY (`PolicyNumber`) ,
  UNIQUE INDEX `PolicyNumber_UNIQUE` (`PolicyNumber` ASC) ,
  CONSTRAINT `FK_PolicyHolder`
    FOREIGN KEY (`PolicyHolder` )
    REFERENCES `doctorsoffice`.`Patient` (`PatientID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `FK_InsuranceCompany`
    FOREIGN KEY (`InsuranceCompany` )
    REFERENCES `doctorsoffice`.`InsuranceCompany` (`InsuranceID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

USE `doctorsoffice` ;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

উত্তর:


778

নির্দিষ্ট ত্রুটিটি এটির জন্য অনুসন্ধান করুন:

SHOW ENGINE INNODB STATUS;

এবং LATEST FOREIGN KEY ERRORবিভাগে দেখুন।

শিশু কলামের জন্য ডেটা ধরণের অবশ্যই পিতামাতার কলামের সাথে অবশ্যই মিলবে। উদাহরণস্বরূপ, যেহেতু medicalhistory.MedicalHistoryIDএকটি একটি INT, Patient.MedicalHistoryএছাড়াও একটি হতে হবে, একটি INTনয় SMALLINT

এছাড়াও, set foreign_key_checks=0ডিডিএল চালানোর আগে আপনার ক্যোয়ারী চালানো উচিত যাতে আপনি প্রাসঙ্গিক শিশু টেবিলগুলির আগে সমস্ত পিতামাতা সারণী তৈরি করার পরিবর্তে স্বেচ্ছাসেবীভাবে সারণীগুলি তৈরি করতে পারেন।


3
ধন্যবাদ, উভয় ডেটা ধরণের অসঙ্গতি এবং বিদেশী_কি_চেকগুলি সমস্যার সমাধান করেছে!
জোশুয়ায়েগ্লার্ক

30
আমার জন্য টেবিলগুলিতে একটি পৃথক জোটের কারণে ঘটেছিল, একজনের ইউটিএফ -8 এবং অন্যটি লাতিন 1 ছিল।
ug_

6
আমার প্রকার এবং দৈর্ঘ্য মিলে যাওয়ার পরেও এটি একটি স্বাক্ষরযুক্ত INT হওয়ায় আমি "স্বাক্ষরবিহীন" পরীক্ষা করে দেখেছি কিনা তাও নিশ্চিত করতে হয়েছিল।
টিম্বব্রাউন

1
আমার টেবিলগুলি স্বয়ংক্রিয়ভাবে মাইআইএসএএম ইঞ্জিন দিয়ে তৈরি করা হয়েছিল! ধন্যবাদ আইকে।
ক্যাপ্টেন হাইপারটেক্সট

3
ধন্যবাদ। আমি set nullমুছতে চেষ্টা করছিলাম , কিন্তু কলামটি ছিল not null
ম্যাট

142

আমি একটি ক্ষেত্র "স্বাক্ষরবিহীন" এবং অন্যটি নয় হিসাবে সেট করেছিলাম। আমি দু'টি কলামই স্বাক্ষর না করে সেট করেছিলাম এটি কাজ করে।


Lol একই। মাইএসকিউএল এই ধরণের স্টাফগুলিতে পরিচালনা করতে আরও সুনির্দিষ্ট ত্রুটি ব্যবহার করতে পারে।
ডেভ

81
  • ইঞ্জিন একই হওয়া উচিত InnoDB
  • ডেটাটাইপ একই এবং একই দৈর্ঘ্য সহ হওয়া উচিত। উদাহরণস্বরূপ VARCHAR (20)
  • কোলেশন কলামগুলির চরসেট একই হওয়া উচিত। উদাহরণস্বরূপ utf8
    ওয়াচআউট: আপনার টেবিলগুলির একই সমষ্টি রয়েছে, তবুও কলামগুলিতে আলাদা আলাদা থাকতে পারে।
  • অনন্য - বৈদেশিক কীতে উল্লেখযোগ্য ক্ষেত্রটি উল্লেখ করা উচিত যা রেফারেন্স সারণীতে অনন্য (সাধারণত প্রাথমিক কী)

1
সর্বকালের সেরা উত্তর, প্রায় সব কিছু চেষ্টা করার পরে, দেখা গেল যে আমি স্পষ্টভাবে uniqueরেফারেন্স টেবিল কলামে যুক্ত করতে চাই যদিও এটি একটি Primary Key!!
ইয়াহিয়া

হ্যাঁ, সর্বকালের সেরা উত্তর ... বিশেষ প্রথম পয়েন্টে! আমার ক্ষেত্রে আমি মাইগ্রেশন করেছি (2.5.14 বুক করা 2.7.2 বুক করা হয়েছে), যেখানে মাইগ্রেশন স্ক্রিপ্টটি ডাটাবেস ইঞ্জিন পরিবর্তন করে না, তাই নতুন টেবিল তৈরি করার সময় আমি এই ত্রুটিটি পেয়েছি।
বার্নহার্ড

আমাকেও উত্তর দিন।
ইঞ্জিনিয়ার

কীভাবে চেক / পরিবর্তন করবেন তার টিপস সহ আরও দুর্দান্ত aw আমার জন্য তা একটি কলাম পর্যায়ের কোলেশন পার্থক্য ছিল এবং এই আমাকে ফিক্স দিয়েছেন (ধারণা জন্য ধন্যবাদ!): Stackoverflow.com/questions/1294117/...
sjgp

18

- আপনার প্রাথমিক কী একই ধরনের ব্যবহারের চেষ্টা int- এ (11) - বিদেশী কী অন - smallint (5) পাশাপাশি -।

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


mysql> foos (বার_আইডি) -এ অনন্য সূচক সূচক_বার_আইডি তৈরি করুন; ... mysql> টেবিল foos পরিবর্তন সীমাবদ্ধ সূচক_বার_আইডি বিদেশী কী (বার_আইডি) রেফারেন্স বার (আইডি) যোগ করুন; sixarm.com/about/…
কুকি কোডার

11

নিশ্চিত করুন যে দুটি টেবিলের জন্য অক্ষর এনকোডিং এবং কোলেশন একই।

আমার নিজের ক্ষেত্রে, একটি সারণী ব্যবহার করছিল utf8এবং অন্যটি ব্যবহার করছিল latin1

আমার আরেকটি কেস হয়েছে যেখানে এনকোডিং একই তবে কোলিশনটি আলাদা। একে utf8_general_ciঅপরকেutf8_unicode_ci

আপনি একটি টেবিলের জন্য এনকোডিং এবং কোলেশন সেট করতে এই কমান্ডটি চালাতে পারেন।

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

আমি আশা করি এটা কারো সাহায্যে লাগবে.


সুন্দর একটি @ অ্যাডগোকে, দুর্দান্ত উত্তর
এডউইন

7

সারণি বিতে একটি বিদেশী কী সেট করতে আপনাকে অবশ্যই টেবিল এতে একটি KEY সেট করতে হবে A.

টেবিল এ: আইএনডিএক্স id( id)

এবং তারপরে বি টেবিলে,

CONSTRAINT `FK_id` FOREIGN KEY (`id`) REFERENCES `table-A` (`id`)

আপনি ঠিক কী বলছেন তা আমি নিশ্চিত নই, তবে আমি দেখতে পেলাম যে আমার বাক্য গঠনটি ভুল ছিল। আমি করছিলাম: টেবিল এয়ারক্রাফ্ট সীমাবদ্ধকরণ fk_somehting_unique বিদেশী কী (অপারেটর_আইডি) রেফারেন্স সংস্থা যোগ করুন, তবে করা উচিত ছিল: পরিবর্তন টেবিল বিমানগুলি সীমাবদ্ধতা fk_somehting_unique বিদেশী কী (অপারেটর_আইডি) রেফারেন্স সংস্থা (আইডি) যুক্ত করুন ;
মাইকেল কক্সন

7

আমার একই সমস্যা ছিল এবং সমাধানটি খুব সহজ ছিল। সমাধান: সারণিতে ঘোষিত বিদেশী কীগুলি নালার জন্য সেট করা উচিত নয়।

রেফারেন্স: আপনি যদি একটি সেট নাল ক্রিয়া নির্দিষ্ট করে থাকেন তবে নিশ্চিত হয়ে নিন যে আপনি শিশু টেবিলে কলামগুলি নাল হিসাবে ঘোষণা করেন নি। ( রেফ )


4

নিম্নলিখিত নিয়মগুলি পরীক্ষা করুন:

  • সারণির নামের জন্য নামগুলি সঠিকভাবে দেওয়া হচ্ছে কিনা তা প্রথমে পরীক্ষা করে দেখুন

  • দ্বিতীয় ডান তথ্য টাইপ বিদেশী চাবি দিতে?


4

উভয় টেবিল InnoDB ফর্ম্যাটে আছে তা দয়া করে নিশ্চিত করুন। এমনকি যদি কোনও মাইআইএসএএম ফর্ম্যাটে থাকে তবে বিদেশী কী বাধা কাজ করবে না।

এছাড়াও, আরেকটি বিষয় হ'ল উভয় ক্ষেত্র একই ধরণের হওয়া উচিত। একটি যদি আইএনটি হয় তবে অন্যটিও আইএনটি হওয়া উচিত। একটি যদি ভোর্চার হয়, অন্যটিরটিও ভিআচআরআর ইত্যাদি হওয়া উচিত etc.


3

আমি সমস্যার মুখোমুখি হয়েছি এবং ডাটা টাইপগুলি হুবহু মিলেছে কিনা তা নিশ্চিত করে এটি সমাধান করতে সক্ষম হয়েছি।

সীমাবদ্ধতা যোগ করার জন্য আমি সিকোয়েলপ্রো ব্যবহার করছিলাম এবং এটি ডিফল্টরূপে স্বাক্ষরবিহীন হিসাবে প্রাথমিক কী তৈরি করছিল।


2

আপনার উভয় টেবিল কলামে সাইন ইন পরীক্ষা করুন। যদি রেফারিং টেবিল কলামটি স্বাক্ষরিত হয় তবে রেফারেন্সযুক্ত টেবিল কলামটিও স্বাক্ষর করা উচিত।


1

দ্রষ্টব্য: আমি যখন ডাটাবেসে কিছু গবেষণা ও উন্নয়ন করছিলাম তখন নীচের টেবিলগুলি কোনও সাইট থেকে নেওয়া হয়েছিল। সুতরাং নামকরণের সম্মেলনটি যথাযথ নয়।

আমার জন্য সমস্যাটি ছিল, আমার পিতামাতার টেবিলটিতে আমি তৈরি করছি তার চেয়ে আলাদা চরিত্র সেট ছিল।

মূল সারণী (পণ্যাদি)

products | CREATE TABLE `products` (
  `productCode` varchar(15) NOT NULL,
  `productName` varchar(70) NOT NULL,
  `productLine` varchar(50) NOT NULL,
  `productScale` varchar(10) NOT NULL,
  `productVendor` varchar(50) NOT NULL,
  `productDescription` text NOT NULL,
  `quantityInStock` smallint(6) NOT NULL,
  `buyPrice` decimal(10,2) NOT NULL,
  `msrp` decimal(10,2) NOT NULL,
  PRIMARY KEY (`productCode`),
  KEY `productLine` (`productLine`),
  CONSTRAINT `products_ibfk_1` FOREIGN KEY (`productLine`) REFERENCES `productlines` (`productLine`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

চাইল্ড টেবিল যা সমস্যা ছিল (PRICE_LOGS)

price_logs | CREATE TABLE `price_logs` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `productCode` varchar(15) DEFAULT NULL,
  `old_price` decimal(20,2) NOT NULL,
  `new_price` decimal(20,2) NOT NULL,
  `added_on` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `productCode` (`productCode`),
  CONSTRAINT `price_logs_ibfk_1` FOREIGN KEY (`productCode`) REFERENCES `products` (`productCode`) ON DELETE CASCADE ON UPDATE CASCADE
);

রূপান্তরিত

price_logs | CREATE TABLE `price_logs` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `productCode` varchar(15) DEFAULT NULL,
  `old_price` decimal(20,2) NOT NULL,
  `new_price` decimal(20,2) NOT NULL,
  `added_on` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `productCode` (`productCode`),
  CONSTRAINT `price_logs_ibfk_1` FOREIGN KEY (`productCode`) REFERENCES `products` (`productCode`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

1

আমার সমস্যাটি হ'ল আমি অন্যান্য টেবিলগুলির আগে সম্পর্কের টেবিলটি তৈরি করার চেষ্টা করছিলাম!


SET foreign_key_checks = 0;
লিগি

0

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

create table company_life_cycle__history -- (M-M)
(
company_life_cycle_id tinyint unsigned not null,
Foreign Key (company_life_cycle_id) references company_life_cycle(id) ON DELETE    CASCADE ON UPDATE CASCADE,
company_id MEDIUMINT unsigned not null,
Foreign Key (company_id) references company(id) ON DELETE CASCADE ON UPDATE CASCADE,
activity_on date NOT NULL,
PRIMARY KEY pk_company_life_cycle_history (company_life_cycle_id, company_id,activity_on),
created_on datetime DEFAULT NULL,
updated_on datetime DEFAULT NULL,
created_by varchar(50) DEFAULT NULL,
updated_by varchar(50) DEFAULT NULL
);

0

বিভিন্ন টেবিলের জন্য দুটি বিদেশী কীতে একই কী নামের সাথে আমার একই রকম ত্রুটি ছিল! আমি কীগুলির নাম পরিবর্তন করেছি এবং ত্রুটিটি চলে গেছে)


0

একটি অনুরূপ ত্রুটি ছিল, তবে আমার ক্ষেত্রে আমি পিকেটিকে অটো_সংশোধন হিসাবে घोषित করতে অনুপস্থিত ছিল।

কেবল ক্ষেত্রে এটি কারও পক্ষে সহায়ক হতে পারে


0

আমি একই ত্রুটি পেয়েছি। আমার ক্ষেত্রে কারণ ছিল:

  1. আমি পুরো ডাটাবেস অনুলিপি করে phpmyadmin এর মাধ্যমে একটি ডাটাবেসের ব্যাকআপ তৈরি করেছি।
  2. পুরাতন ডিবি এটি অন-নির্বাচিত করে একই নামে আমি একটি নতুন ডিবি তৈরি করেছি।
  3. আপডেট হওয়া সারণী এবং ডেটা তৈরি করতে আমি একটি এসকিউএল স্ক্রিপ্ট শুরু করেছি।
  4. আমি ত্রুটি পেয়েছি। এছাড়াও যখন আমি বিদেশী_কি_চেকগুলি অক্ষম করি। যথেষ্ট পরিমাণে ডাটাবেস সম্পূর্ণ খালি ছিল।

কারণটি ছিল: যেহেতু আমি নামান্তরিত ডাটাবেসে কিছু বিদেশী কী তৈরি করতে phpmyadmin ব্যবহার করেছি - বিদেশী কীগুলি যেখানে একটি ডাটাবেস নাম উপসর্গ দিয়ে তৈরি করা হয়েছিল তবে ডাটাবেসের নাম উপসর্গটি আপডেট হয়নি। সুতরাং এখনও সদ্য নির্মিত ডিবিতে ইঙ্গিত করে ব্যাকআপ-ডিবিতে উল্লেখ রয়েছে।


0

আমার সমাধান সম্ভবত কিছুটা বিব্রতকর এবং কেন এই পোস্টগুলির পরিবর্তে আপনার সামনে যা আছে তা আপনার মাঝে মাঝে কেন তাকানো উচিত তার কাহিনীটি বলে:

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


0

এই ত্রুটির আরও একটি কারণ হ'ল যখন আপনার টেবিল বা কলামগুলিতে সংরক্ষিত কীওয়ার্ড থাকে :

কখনও কখনও কেউ এগুলি ভুলে যায়।


0

আমার ক্ষেত্রে, একটি সিনট্যাক্স ত্রুটি ছিল যা কোয়েরিটি চালানোর পরে মাইএসকিউএল কনসোল দ্বারা সুস্পষ্টভাবে জানানো হয়নি। তবে SHOW ENGINE INNODB STATUSকমান্ডের LATEST FOREIGN KEY ERRORবিভাগ জানিয়েছে,

  Syntax error close to:

  REFERENCES`role`(`id`) ON DELETE CASCADE) ENGINE = InnoDB DEFAULT CHARSET = utf8

আমি এর মধ্যে একটি হোয়াইটস্পেস ছেড়ে ছিল REFERENCESএবং roleএটি কাজ করা হয়।


0

আমার জন্য এটি ছিল - আপনি যদি বর্তমান ডিবি উল্লেখ করে কোনও বর্তমান ডিবি-র জন্য কোনও এফকে তৈরি করেন আপনি বর্তমান ডিবি টেবিলের উপসর্গটি বাদ দিতে পারবেন না:

USE currrent_db;
ALTER TABLE other_db.tasks ADD CONSTRAINT tasks_fk FOREIGN KEY (user_id) REFERENCES currrent_db.users (id);

যদি আমি "currrent_db" বাদ দিই। ব্যবহারকারীদের টেবিলের জন্য, আমি এফকে ত্রুটি পেয়েছি। আকর্ষণীয় যে ইনোডব স্ট্যাটাস ইঞ্জিন প্রদর্শন করে; এই ক্ষেত্রে কিছুই দেখায় না।


-1

আমি তখন এই একই সমস্যা ছিল আমি উভয় পিতা বা মাতা এবং শিশু সারণিতে InnoDB যেমন ইঞ্জিন নাম সংশোধন এবং রেফারেন্স ক্ষেত্র নাম সংশোধন অজানা কী ( c_id) তথ্যসূত্র x9o_parent_table( c_id)
তারপর, এটা কাজ করে জরিমানা এবং টেবিল সঠিকভাবে ইনস্টল করা হয়। এটি কারওর জন্য পূর্ণ ব্যবহার হবে।

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