오류: 오류 1005: 테이블을 만들 수 없습니다(errno: 121)
에 문제가 있다forward engineering
MySQL 데이터베이스를 WAMP 서버로 변환합니다.스키마 이미지를 올리려고 했는데 처음 올린 글이라 못 올려요.
실행한 스크립트는 다음과 같습니다.
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)
이유를 알 수가 없어요.누가 나를 도와줄 수 있나요?
당신을 찾아 헤맸고, 그래서 여기로 데려왔어요.견적:
다른 곳에서 이미 사용되고 있는 이름의 제약 조건을 추가하려고 하면 이 메시지가 나타납니다.
제약 조건을 확인하려면 다음 SQL 쿼리를 사용합니다.
SELECT
constraint_name,
table_name
FROM
information_schema.table_constraints
WHERE
constraint_type = 'FOREIGN KEY'
AND table_schema = DATABASE()
ORDER BY
constraint_name;
여기에서 자세한 내용을 찾거나 오류가 발생한 위치를 확인하십시오.외국 열쇠에 문제가 있는 것 같네요
외부 키 제약 조건 이름은 데이터베이스 내에서 고유해야 함
@Dorvalla의 답변과 위에서 언급한 이 블로그 투고는 모두 문제를 스스로 해결하기 위한 올바른 방향을 제시해 주었습니다.후자의 말을 인용하면 다음과 같습니다.
작성하려는 테이블에 외부 키 제약 조건이 포함되어 있고 해당 제약 조건에 대해 사용자 자신의 이름을 지정한 경우, 데이터베이스 내에서 고유해야 합니다.
그건 몰랐습니다.Ruby on Rails 어플리케이션에서도 사용되는 것으로 보이는 다음 스키마에 따라 외부 키 제약명을 변경했습니다.
<TABLE_NAME>_<FOREIGN_KEY_COLUMN_NAME>_fk
OP 테이블은 다음과 같습니다.Link_lession_id_fk
,예를들면.
mysql에 로그인하여 다음을 입력할 수 있습니다.
mysql> SHOW INNODB STATUS\G
모든 출력이 표시되므로 오류가 무엇인지 더 잘 알 수 있습니다.
이 에러(errno 121)에 직면했습니다만, 그 원인은 mysql이 작성한 중간 테이블이 고립되어 있기 때문에, 이러한 제약조건명이 테이블 전체에 존재하지 않아도 테이블을 변경할 수 없었습니다.어느 시점에서 MySQL이 크래시되거나 중간 테이블(#sql-로 시작하는 테이블 이름)을 정리하지 못했습니다.이것에 의해, 특정의 제약 조건으로 ALTER TABLE을 실행하려고 하면, 「#sql-」(errno 121)이라고 하는 에러가 표시됩니다.
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에서만 작동합니다(INNODB_SYS_TABLES는 존재하지 않기 때문에 5.5 이전 버전에서는 매뉴얼이 올바르지 않습니다).명령줄에서 mysql 데이터 디렉토리를 검색하여 고립된 임시 테이블(메시지와 일치하지 않음)을 찾을 수 있었습니다.
find . -iname '#*'
#sql-9ad_15.frm과 같은 파일 이름을 발견한 후 MySQL에서 분리된 테이블을 삭제할 수 있었습니다.
USE myschema;
DROP TABLE `#mysql50##sql-9ad_15`;
그 후, ALTER TABLE을 정상적으로 실행할 수 있었습니다.
완전성을 위해 링크된 MySQL 문서에 따르면 "#mysql50# 접두사는 MySQL 5.1에서 도입된 파일 이름 안전 인코딩을 무시하도록 MySQL에 알려줍니다."
일부 테이블에 외부 키 정의가 있고 외부 키 이름이 다른 외부 키로 사용되는 경우 이 오류가 발생합니다.
신속하게 수정하려면 Forward Engineer를 다시 전송하고 "DROP SCHEMA 생성" 옵션을 선택한 후 계속 진행하십시오.
데이터베이스에는 데이터가 포함되어 있지 않기 때문에 폐기해도 영향이 없을 것 같습니다.
제가 발견한 것은 제 데이터베이스에 "other_database"와 "Other_Database"가 있다는 것입니다.다른 데이터베이스에서도 같은 참조를 하고 있기 때문에, 이 문제가 발생했기 때문에, 라고 하는 알 수 없는 에러가 발생했습니다.
mysql> SHOW ENGINE INNODB STATUS;
하지만 내 경우 이 방법만이 도움이 될 수 있습니다.
1. DB1을 합니다. DB를 사용합니다.
2.테이블은 를 합니다. DB(DB)
3 작성(확인) 3. DB ( 。
합니다. DB
언급URL : https://stackoverflow.com/questions/12623651/error-error-1005-cant-create-table-errno-121
'programing' 카테고리의 다른 글
PHP 재귀 함수가 있는 디렉터리의 모든 파일 및 폴더 나열 (0) | 2022.10.02 |
---|---|
인덱싱이 'C'에서 0으로 시작하는 이유는 무엇입니까? (0) | 2022.10.02 |
VueJ에서 "개발 모드" 주의 사용 안 함s (0) | 2022.10.02 |
'127.0.0.1'(10061)(2003)의 MySQL 서버에 연결할 수 없음 (0) | 2022.10.02 |
HTML5에서 iPad Mini 검출 (0) | 2022.10.02 |