1

나는 이미 다른 사람이 작성한 데이터베이스에 새로운 문서를 작성하는 중이다. 이미 존재하는 테이블에 대한 많은 참조를 가진 새로운 테이블을 추가해야합니다.외래 키를 추가하는 동안 참조 테이블의 삭제 동작을 알아야하는 방법

+-----------------------+---------------------+------+-----+---------------------+----------------+ 
| Field     | Type    | Null | Key | Default    | Extra   | 
+-----------------------+---------------------+------+-----+---------------------+----------------+ 
| ID     | bigint(20) unsigned | NO | PRI | NULL    | auto_increment | 
| post_author   | bigint(20) unsigned | NO | MUL | 0     |    | 
| post_date    | datetime   | NO |  | 0000-00-00 00:00:00 |    | 
| guid     | varchar(255)  | NO |  |      |    | 
| menu_order   | int(11)    | NO |  | 0     |    | 
| post_type    | varchar(20)   | NO | MUL | post    |    | 
| post_mime_type  | varchar(100)  | NO |  |      |    | 
| comment_count   | bigint(20)   | NO |  | 0     |    | 
| legacy_id    | int(11)    | YES |  | NULL    |    | 
+-----------------------+---------------------+------+-----+---------------------+----------------+ 

나는 많은 참조 테이블에 많은 나에게 도움이 테이블 태그와 tag_posts_reference를 만들 필요가 다음

이미 테이블에 존재하는 wp_posts입니다. 태그 테이블은 wp_tags입니다 :

+-------+---------------------+------+-----+---------+----------------+ 
| Field | Type    | Null | Key | Default | Extra   | 
+-------+---------------------+------+-----+---------+----------------+ 
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | 
| tag | varchar(255)  | YES |  | NULL |    | 
+-------+---------------------+------+-----+---------+----------------+ 

테이블 wp_tags_posts를 만드는 데 문제가 있습니다. 그는 나에게 다음과 같은 오류를주고있다 :

mysql> create table wp_posts_tags(id bigint(20) unsigned auto_increment, 
    post_id bigint(20) unsigned not null, 
    tag_id bigint(20) unsigned not null, 
    primary key(id), index(post_id), 
    foreign key(post_id) references wp_posts(id) on Update cascade on delete restrict, 
index(tag_id), 
    foreign key(tag_id) references wp_tags(id)) 
    ENGINE = INNODB; 
    ERROR 1005 (HY000): Can't create table 'openexhibits_dev.wp_posts_tags' (errno: 150) 

내가 일부는 내가 추가 하죠 캐스케이드 행동에 삭제 있다고 생각합니다. 몇 가지를 추가하고 시행 착오를 시도했지만 그 중 아무도 작동하지 않습니다. 외래 키 참조를 생성하는 동안 사용할 캐스케이드 삭제 작업을 찾을 수있는 방법이 있습니까? 거기에 그 작업을 보여줄 수있는 dec table_name과 같은 명령이 있습니까? 나는 아무런 행동을 삭제하려고 노력하지 않았고 널 등을 지우지 만, 테이블 사이의 관계를 다루면서 맹목적으로 시행 착오를하고 싶지 않다. 누구든지 나를 도울 수 있습니까? 고맙습니다.

+0

테이블은 어떤 저장 엔진을 사용합니까? 외래 키 제약은 InnoDB 테이블에서만 작동한다. – eggyal

+0

InnoDB를 사용하고 있습니다. 죄송합니다. 추가하지 않으셔서 죄송합니다. – Maddy

답변

1

엔진이 기본 엔진 인 경우 외래 키가있는 테이블에 InnoDB 엔진을 사용하십시오.

의 MySQL> (아이디 BIGINT (20) 부호 AUTO_INCREMENT,
tag_id의 BIGINT (20) 부호, post_id를 용 BIGINT (20) 부호, 기본 키 (ID) 외래 키 (tag_id) 참조 wp_tags를 표 wp_tags_posts을 만들 (id), 외래 키 (post_id) 참조 wp_posts (ID)) 엔진 = InnoDB;

+0

나는 그것을 추가했다. 여전히 작동하지 않습니다! 하나 더 추가해야 wp_posts는 wordpress 테이블입니다. 그것은 데이터 유형을 지정하는 방식으로 변경됩니까? 그래도 도움을 주셔서 감사합니다. – Maddy

1

이것은 MySQL 5.5에서 작동합니다. 목표 테이블이 Wordpress 테이블이라는 사실은 내가 아는 한 외래 키 참조에 영향을주지 않아야합니다.

create table wp_posts (
    ID bigint(20) unsigned, 
    post_author bigint(20) unsigned, 
    post_date datetime, 
    guid varchar(255), 
    menu_order int(11), 
    post_type varchar(20), 
    post_mime_type varchar(100), 
    comment_count bigint(20), 
    legacy_id int(11), 
    primary key (ID) 
) engine = INNODB; 

create table wp_tags (
    id bigint unsigned, 
    tag varchar(25), 
    primary key (id) 
) engine = INNODB; 

create table wp_tags_posts(
    id bigint(20) unsigned auto_increment, 
    tag_id bigint(20) unsigned, 
    post_id bigint(20) unsigned, 
    primary key(id), 
    foreign key(tag_id) references wp_tags(id), 
    foreign key(post_id) references wp_posts(ID) 
) engine = INNODB; 
+0

ERROR 1005 (HY000) : 'openexhibits_dev.wp_tags_posts'테이블을 만들 수 없습니다. (errno : 150) 이전과 같은 오류입니다. – Maddy

+0

@LathaD : 질문을 편집하고 MySQL의 버전 번호를 포함하십시오. 나는 그것이 차이를 만들어야한다고 생각하지 않지만 그것은 가능할 수도 있습니다. –

+0

@LathaD : Wordpress 테이블에서 사용하는 저장 엔진은 무엇입니까? –

관련 문제