MySQL无法在数据类型相同的情况下添加外键约束

时间:2015-01-06 12:44:37

标签: mysql

我试图创建一个带有相关表的外键的表。我收到错误'无法添加外键约束'在尝试创建此表时,我检查了两个表的数据类型,它们是相同的。我还有其他原因可以收到此错误吗?

表:

enter image description here

用于保存FK的表的SQL:

   CREATE TABLE messages
(
    id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    subject varchar(50),
    message text,
    message_time datetime DEFAULT CURRENT_TIMESTAMP,
    unread boolean DEFAULT true,
    sender varchar(16) NOT NULL,
    FOREIGN KEY(sender) REFERENCES users(username) ON DELETE CASCADE
)

2 个答案:

答案 0 :(得分:0)

您的sender_id和user_id应该具有相同的数据类型+大小+相同的属性,即UNSIGNED

答案 1 :(得分:0)

我尝试使用laravels migrate创建表,它运行时没有错误。使用以下内容:

    Schema::create('messages', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('subject', 50);
        $table->string('content');
        $table->boolean('unread')->default(true);
        $table->string('sender', 16);
        $table->timestamps();
        $table->foreign('sender')->references('username')->on('users')->onDelete('cascade');
    });

我仍然不确定两列中的不同之处是它们不能是外键..