2013-08-02 74 views
2

我对数据库设计相当陌生,但是我看过你可以在一个表中有两个外键。出于某种原因,我在尝试在phpMyAdmin中运行以下SQL时遇到错误。在一个表中有两个外键的MySQL数据库

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; 

任何帮助,非常感谢!

回答

3

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

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

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

+1

非常感谢,这解决了我的问题! – Vektor

3

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

+1

试过这个,看起来错误在于创建tbl_profile。感谢您的建议! – Vektor

相关问题