MySQL 数据库的一个表中的两个外键

标签: sql MySQL
发布时间: 2015/6/11 22:03:52
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我是相当新的数据库设计,但我读过你可以在一个表中有两个外键。出于某种原因我尝试在 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;

感激是任何帮助!

解决方法 1:

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

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

所引用的表也必须先创建外键约束创建。(我们经常看到在 ALTER TABLE 语句中分开,定义后创建的表的外键约束)。

赞助商