오류 코드: 1215.외부 키 제약 조건(외부 키)을 추가할 수 없습니다.
CREATE DATABASE my_db;
CREATE TABLE class (
classID int NOT NULL AUTO_INCREMENT,
nameClass varchar(255),
classLeader varchar(255),
FOREIGN KEY (classLeader) REFERENCES student(studentID),
PRIMARY KEY (classID));
CREATE TABLE student (
studentID int NOT NULL AUTO_INCREMENT,
lastName varchar(255),
firstName varchar(255),
classID int,
FOREIGN KEY (classID) REFERENCES class(classID),
PRIMARY KEY (studentID));
DBMS에서 오류를 확인할 수 있도록 외부 키를 사용하여 테이블 간의 데이터 일관성을 유지하려고 합니다만, 어떤 이유로 그렇게 할 수 없는 것 같습니다.무엇이 잘못되었고 대안이 있습니까?또한 외부 키가 있는 테이블을 채울 때 외부 키로 예약된 필드를 채울 수 없습니다.또한, 외국 키는 키로 간주됩니까?
가장 가능성이 높은 문제는 다음 행입니다.
FOREIGN KEY (classLeader) REFERENCES student(studentID),
classLeader의 데이터 유형은 VARCHAR(255)입니다.참조된 열의 데이터 유형과 일치해야 합니다.student.studentID
고물론그리, 그.student
해야 하고, 테블은존하고야그, 고리해재이.studentID
, 열은존야하며해재,하,studentID
열은 학생 테이블의 기본 키여야 합니다(MySQL에서는 기본 키가 아닌 고유 키이거나 인덱스만 있을 수 있습니다).
어쨌든여누것다출다력니입의음은락된의 입니다.SHOW CREATE TABLE student;
데이터 유형이 일치하지 않습니다.
그classLeader VARCHAR(255)
에▁key에 대한 키가 될 수 .studentID INT
.
두 열의 데이터 유형이 일치해야 합니다.
는 다으로인이발생다니합오류가해에서 발생합니다.FOREIGN KEY (classLeader) REFERENCES student(studentID)
의 데이터 studentID
그리고.classLeader
키키.기본 키 열과 외부 키 열의 데이터 유형이 같아야 합니다.
MySQL 사이트에서:
외부 키와 참조 키의 해당 열은 유사한 데이터 유형을 가져야 합니다.정수 유형의 크기와 부호는 같아야 합니다.문자열 유형의 길이가 같을 필요는 없습니다.이진(문자)이 아닌 문자열 열의 경우 문자 집합과 조합이 > 같아야 합니다.
비록 늦은 답변이지만, 저는 그것이 소수의 사람들에게 도움이 되기를 바랍니다.
저도 같은 문제에 직면했습니다.그러나 여기서는 데이터 유형도 동일합니다.
그런데 create table 문을 확인해보니 하나는 "MyISAM"이라는 엔진을 사용하여 생성된 테이블이고 다른 하나는 "InnoDB"를 사용하고 있었습니다.
SHOW CREATE TABLE <TABLE NAME>
그런 다음 두 테이블 엔진을 "InnoDB"로 변경했고 작동했습니다(Foreign Key를 만들 수 있었습니다).
SQL 덤프에 머리글과 바닥글이 있는지 확인하십시오. 그렇지 않으면 데이터베이스를 복원할 때 모든 종류의 오류가 표시됩니다.
헤더는 아래와 같이 보여야 합니다 -:
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
그리고 바닥글은 아래와 같이 보여야 합니다 -:
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
위의 내용이 도움이 되길 바랍니다.
치어스S
오류가 해결됩니다.
이와 같은 테이블에 대한 외부 키를 작성하려면
CREATE TABLE USERS_SO (
USERNAME VARCHAR(10) NOT NULL,
PASSWORD VARCHAR(32) NOT NULL,
ENABLED SMALLINT,
PRIMARY KEY (USERNAME)
);
아래 코드는 정상적으로 작동합니다.
CREATE TABLE AUTHORITIES_SO (
USERNAME VARCHAR(10) NOT NULL,
AUTHORITY VARCHAR(10) NOT NULL,
FOREIGN KEY (USERNAME) REFERENCES USERS_SO(USERNAME)
);
다른 답변에 언급된 모든 속성과 함께 두 테이블 사이의 외부 키를 성공적으로 매핑하려면 두 테이블의 CHARSET도 일치해야 합니다.
클래스 ID에 대한 특성을 UNESIGN으로 설정하기만 하면 됩니다.
질문과 직접적인 관련이 없는 질문의 제목과 관련이 있는 경우(Error Code: 1215. Cannot add foreign key constraint
) - 올바른 구문으로 이 문제에 직면한 사람이 있다면 외부 키 열을 사용하는 생성된 열이 없는지 확인하십시오. 저는 다음과 같은 이유로 인해 생성된 열이 있는지 확인하는 데 시간이 꽤 걸렸습니다.
저장된 생성 열의 기본 열에 있는 외부 키 제약 조건은 업데이트 또는 삭제 참조 작업으로 CASCADE, SET NULL 또는 SET DEFAULT를 사용할 수 없습니다.
https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html
생성된 열을 사용하고 외부 키 제약 조건에서 이러한 캐스케이드 옵션 중 하나를 사용했습니다.
열 문자 집합과 군집 콜레이트를 확인합니다. 두 테이블 모두 동일해야 합니다. 그것이 제가 내 것을 수정한 방법입니다.
키의 끝 기준점을 '고유'로 설정
테이블에서 InnoDB 엔진을 사용하고 있는지 확인합니다.
먼저 엔진이 INNODB인지 확인합니다.
SHOW CREATE TABLE yourtable
엔진을 InnoDB로 변경하지 않을 경우:
ALTER TABLE yourtable ENGINE=INNODB;
제거합니다.Engine, CHARSET, COLLATE
쿼리에서 체크아웃합니다.저한테는 효과가 있어요.
언급URL : https://stackoverflow.com/questions/17691282/error-code-1215-cannot-add-foreign-key-constraint-foreign-keys
'programing' 카테고리의 다른 글
이동식 SD 카드의 위치 찾기 (0) | 2023.08.04 |
---|---|
asp.net 의 GridView에서 인덱스가 아닌 열 이름으로 셀 값을 가져오는 방법 (0) | 2023.08.04 |
변수가 있지만 "INTO"가 없는 단순 "SELECT" (0) | 2023.07.30 |
파이썬에서 두 개의 목록을 사전으로 결합하려면 어떻게 해야 합니까? (0) | 2023.07.30 |
Python에서 문자열의 이스케이프 시퀀스 처리 (0) | 2023.07.30 |