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 来帮助我创建多对多的参考表。Tag 表是 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 这样的命令可以显示这些操作?我尝试过 delete no action 和 delete set null 等,但我不想盲目地通过反复试验来做某事,尤其是在处理表之间的关系时。谁能帮我?非常感谢。

4

2 回答 2

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 回答
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 回答