Primary key

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
Posted by linuxism
,