ত্রুটি: ত্রুটি 1005: সারণী তৈরি করতে পারে না (ভুল: 121)


108

আমি যন্ত্রণার আছে forward engineeringwamp সার্ভার মধ্যে আমার MySQL ডেটাবেস .. আমি স্কিমা একটি চিত্র পোষ্ট করতে যাচ্ছিলেন কিন্তু এই আমার প্রথম পোস্ট হিসাবে আমি করতে পারেন না।

নীচে সম্পাদিত স্ক্রিপ্ট ..

use aquaticstar;

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

-- -----------------------------------------------------
-- Table `Students`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Students` ;

CREATE  TABLE IF NOT EXISTS `Students` (
  `id` VARCHAR(10) NOT NULL ,
  `studentName` VARCHAR(45) NOT NULL ,
  `gender` CHAR NOT NULL ,
  `birthDate` DATETIME NOT NULL ,
  `mNo` VARCHAR(10) NOT NULL ,
  `contactName` VARCHAR(45) NOT NULL ,
  `contactEmail` VARCHAR(45) NOT NULL ,
  `contactPhone` INT(10) NOT NULL ,
  `startDate` DATETIME NOT NULL ,
  `remarks` VARCHAR(200) NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `Waiting List`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Waiting List` ;

CREATE  TABLE IF NOT EXISTS `Waiting List` (
  `wait_id` VARCHAR(5) NOT NULL ,
  `name` VARCHAR(45) NULL ,
  `contactName` VARCHAR(45) NULL ,
  `contactPhone` INT(10) NULL ,
  `contactEmail` VARCHAR(45) NULL ,
  `status` CHAR NULL ,
  `remarks` VARCHAR(200) NULL ,
  PRIMARY KEY (`wait_id`) )
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `Schedule`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Schedule` ;

CREATE  TABLE IF NOT EXISTS `Schedule` (
  `lesson_id` VARCHAR(10) NOT NULL ,
  `day` VARCHAR(3) NOT NULL ,
  `branch` VARCHAR(30) NOT NULL ,
  `level` VARCHAR(30) NOT NULL ,
  `time` TIME NOT NULL ,
  `ae` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`lesson_id`) )
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `Link`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Link` ;

CREATE  TABLE IF NOT EXISTS `Link` (
  `link_id` VARCHAR(10) NOT NULL ,
  `id` VARCHAR(10) NOT NULL ,
  `lesson_id` VARCHAR(10) NOT NULL ,
  PRIMARY KEY (`link_id`) ,
  INDEX `id_idx` (`id` ASC) ,
  INDEX `lesson_id_idx` (`lesson_id` ASC) ,
  CONSTRAINT `id`
    FOREIGN KEY (`id` )
    REFERENCES `Students` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `lesson_id`
    FOREIGN KEY (`lesson_id` )
    REFERENCES `Schedule` (`lesson_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `Attendance`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Attendance` ;

CREATE  TABLE IF NOT EXISTS `Attendance` (
  `date` DATETIME NOT NULL ,
  `attendance` VARCHAR(5) NOT NULL ,
  `link_id` VARCHAR(10) NOT NULL ,
  INDEX `link_id_idx` (`link_id` ASC) ,
  CONSTRAINT `link_id`
    FOREIGN KEY (`link_id` )
    REFERENCES `Link` (`link_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


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

-- -----------------------------------------------------
-- Data for table `Students`
-- -----------------------------------------------------
START TRANSACTION;
INSERT INTO `Students` (`id`, `studentName`, `gender`, `birthDate`, `mNo`, `contactName`, `contactEmail`, `contactPhone`, `startDate`, `remarks`) VALUES ('s001', 'Sam Khew', 'm', '12/12/1991', 'nm', 'May Khew', 'may@gmail.com', 0198829387, '12/07/2011', NULL);
INSERT INTO `Students` (`id`, `studentName`, `gender`, `birthDate`, `mNo`, `contactName`, `contactEmail`, `contactPhone`, `startDate`, `remarks`) VALUES ('s002', 'Joe Biden', 'm', '13/03/2003', 'nm', 'Layla Biden', 'layla@gmail.com', 0199283763, '14/05/2011', NULL);
INSERT INTO `Students` (`id`, `studentName`, `gender`, `birthDate`, `mNo`, `contactName`, `contactEmail`, `contactPhone`, `startDate`, `remarks`) VALUES ('s003', 'Bob Builder', 'm', '14/02/2002', 'LK920K', 'Mama Builder', 'mama@yahoo.com', 0167728376, '29/02/2012', NULL);
INSERT INTO `Students` (`id`, `studentName`, `gender`, `birthDate`, `mNo`, `contactName`, `contactEmail`, `contactPhone`, `startDate`, `remarks`) VALUES ('s004', 'Kenny Koh', 'm', '18/02/1999', 'MM992', 'Lisa Koh', 'lk@hotmail.com', 0123160231, '19/01/2012', NULL);
INSERT INTO `Students` (`id`, `studentName`, `gender`, `birthDate`, `mNo`, `contactName`, `contactEmail`, `contactPhone`, `startDate`, `remarks`) VALUES ('s005', 'Jane Doe', 'f', '29/09/1999', 'nm', 'Jackie Doe', 'jackied@gmail.com', 0127736254, '02/03/2012', NULL);
INSERT INTO `Students` (`id`, `studentName`, `gender`, `birthDate`, `mNo`, `contactName`, `contactEmail`, `contactPhone`, `startDate`, `remarks`) VALUES ('s006', 'Lola Lai', 'f', '02/05/2004', 'nm', 'Mark Lai', 'mark@gmail.com', 0198827365, '11/09/2011', NULL);

COMMIT;

-- -----------------------------------------------------
-- Data for table `Schedule`
-- -----------------------------------------------------
START TRANSACTION;
INSERT INTO `Schedule` (`lesson_id`, `day`, `branch`, `level`, `time`, `ae`) VALUES ('sat1_s4', 'Sat', 'Sunway', 'basic', '4pm', 'Aini');
INSERT INTO `Schedule` (`lesson_id`, `day`, `branch`, `level`, `time`, `ae`) VALUES ('sat1_s5', 'Sat', 'Sunway', 'basic', '5pm', 'Aini');
INSERT INTO `Schedule` (`lesson_id`, `day`, `branch`, `level`, `time`, `ae`) VALUES ('sat1_s6', 'Sat', 'Sunway', 'basic', '6pm', 'Aini');
INSERT INTO `Schedule` (`lesson_id`, `day`, `branch`, `level`, `time`, `ae`) VALUES ('sat2_s4', 'Sat', 'Sunway', 'advance', '4pm', 'Nina');
INSERT INTO `Schedule` (`lesson_id`, `day`, `branch`, `level`, `time`, `ae`) VALUES ('sat2_s5', 'Sat', 'Sunway', 'advance', '5pm', 'Nina');
INSERT INTO `Schedule` (`lesson_id`, `day`, `branch`, `level`, `time`, `ae`) VALUES ('sat3_s6', 'Sat', 'Sunway', 'pre-comp', '6pm', 'Marcus');

COMMIT;

-- -----------------------------------------------------
-- Data for table `Link`
-- -----------------------------------------------------
START TRANSACTION;
INSERT INTO `Link` (`link_id`, `id`, `lesson_id`) VALUES ('L001', 's001', 'sat1_s4');
INSERT INTO `Link` (`link_id`, `id`, `lesson_id`) VALUES ('L002', 's002', 'sat1_s5');
INSERT INTO `Link` (`link_id`, `id`, `lesson_id`) VALUES ('L003', 's003', 'sat1_s6');
INSERT INTO `Link` (`link_id`, `id`, `lesson_id`) VALUES ('L004', 's004', 'sat2_s4');
INSERT INTO `Link` (`link_id`, `id`, `lesson_id`) VALUES ('L005', 's005', 'sat1_s5');

COMMIT;

-- -----------------------------------------------------
-- Data for table `Attendance`
-- -----------------------------------------------------
START TRANSACTION;
INSERT INTO `Attendance` (`date`, `attendance`, `link_id`) VALUES ('26/9/2012', '1', NULL);

COMMIT;

তবে আমি এই ত্রুটিটি পেয়েছি:

Executing SQL script in server
ERROR: Error 1005: Can't create table 'aquaticstar.link' (errno: 121)

আমি বুঝতে পারি না কেন। আমাকে কি কেউ সাহায্য করতে পারবেন?


2
আপনার যদি সার্ভারে অ্যাডমিনের অনুমতি থাকে, আপনি ত্রুটি পাওয়ার পরে তত্ক্ষণাত মাইএসকিউএল কমান্ড "শো ইনএনডব স্ট্যাটাস" (বা মাইএসকিউএল 5.5 "ইঞ্জিন ইনোডাব স্ট্যাটাস দেখান") চালিয়ে শুরু করতে পারেন। এই কমান্ডটি লগ সম্পর্কিত তথ্য এবং ত্রুটির বিশদ প্রদর্শন করে। সেখান থেকে আপনি কোথায় এটি ভুল হয়ে যায় তা দেখতে পাবেন
Dorvalla

1
@ ডরভালার উত্তর এটি সমাধান করেছে। প্রকৃতপক্ষে, যখন আপনার INNODB স্থিতি কমান্ডটি চালায় তখন বিশদ ত্রুটির লগটি কলামের LATEST FOREIGN KEY ERRORবিভাগে সঞ্চিত থাকে status
ডেভি

উত্তর:


237

আমি আপনার জন্য দ্রুত অনুসন্ধান করেছি এবং এটি আমাকে এখানে এনেছে । আমি উদ্ধৃতি:

আপনি ইতিমধ্যে অন্য কোথাও ব্যবহৃত নামের সাথে সীমাবদ্ধতা যুক্ত করার চেষ্টা করলে আপনি এই বার্তাটি পাবেন

সীমাবদ্ধতাগুলি পরীক্ষা করতে নিম্নলিখিত এসকিউএল কোয়েরি ব্যবহার করুন:

SELECT
    constraint_name,
    table_name
FROM
    information_schema.table_constraints
WHERE
    constraint_type = 'FOREIGN KEY'
AND table_schema = DATABASE()
ORDER BY
    constraint_name;

সেখানে আরও তথ্যের জন্য অনুসন্ধান করুন বা ত্রুটিটি কোথায় ঘটে তা দেখার চেষ্টা করুন। আমার কাছে একটি বিদেশী কী নিয়ে সমস্যা মনে হচ্ছে।


এই উত্তরটি এ পর্যন্ত সেরা ছিল .. ধন্যবাদ .. সুতরাং 3 টি সীমাবদ্ধতা ছিল তার মধ্যে কী এসেছিল, যার মধ্যে 2 টি একই ... তবে এগুলি একই যে আমি আগে মুছে ফেলা একটি টেবিল থেকে এসেছি? তাই আমি কি করতে পারি?
ব্যবহারকারী1703514

1
এই থ্রেডটি ব্যবহার করে সীমাবদ্ধতা মোছার চেষ্টা করুন, অন্যথায় আপনি এটি পরিবর্তন করে। আমি নিশ্চিত না কীভাবে, কেননা আমি এতে ফ্যামিলির নই, তবে যদি আপনি সীমাবদ্ধতাগুলি কল করতে পারেন তবে আপনি সেগুলিও মুছতে পারেন বা তাদের পরিবর্তন করতে পারেন এটি যৌক্তিক বলে মনে হয়।
Dorvalla

সবচেয়ে সাধারণ আপনি একই বিদেশী কী নামটি দু'বার ব্যবহার করার চেষ্টা করছেন!
ক্ষতি

26

বৈদেশিক কী সীমাবদ্ধতার নামগুলি একটি ডাটাবেসের মধ্যে অনন্য হতে হবে

উপরে ডরভালার উত্তর এবং উপরে উল্লিখিত এই ব্লগ পোস্ট উভয়ই আমাকে নিজের জন্য সমস্যাটি ঠিক করার জন্য সঠিক দিকে ইশারা করেছে; উত্তর থেকে উদ্ধৃত:

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

আমি এটা সম্পর্কে অবগত ছিল না। নীচের স্কিমা অনুসারে আমি আমার বিদেশী কী বাধা নামগুলি পাল্টে দিয়েছি যা রবি অন রেল অ্যাপ্লিকেশনগুলিতেও ব্যবহৃত হবে বলে মনে হয়:

<TABLE_NAME>_<FOREIGN_KEY_COLUMN_NAME>_fk

ওপির টেবিলের Link_lession_id_fkজন্য এটি উদাহরণস্বরূপ হবে।


6

আপনি mysql এ লগইন করতে পারেন এবং টাইপ করতে পারেন

mysql> SHOW INNODB STATUS\G

আপনার কাছে সমস্ত আউটপুট থাকবে এবং ত্রুটিটি কী তা সম্পর্কে আপনার আরও ভাল ধারণা থাকা উচিত।


1
মাইএসকিউএল 5.5 এ, এটি SHOW ENGINE INNODB STATUS। এবং প্রাসঙ্গিক তথ্য পেতে ত্রুটি পেয়ে তাড়াতাড়ি চালনা করতে হবে।
ডেভি

2

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


2

আমি এই ত্রুটির মুখোমুখি হয়েছি (1212) তবে এটি মাইএসকিএল-নির্মিত মধ্যবর্তী টেবিলগুলির কারণে ঘটেছিল যা এতিম হয়েছিল, আমার টেবিলে কোনওরকম বাধা নাম থাকা সত্ত্বেও আমাকে একটি টেবিল পরিবর্তন করতে বাধা দেয়। এক পর্যায়ে, আমার মাইএসকিউএল একটি মাঝারি টেবিলটি ক্র্যাশ করেছে বা ব্যর্থ হয়েছিল (টেবিলের নাম # স্কোয়েল- দিয়ে শুরু হবে) যা আমাকে একটি ত্রুটির সাথে উপস্থাপন করে যেমন: টেবিল '# স্কিএল- তৈরি করতে পারে না' (ভুল 121) যখন নির্দিষ্ট বাধা নামের সাথে একটি ALTER TABLE চালানোর চেষ্টা করা হয়।

Http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.html এ থাকা দস্তাবেজ অনুসারে আপনি এই অনাথ টেবিলগুলির সাথে অনুসন্ধান করতে পারেন:

SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE '%#sql%';

আমি যে সংস্করণটির সাথে কাজ করছিলাম তার 5.1 ছিল, তবে উপরের কমান্ডটি কেবলমাত্র সংস্করণ> = 5.6 এ কাজ করে (ম্যানুয়ালটি 5.5 বা তার আগের সংস্করণে কাজ করা সম্পর্কে ভুল, কারণ INNODB_SYS_TABLES যেমন সংস্করণগুলিতে নেই)। কমান্ড লাইনে আমার মাইএসকিএল ডেটা ডিরেক্টরি অনুসন্ধান করে আমি অনাথ অস্থায়ী টেবিলটি (যা বার্তায় নামযুক্তটির সাথে মেলে না) সন্ধান করতে সক্ষম হয়েছিলাম:

find . -iname '#*'

# Sql-9ad_15.frm এর মতো ফাইলের নামটি আবিষ্কার করার পরে আমি সেই অনাথ টেবিলটি মাইএসকিউএল এ ফেলে দিতে সক্ষম হয়েছি:

USE myschema;
DROP TABLE `#mysql50##sql-9ad_15`;

এটি করার পরে আমি তারপরে আমার ALTER TABLE সফলভাবে চালাতে সক্ষম হয়েছি।

সম্পূর্ণতার জন্য, সংযুক্ত মাইএসকিউএল ডকুমেন্টেশন অনুসারে, "# মাইকিউএল 50 # উপসর্গ মাইএসকিউএলকে মাইএসকিউএল 5.1-এ প্রবর্তিত ফাইলের নাম নিরাপদ এনকোডিং উপেক্ষা করতে বলেছে।"


1

আপনি যদি দ্রুত স্থির করতে চান তবে আবার ফরওয়ার্ড ইঞ্জিনিয়ার এবং "জেনারেট করুন ড্রপ স্কেমা" বিকল্পটি পরীক্ষা করে এগিয়ে যান।

আমি ধরে নিয়েছি ডাটাবেসটিতে ডেটা নেই, সুতরাং এটি ফেলে দেওয়ার ফলে কোনও প্রভাব পড়বে না।


0

আমি কিছু লক্ষ্য করেছি যে আমার ডেটাবেজে আমার "অন্যান্য_ড্যাটাসবেস" এবং "অন্যান্য_ডাটাবেস" ছিল। এই সমস্যাটি ঘটায় কারণ আমার অন্যান্য ডাটাবেসে আমার একই রেফারেন্স ছিল যা এই রহস্যজনক ত্রুটির কারণ হয়েছিল!


-3
mysql> SHOW ENGINE INNODB STATUS;

তবে আমার ক্ষেত্রে কেবল এই উপায়ে সহায়তা করতে পারে:
১. বর্তমান ডিবি ব্যাকআপ করুন
২. ডিবি ফেলে দিন (সমস্ত টেবিল নয়, তবে ডিবি)
৩. ডিবি তৈরি করুন (আপনার এখনও চালিত রয়েছে তা পরীক্ষা করুন)
৪. ব্যাকআপ থেকে ডিবি পুনরুদ্ধার করুন

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