2012-06-06 48 views
1

我正在構建由其他人已經構建並且幾乎沒有文檔的數據庫上的新東西。我需要添加一個新表,其中包含許多對現有表的引用。如何在添加外鍵時瞭解引用表的刪除操作

以下已經是表中已有wp_posts:

+-----------------------+---------------------+------+-----+---------------------+----------------+ 
| 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    |    | 
+-----------------------+---------------------+------+-----+---------------------+----------------+ 

我需要創建一個table標籤和tag_posts_reference,幫助了我很多很多的參考表。標籤表是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>創建表wp_tags_posts(ID BIGINT(20)無符號的auto_increment,
TAG_ID BIGINT(20)無符號, POST_ID BIGINT(20)無符號, 主鍵(ID), 外鍵(TAG_ID)引用wp_tags (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

錯誤1005(HY000):無法創建'openexhibits_dev.wp_tags_posts'表(errno:150) 與以前相同的錯誤。 – Maddy

+0

@LathaD:編輯你的問題,幷包括你的MySQL版本號。我不認爲這應該有所作爲,但可能會有所作爲。 –

+0

@LathaD:Wordpress表使用什麼存儲引擎? –

相關問題