Laravel中的Mysql InnoDB引擎

ttcibm8c  于 2023-03-11  发布在  Mysql
关注(0)|答案(9)|浏览(242)

我正在使用laravel和laravel迁移机制。我创建了表并设置了外键。但是表是MyISSAM,所以没有创建外键。我在哪里启用/配置它?(将其更改为InnoDB,而不是在MySQL服务器中)。

mnemlml8

mnemlml81#

您可以编辑/config/database. php文件,搜索 mysql 项并更改:
'engine' => null,

'engine' => 'InnoDB',
这样就不必为每个Schemas添加$table->engine = "InnoDB";;)

vc6uscn9

vc6uscn92#

这样定义发动机

Schema::create("models", function(Blueprint $table) {
            $table->engine = "InnoDB";
  }
1rhkuytd

1rhkuytd3#

您可以在Schema\Table闭包中设置引擎。

ldfqzlk8

ldfqzlk84#

另一种方法(不使用database.php)是在.env文件中包含:
DB_ENGINE=InnoDB
记得检查一下你的database.php上是否有'engine' => env('DB_ENGINE', null),

qfe3c7zg

qfe3c7zg5#

我发现@ThomasLAURENT是最好的解决方案,但是我数据库中现有的表怎么办?
四处走走。

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class ConvertTablesIntoInnoDB extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        $tables = [
            'users',
            'products',
        ];
        foreach ($tables as $table) {
            DB::statement('ALTER TABLE ' . $table . ' ENGINE = InnoDB');
        }
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        $tables = [
            'users',
            'products',
        ];
        foreach ($tables as $table) {
            DB::statement('ALTER TABLE ' . $table . ' ENGINE = MyISAM');
        }
    }
}

这将允许我们转换所有表,并在需要时回滚它们。

wnrlj8wa

wnrlj8wa6#

我建议把你的Mysql升级到5.5或者更高。现在Mysql的默认存储引擎是InoDB

  • 在MySQL 5.5.5之前,MyISAM是默认的存储引擎。(在MySQL 5.5.5中,默认值更改为InnoDB。)MyISAM基于旧的(不再可用的)ISAM存储引擎,但有许多有用的扩展。*

http://dev.mysql.com/doc/refman/5.5/en/myisam-storage-engine.html
完成后,您可以通过Laravel轻松地Map实体类中的关系

np8igboo

np8igboo7#

在服务器端使用InnoDb表,这是成功的最佳方法。使用MySQL Workbench。在Workbench中很容易。而且,如果您想读取原生manual

xoefb8l8

xoefb8l88#

Schema::create('users', function($table)
{
    $table->engine = 'InnoDB';

    $table->string('email');
});

如文件Laravel:https://laravel.com/docs/4.2/schema#storage-engines
P/s:感谢@Nico Haase提醒我提供链接。

js5cn81o

js5cn81o9#

对于那些不使用database.php的用户来说,最好的方法是在.env文件中包含:DB_ENGINE=InnoDB.记得检查您的数据库上是否有'engine' =〉env('DB_ENGINE',null).php

相关问题