代码之家  ›  专栏  ›  技术社区  ›  TimSch

mysql/laravel迁移将复合键更改为自动增量

  •  0
  • TimSch  · 技术社区  · 7 年前

    我有一个有两行的透视表(练习任务)。目前,这两行构建一个复合主键。
    不幸的是,结果发现这是一个糟糕的想法,因为现在我需要能够在一个练习中多次添加相同的任务。

    因此,我或者需要切换到一个自动递增的主键。

    此外,我需要添加一个索引行(它指示顺序),这样也可以扩展复合键。

    问题
    实现这一目标的最佳方法是什么?由于数据库已经在使用中,我不能只删除表。

    原始迁移

    Schema::create('exercise_task', function (Blueprint $table) {
            $table->integer('exercise_id')->unsigned();
            $table->integer('task_id')->unsigned();
    
            $table->foreign('exercise_id')->references('id')->on('exercises')
            ->onUpdate('CASCADE')->onDelete('CASCADE');
            $table->foreign('task_id')->references('id')->on('tasks')
                ->onUpdate('CASCADE')->onDelete('CASCADE');
    
            $table->primary(['exercise_id', 'task_id']);
        });
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   fattalico    7 年前

    我建议重构代码以从头开始修复此问题,或者在MySQL终端窗口中使用以下代码添加索引行:

    INSERT INTO name VALUES ('column1 value', 'column2 value', 'column3 value', 'column4 value');

        2
  •  0
  •   TimSch    7 年前

    我最后得出了以下结论:
    1。删除数据透视表的所有外键 (这是钥匙)
    2。删除主键
    三。添加新的主键(我决定通过新的索引列扩展复合键)
    4。已读取以前丢弃的外键。