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

多対多の参照テーブルに役立つテーブルタグと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)

追加することになっているカスケードアクションにいくつかの削除があると思います。いくつか追加して試行錯誤しましたが、どれも機能しません。外部キー参照の作成中に使用することになっているカスケード削除アクションを見つける方法はありますか?それらのアクションを表示できるdectable_nameのようなコマンドはありますか?削除アクションなしや削除セットnullなどを試してみましたが、特にテーブル間の関係を扱っている間は、試行錯誤しながらやみくもにやりたくありません。誰か助けてもらえますか?どうもありがとうございます。

4

2 に答える 2

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;
于 2012-06-06T21:02:37.527 に答える
1

どのエンジンがデフォルトのエンジンであるか、外部キーを持つテーブルには InnoDB エンジンを使用してください。

mysql> テーブルを作成 wp_tags_posts(id bigint(20) unsigned auto_increment,
tag_id bigint(20) unsigned, post_id bigint(20) unsigned, 主キー(id), 外部キー(tag_id) 参照 wp_tags(id), 外部キー(post_id)参照 wp_posts(ID))engine=InnoDB;

于 2012-06-06T20:14:00.533 に答える