database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Tutorials 16663 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 16663
MySQL의 왜키 설정(Foreign Keys )
작성자
정재익(advance)
작성일
2002-07-30 00:07
조회수
10,089

원본출처 : http://www.openphp.com/board/board_center.html?Type=View&tb_name=board_mysql_tip&id=2&start=0&id_no=2

 

안녕 하세요? 조성준입니다 
음냐  

소형이아닌 중소정도규모의 디비설계시에는 
항상 테이블을 여러가지고 짤라 놓는게 
상택이죠. 시스템 부하면에선,ㄴ C하시는 분은 아실겁니다. 

그렇다 보니 쪼개진 테이블간에 왜래키라는것을 
설정해 항상 연결 고리를 걸어 놓지 않으면 

JOin이나 데이타 Delete UPdate 부분에 문제가 있지요. 


먼저 MySQL에서는 Foreign Keys 설정이 가능 하다 
사용이나 POstgresSQL: 보다는 좀 못하지만 그래도 ㅂ편한 정도 입니다 

POstgres의 경우 CASADE로 Triger를 설정하면 
오래키로 묻어 둔것이 DELETE나 UPDATE시 
연결된 모든 테이블에 대해 동시적으로 작동하니 
좀더 무결성을 위한다면 MySQL보다는 POstgreSQL을 쓰셔용 

CREATE TABLE persons ( 
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 
    name CHAR(60) NOT NULL, 
    PRIMARY KEY (id) 
); 

CREATE TABLE shirts ( 
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 
    style ENUM(\t-shirt\, \polo\, \dress\) NOT NULL, 
    color ENUM(\red\, \blue\, \orange\, \white\, \black\) NOT NULL, 
    owner SMALLINT UNSIGNED NOT NULL REFERENCES persons, 
    PRIMARY KEY (id) 
); 

INSERT INTO persons VALUES (NULL, \Antonio Paz\); 

INSERT INTO shirts VALUES 
(NULL, \polo\, \blue\, LAST_INSERT_ID()), 
(NULL, \dress\, \white\, LAST_INSERT_ID()), 
(NULL, \t-shirt\, \blue\, LAST_INSERT_ID()); 

INSERT INTO persons VALUES (NULL, \Lilliana Angelovska\); 

INSERT INTO shirts VALUES 
(NULL, \dress\, \orange\, LAST_INSERT_ID()), 
(NULL, \polo\, \red\, LAST_INSERT_ID()), 
(NULL, \dress\, \blue\, LAST_INSERT_ID()), 
(NULL, \t-shirt\, \white\, LAST_INSERT_ID()); 

SELECT * FROM persons; 
+----+---------------------+ 
| id | name                | 
+----+---------------------+ 
|  1 | Antonio Paz         | 
|  2 | Lilliana Angelovska | 
+----+---------------------+ 

SELECT * FROM shirts; 
+----+---------+--------+-------+ 
| id | style   | color  | owner | 
+----+---------+--------+-------+ 
|  1 | polo    | blue   |     1 | 
|  2 | dress   | white  |     1 | 
|  3 | t-shirt | blue   |     1 | 
|  4 | dress   | orange |     2 | 
|  5 | polo    | red    |     2 | 
|  6 | dress   | blue   |     2 | 
|  7 | t-shirt | white  |     2 | 
+----+---------+--------+-------+ 

SELECT s.* FROM persons p, shirts s 
 WHERE p.name LIKE \Lilliana%\ 
   AND s.owner = p.id 
   AND s.color <> \white\; 

+----+-------+--------+-------+ 
| id | style | color  | owner | 
+----+-------+--------+-------+ 
|  4 | dress | orange |     2 | 
|  5 | polo  | red    |     2 | 
|  6 | dress | blue   |     2 | 
+----+-------+--------+-------+ 

위는 MySQL최신 문서에 있는 것입니다 
요즘 간혹 메일로 물어 오려서 기재 합니다 
그럼 문의는 Q&A에 주세요 

이 글에 대한 댓글이 총 2건 있습니다.

이것은 그냥 단순 조인으로 보이는데 왜래키 구현이라고 할 수 있을까요?

김대성님이 2003-08-06 23:36에 작성한 댓글입니다.

외래키 라면 버클리나 InnoDB 를 빼고 설명 하실 순 없을텐데요? 

김욱진(bloodline)님이 2004-04-18 12:22에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
16666Mysql 한방에 백업하기 [8]
정재익
2002-07-30
14972
16665mysql 에러 복구.
정재익
2002-07-30
10682
16664MySQL Index 속도 높이기..꽁수
정재익
2002-07-30
12221
16663MySQL의 왜키 설정(Foreign Keys ) [2]
정재익
2002-07-30
10089
16662MySQL 에서 한글 정렬방법
정재익
2002-07-30
8906
16601Transactions in MySQL (2)
정재익
2002-07-23
9021
16600Transactions in MySQL (1)
정재익
2002-07-23
12219
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다