mysql - 添加外键时表迁移问题

标签 mysql sql yii2

我的一个文件包含以下主表:

public function up()
{
    $this->createTable('{{%users}}', [
        'id' => 'pk',
        'uid'=> 'VARCHAR(150) NOT NULL',
        'mydate' => Schema::TYPE_INTEGER . ' NOT NULL',
        'state' => "ENUM('INA','ACT') " . ' NOT NULL',
        'setting' => Schema::TYPE_INTEGER . ' NOT NULL',
    ],'ENGINE=InnoDB'
    );
}

引用上表uid的子表是:

 $this->createTable('{{%xyztable}}', [
            'id'=>'pk',
            'uid' => 'integer NOT NULL',
            'server_time' => Schema::TYPE_INTEGER . ' NOT NULL',
            'answer' => 'VARCHAR(135) NOT NULL',
        ],'ENGINE=InnoDB'
    );

    $this->addForeignKey('fk_unique_id',"{{%xyztable}}", 'uid', '{{%users}}', 'uid', 'CASCADE', 'CASCADE');

在调用迁移时,我收到以下错误

Error Info:
Array
(
    [0] => HY000
    [1] => 1215
    [2] => Cannot add foreign key constraint
)

我花了一个多小时但无法找出这个错误。

最佳答案

为了创建外键:

1) 两列应具有相同的类型。

您有不同的类型(字符串整数):

'uid' => 'VARCHAR(150) NOT NULL',

'uid' => 'integer NOT NULL',

2)表中引用连接列的外键应该有索引。

在您的代码中,这也缺失。

在迁移中,您可以使用 createIndex() 创建索引方法。

关于mysql - 添加外键时表迁移问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28472995/

相关文章:

yii2 - 可以在没有模型的情况下使用 yii2 DepDrop::widget 吗?

Java运行Ms Access查询

mysql - 使用UNION ALL选择的疑问

c# - 在C#中调用MySql函数来验证用户名和密码

sql - 稀疏数据 : efficient storage and retrieval in an RDBMS

SQL Server 2008事务复制 'Missing end comment mark ' */''

mysql - 如何通过连接表获取值?

Yii2:如何读取由JavaScript设置的cookie

Yii2 如何使用数据库迁移文件更新单元格

mysql - 如何避免MySQL更新中相关子查询分配中的多列