MySQL数据库在一个表中有两个外键

时间:2013-08-02 02:58:51

标签: mysql sql database database-design

我对数据库设计还不熟悉,但我读到你可以在一个表中有两个外键。出于某种原因,我在尝试在phpMyAdmin中运行以下SQL时遇到错误。

CREATE TABLE tbl_user
(
  id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(45) NOT NULL,
  password VARCHAR(45) NOT NULL,
  email VARCHAR(72) NOT NULL,
  first_name VARCHAR(45),
  last_name VARCHAR(45),
  role VARCHAR(20),
  UNIQUE(username)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE tbl_profile
(
  id INTEGER NOT NULL PRIMARY KEY,
  attribute VARCHAR(128) NOT NULL,
  value VARCHAR(128) NOT NULL,
  CONSTRAINT FK_userid FOREIGN KEY (id)
    REFERENCES tbl_user (id) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT FK_attribute FOREIGN KEY (attribute)
    REFERENCES tbl_attribute (id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE tbl_attribute
(
  id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(45) NOT NULL,
  description TEXT,
  data_type VARCHAR(45)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

在创建tbl_profile之前尝试创建tbl_attribute。

答案 1 :(得分:3)

外键列和主键列的数据类型不匹配;这些必须匹配。

tbl_profile(attribute)  is VARCHAR
tbl_attribute(id)       is INT 

此外,必须在创建外键约束之前创建引用的表。 (在创建表之后,我们经常会在ALTER TABLE语句中看到单独定义的外键约束。)