[SQL] MySQL은 : ERROR 1215 (HY000)는 : 외래 키 제약 조건을 추가 할 수 없습니다
SQLMySQL은 : ERROR 1215 (HY000)는 : 외래 키 제약 조건을 추가 할 수 없습니다
나는 Silberschatz을 읽기 데이터베이스 시스템 개념, 6 버전을 가지고있다. 내가 MySQL을 OS X에 2 장에 나타난 대학 데이터베이스 시스템을 구현하는거야. 하지만 테이블 코스를 만들기와 문제가 있습니다. 테이블 부서 모습처럼
mysql> select * from department
-> ;
+------------+----------+-----------+
| dept_name | building | budget |
+------------+----------+-----------+
| Biology | Watson | 90000.00 |
| Comp. Sci. | Taylor | 100000.00 |
| Elec. Eng. | Taylor | 85000.00 |
| Finance | Painter | 120000.00 |
| History | Painter | 50000.00 |
| Music | Packard | 80000.00 |
| Physics | Watson | 70000.00 |
+------------+----------+-----------+
mysql> show columns from department
-> ;
+-----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------+------+-----+---------+-------+
| dept_name | varchar(20) | NO | PRI | | |
| building | varchar(15) | YES | | NULL | |
| budget | decimal(12,2) | YES | | NULL | |
+-----------+---------------+------+-----+---------+-------+
테이블 코스를 만드는 것은 다음과 같은 오류가 발생합니다.
mysql> create table course
-> (course_id varchar(7),
-> title varchar (50),
-> dept_name varchar(20),
-> credits numeric(2,0),
-> primary key(course_id),
-> foreign key (dept_name) references department);
ERROR 1215 (HY000): Cannot add foreign key constraint
외래 키 제약 조건에 대한 구글을 검색 한 후, 난 그냥 단어 '외래 키 제약 조건'테이블 부서에서 기본 키 컬럼에 존재해야 테이블 과정에서 외래 키 열에서 데이터를 나타내는 것을 배웠습니다. 데이터를 삽입 할 때이 오류를 충족해야한다.
그렇지 않다면, 왜 저자는 나에게 그 SQL 문을 실행할 수 있도록 하는가?
정말 잘못된 SQL 문을 실행하면합니까 나는 일부 데이터를 삽입 한 후 외부 키로 물론 테이블에 DEPT_NAME을 지정할 수 있나요?
편집 : 입력 세트 FOREIGN_KEY_CHECKS = MySQL의에 0> 오류를 수정하지 않습니다.
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2013-09-21 16:02:20 132cbe000 Error in foreign key constraint of table university/course:
foreign key (dept_name) references department):
Syntax error close to:
)
mysql> set foreign_key_checks=0
-> ;
Query OK, 0 rows affected (0.00 sec)
mysql> create table course
-> (course_id varchar(7),
-> title varchar(50),
-> dept_name varchar(20),
-> credits numeric(2,0),
-> primary key(course_id),
-> foreign key (dept_name) references department);
ERROR 1215 (HY000): Cannot add foreign key constraint
해결법
-
==============================
1.다음 CREATE TABLE을위한 FOREIGN KEY의 신택스 구성된다 :
다음 CREATE TABLE을위한 FOREIGN KEY의 신택스 구성된다 :
FOREIGN KEY (index_col_name) REFERENCES table_name (index_col_name,...)
그래서 귀하의 MySQL의 DDL은해야합니다 :
create table course ( course_id varchar(7), title varchar(50), dept_name varchar(20), credits numeric(2 , 0 ), primary key (course_id), FOREIGN KEY (dept_name) REFERENCES department (dept_name) );
또한, 부서 테이블 DEPT_NAME에 있어야 VARCHAR (20)
자세한 정보는 MySQL의 문서에서 찾을 수 있습니다
-
==============================
2.이 모호한 오류 메시지가 도착하면, 당신은 실행하여 자세한 오류를 찾을 수 있습니다
이 모호한 오류 메시지가 도착하면, 당신은 실행하여 자세한 오류를 찾을 수 있습니다
SHOW ENGINE INNODB STATUS;
가장 일반적인 이유는 외래 키, 모두 참조 필드와 외래 키 필드 필요성을 만들 때하는 것이 일치한다는 것이다 :
이 오류의 또 다른 원인은 다음과 같습니다 일부 열이 NOT NULL로 정의하지만 당신은 SET NULL의 조건을 정의했습니다.
-
==============================
3.어쩌면 당신의 DEPT_NAME 열은 서로 다른 문자 집합을 가지고있다.
어쩌면 당신의 DEPT_NAME 열은 서로 다른 문자 집합을 가지고있다.
당신은 하나 또는 둘 다 변경을 시도 할 수 있습니다 :
ALTER TABLE department MODIFY dept_name VARCHAR(20) CHARACTER SET utf8; ALTER TABLE course MODIFY dept_name VARCHAR(20) CHARACTER SET utf8;
-
==============================
4.
foreign key (dept_name) references department
이 구문은 MySQL은 유효하지 않습니다. 대신해야한다 :
foreign key (dept_name) references department(dept_name)
MySQL은 두 번 사용할 수 DEPT_NAME이 필요합니다. 기본 열을 정의하면 일단은 외국 열을 정의하고 있습니다.
-
==============================
5.외부 키가 자신의 테이블에서 기본 키가 아닌 경우이 오류를 얻을 수있다.
외부 키가 자신의 테이블에서 기본 키가 아닌 경우이 오류를 얻을 수있다.
나는 ALTER TABLE을했고, 실수로 열 기본 키 상태를 제거하고이 오류가 발생했습니다.
-
==============================
6.당신이 오류가 있음도 주목할 필요가있을 때 명시 적으로 올바른 테이블의 컬럼과 일치하지 않는 다른 수의 외래 키 컬럼의 유형입니다.
당신이 오류가 있음도 주목할 필요가있을 때 명시 적으로 올바른 테이블의 컬럼과 일치하지 않는 다른 수의 외래 키 컬럼의 유형입니다.
예를 들면 :
alter table schoolPersons add index FKEF5AB5E532C8FBFA (student_id), add constraint FKEF5AB5E532C8FBFA foreign key (student_id) references student (id); ERROR 1215 (HY000): Cannot add foreign key constraint
student_id 필드는 다음과 같이 정의 되었기 때문이었다 :
mysql> desc schoolPersons; +--------------------+------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------------+------------+------+-----+---------+----------------+ | student_id | bigint(20) | YES | | NULL | |
반면 학생 테이블의 id 필드는 다음과 같이 정의 하였다 :
mysql> desc persons; +--------------+----------------------+------+-----+-------------------+-----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+----------------------+------+-----+-------------------+-----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment |
(긴 최대 절전 모드에서 자바에서 생성)을 BIGINT (20)와 호환되지 않습니다 INT (10) 부호 (자바 INT).
-
==============================
7.그냥 외국 제약 조건 '서명'추가
그냥 외국 제약 조건 '서명'추가
`FK` int(11) unsigned DEFAULT NULL,
-
==============================
8.열 유형이 CHAR 또는 VARCHAR 인 경우 두 테이블의 캐릭터 세트를 확인합니다. 나는 문자 집합 = GBK를 사용하지만, 나는 누구의 기본 문자 집합 = UTF8 새 테이블을 만들 수 있습니다. 그래서 캐릭터 세트는 동일하지 않습니다.
열 유형이 CHAR 또는 VARCHAR 인 경우 두 테이블의 캐릭터 세트를 확인합니다. 나는 문자 집합 = GBK를 사용하지만, 나는 누구의 기본 문자 집합 = UTF8 새 테이블을 만들 수 있습니다. 그래서 캐릭터 세트는 동일하지 않습니다.
ERROR 1215 (HY000): Cannot add foreign key constraint
이 같은 캐릭터 세트를 사용하는 것입니다 해결합니다. 예를 들어 UTF8하십시오.
-
==============================
9.다음 코드는 나를 위해 일한
다음 코드는 나를 위해 일한
set @@foreign_key_checks=0; ALTER TABLE `table1` ADD CONSTRAINT `table1_fk1` FOREIGN KEY (`coloumn`) REFERENCES `table2` (`id`) ON DELETE CASCADE;
-
==============================
10.당신이 참조 부분에 사용하고있는 대상 테이블 또는 열이 단순히 존재하지 않는 경우에도이 오류가 발생할 수 있다는 지적이의 가치.
당신이 참조 부분에 사용하고있는 대상 테이블 또는 열이 단순히 존재하지 않는 경우에도이 오류가 발생할 수 있다는 지적이의 가치.
-
==============================
11.나는 누군가가 명시 적으로 알리는 표시되지 않습니다와 나는이 같은 오류 메시지가 있었고, 내 문제는 내가 임시 테이블에 외부 키를 추가하려고 한 것이 었습니다. 설명서에 언급 한 바와 같이 어떤 허용되지 않습니다
나는 누군가가 명시 적으로 알리는 표시되지 않습니다와 나는이 같은 오류 메시지가 있었고, 내 문제는 내가 임시 테이블에 외부 키를 추가하려고 한 것이 었습니다. 설명서에 언급 한 바와 같이 어떤 허용되지 않습니다
(강조 광산)
-
==============================
12.나뿐만 아니라 동일한 문제를 건너 왔어요. 확실하지 왜 작동이 있지만 실제로 작동합니다 : 당신 조회 작성 후 ENGINE INNODB를 추가하십시오.
나뿐만 아니라 동일한 문제를 건너 왔어요. 확실하지 왜 작동이 있지만 실제로 작동합니다 : 당신 조회 작성 후 ENGINE INNODB를 추가하십시오.
mysql> create table course -> (course_id varchar(7), -> title varchar (50), -> dept_name varchar(20), -> credits numeric(2,0), -> primary key(course_id), -> foreign key (dept_name) references department) ENGINE INNODB;
-
==============================
13.이 직접 상황에 정확하게 연결되지 않은 경우에도, 당신이 데이터베이스 테이블을 작성하는 순서를 존중하지 않는 경우가 mstatus 이노 쇼 엔진을 입력 할 때 정확히 같은 오류 출력을 얻을 수 있습니다에 더 독자들에게 도움이 될 수 있습니다; 아직 존재하지 않는 테이블을 참조하는 외국의 제약 조건을 추가하지 않아야 의미한다. 참조 테이블은 이전에를 가리키는 테이블에 존재해야합니다.
이 직접 상황에 정확하게 연결되지 않은 경우에도, 당신이 데이터베이스 테이블을 작성하는 순서를 존중하지 않는 경우가 mstatus 이노 쇼 엔진을 입력 할 때 정확히 같은 오류 출력을 얻을 수 있습니다에 더 독자들에게 도움이 될 수 있습니다; 아직 존재하지 않는 테이블을 참조하는 외국의 제약 조건을 추가하지 않아야 의미한다. 참조 테이블은 이전에를 가리키는 테이블에 존재해야합니다.
테이블 생성 순서는 외래 키 제약 조건에 포함 된 열을 존중하지만하지 않는 경우에도 마찬가지입니다.
-
==============================
14.내 경우 캐릭터 세트에서, 데이터 타입 모든 것은 정확했다. 조사 후 나는 부모 테이블에서 외래 키 컬럼에 인덱스가 없다는 것을 발견했다. 추가되면 문제가 해결되었다.
내 경우 캐릭터 세트에서, 데이터 타입 모든 것은 정확했다. 조사 후 나는 부모 테이블에서 외래 키 컬럼에 인덱스가 없다는 것을 발견했다. 추가되면 문제가 해결되었다.
-
==============================
15.
CONSTRAINT vendor_tbfk_1 FOREIGN KEY (V_CODE) REFERENCES vendor (V_CODE) ON UPDATE CASCADE
이 ...이 될 수있는 방법을 참조하는 열 부분에서 모습이다. (V_code)
from https://stackoverflow.com/questions/18930084/mysql-error-1215-hy000-cannot-add-foreign-key-constraint by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 작업의 상태를 확인할 수 있습니까? (0) | 2020.05.09 |
---|---|
[SQL] 봄의 JdbcTemplate의 기본 SQL을보고? (0) | 2020.05.09 |
[SQL] 어떻게 WHERE 절에 SELECT 문으로 SQL DELETE 문을 작성하는? (0) | 2020.05.09 |
[SQL] ORA-01795에 대한 해결 방법이 있습니까 : 목록에서 표현의 최대 수 1000 오류가? (0) | 2020.05.09 |
[SQL] 당신은 SQL의 경우 - 당시 다른 논리를 가질 수 있습니까? [복제] (0) | 2020.05.09 |