티스토리 뷰

Reference

 

SQL FOREIGN KEY (외래키)

'외래키', '외부키' 혹은 '참조키'라고도 불리는 FOREIGN KEY(이...

blog.naver.com

 

오늘 공부하다가 삽질한 것 정리,,,

(제약조건이 이리많은 줄 몰랐다)

 

우선 성공한 코드부터

>	create table Parent(
	ID INT NOT NULL AUTO_INCREMENT,
	name VARCHAR(20) NOT NULL,
	age INT UNSIGNED NOT NULL,
	data VARCHAR(20) NOT NULL,
	created_at DATETIME NOT NULL DEFAULT now(),
	PRIMARY KEY(ID),
	UNIQUE INDEX data_UNIQUE (data ASC),
	UNIQUE INDEX name_UNIQUE (name ASC))
	COMMENT = 'Parent'
	DEFAULT CHARACTER SET = utf8
	ENGINE = InnoDB;

>	create table Child(
	ID INT NOT NULL AUTO_INCREMENT, 
	VAL1 INT NOT NULL,
	VAL2 TINYINT NOT NULL,
	VAL3 DATETIME NOT NULL DEFAULT now(),
	subData VARCHAR(20) NOT NULL,
	PRIMARY KEY(ID),
	INDEX subData_idx (subData ASC),
	CONSTRAINT subData
	FOREIGN KEY (subData)
	REFERENCES nodejs.Parent (data)
	ON DELETE CASCADE
	ON UPDATE CASCADE)
	COMMENT = 'Parent에 종속된 값'
	DEFAULT CHARACTER SET = utf8
	ENGINE=InnoDB;

당연하지만 Foreign key와 참조하는 column의 이름을 제외한 모든 설정은 같아야한다.

그리고 참조하고자하는 column은 UNIQUE INDEX 또는 PRIMARY KEY로 설정되어야 한다.

그리고 만약 자료형이 char형이라면 길이CARACTER SET 설정이 동일해야 한다.

 

그리고 자료형이 TEXT, BLOB (이미지, 동영상)이라면 Foreign key로 가져올 수 없다.

그리고 ENGINE이 InnoDB가 아니면 안된다.

 

관계형 데이터베이스인 SQL에서 Foreign Key는 중요한데 이렇게 복잡한지 처음 알았다.

'Web > BackEnd' 카테고리의 다른 글

장고 REST API 정리  (0) 2022.08.19
[Node.js] Sequelize로 CRUD 작업 처리하기  (0) 2021.12.11
[MySQL] Create, Read, Update, Delete (CRUD)  (0) 2021.12.10
[MySQL] SQL table 생성 정리  (0) 2021.12.09
Node.js 시작  (0) 2021.12.04
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday