Primary Key 2개 설정
CREATE TABLE member (
mem_num INT NOT NULL AUTO_INCREMENT,
mem_id VARCHAR(20),
PRIMARY KEY (mem_num, mem_id));
기존 프라이머리 키를 삭제
alter table 테이블명 drop primary key;
새로운 프라이머리 키를 설정
alter table 테이블명 add primary key(컬럼명, 컬럼명, 컬럼명 ... );
alter table 테이블명 add primary key(컬럼1, 컬럼2, 컬럼3);
과 같이 프라이머리 키를 생성하면 프라이머리 키의 기준값이 [컬럼1컬럼2컬럼3] 으로 생성되는 것입니다. 모든 인덱싱은 오직 한가지의 값만 가지게 됩니다.
복합인덱싱은 복수개의 컬럼값이 연결된 값으로 인덱스를 생성합니다.
출처 - http://darkstings.blog.me/30033405914
Foreign key
테이블 생성시
Primary Key2개 잡기
CREATE TABLE Info
(
a bigint(20) unsigned NOT NULL,
bun char(16) NOT NULL,
provider tinyint NOT NULL default '0',
b int NOT NULL default '0',
PRIMARY KEY (a,b)
);
-- FOREIGN KEY 추가하는 방법 포함
-- FOREIGN KEY 를 추가할 때 주의사항 3가지
-- INNODB에서의 FOREIGN KEY는
-- 1.반드시 아버지와 자식은 INNODB 여야 한다.
-- 2.아들이 참조하는 키는 아버지가 가지고 있는 키의 자료형과 동일하게 사용해야 한다.
-- 3.아버지가 UNIQUE한 값을 갖는 키들만, 아들이 가져가서 참조할 수 있다.
Foreign key 설정
CREATE TABLE FriendAddInfo -- 친구 신청 정보
(
abc bigint(20) unsigned NOT NULL,
def bigint(20) unsigned NOT NULL,
FOREIGN KEY(abc) REFERENCES UserInfo(a) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY(def) REFERENCES UserInfo(a) ON UPDATE CASCADE ON DELETE CASCADE
);
ON UPDATE CASCADE, ON DELETE CASCADE는 참조한 원본 테이블이 UPDATE, DELETE의 이벤트가 발생하면 변경사항을 자동으로 반영한다.
출처 - http://blog.naver.com/xenoheart?Redirect=Log&logNo=130129181680
FOREIGN KEY (외래키) 다른 테이블의 필드값을 참조한다.
MySQL 사이트에 예제를 보고 설명하면
===================================
CREATE TABLE parent
(
id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child
(
id INT,
parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE
) ENGINE=INNODB;
===================================
child 테이블은 parent 테이블의 id 값을 참조로 하게됩니다.
쉽게 얘기해서 parent 테이블에 없는 id값은 child 테이블의 parent_id 값으로 사용되지 못 하는 거죠.
FOREIGN KEY는 가비지 데이터를 줄이고 정보의 신뢰를 높일 수 있지만 값이 있는 지 없는 지 확인 하기 때문에 부모 테이블이 비대할 경우 속도를 저하시킬 수 있습니다.
저는 개인적으로 결제의 경우와 같이 중요한 것이 아니면 사용하는 걸 자제합니다. 데이터의 신뢰도 중요하지만 웹은 속도도 무척 중요하죠.^^
[CONSTRAINT symbol
] FOREIGN KEY [id
] (index_col_name
, ...)
REFERENCES tbl_name
(index_col_name
, ...)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
참고) http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html
'DB > MySQL' 카테고리의 다른 글
MySQL에서 문자셋(Character Set)과 Collation의 차이 (0) | 2012.03.17 |
---|---|
mysql 주석 (0) | 2012.03.17 |
mysql root 패스워드를 변경 (0) | 2012.03.16 |
MySQL ALTER TABLE 구문 정리 (0) | 2012.03.16 |
MySQL flush privileges 명령어 (0) | 2012.01.24 |