MySQL InnoDB-Engine in Laravel

Lesezeit: 3 Minuten

Benutzer-Avatar
DigitalWM

Ich verwende Laravel und den Laravel-Migrationsmechanismus. Ich habe Tabellen erstellt und Fremdschlüssel eingerichtet. Aber die Tabellen sind MyISSAM, also werden keine Fremdschlüssel erstellt. Wo aktiviere/konfiguriere ich das? (um es auf InnoDB und nicht auf dem MySQL-Server zu ändern).

Sie können Ihre Datei /config/database.php bearbeiten, nach suchen MySQL Eintrag und Änderung:

'engine' => null,

zu

'engine' => 'InnoDB',

Das erspart Ihnen das Hinzufügen $table->engine = "InnoDB"; für jedes deiner Schemas 😉

  • Dies ist perfekt! Danke!

    – Christoffer

    19. November 2017 um 13:57 Uhr

  • Die Frage ist nun, warum Laravel erlaubt, Fremdschlüssel in den Migrationsdateien mit MyISAM zu erstellen. Unter Verwendung von MySQL 5.7 (also mit InnoDB als Standard) wird die migrate Der Befehl erstellt immer noch eine Tabelle mit MyISAM, und meine Fremdschlüssel sind nur Indizes. Seltsam.

    – Vinzenz Decaux

    4. August 2018 um 10:44 Uhr

  • @VincentDecaux, Laravel hat allen Entwicklern die Funktionalität gegeben, die Fremdschlüssel per Migrationscode zu erstellen. Angenommen, Laravel erlaubt diese Funktionalität nicht und jemand, der die InnoDB-Engine verwendet, benötigt sie, dann muss er offensichtlich die Abfrage(n) separat schreiben, um Fremdschlüsseleinschränkungen hinzuzufügen. Was im Ergebnis auch seine/ihre Arbeit und Zeit verdoppeln wird.

    – Herr Singh

    11. Oktober 2019 um 7:25 Uhr

Motor so definieren

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

Benutzer-Avatar
Kryoknochen

Sie können den Motor hineinstellen Schema\Tabellenabschluss.

  • Leider scheint dieser Link jetzt tot zu sein.

    – jlbang

    17. Juli 2015 um 20:53 Uhr

  • Jetzt ist der Weg, dies zu tun hier in Verbindungs- und Speicher-Engine

    – Thomas Laurent

    23. Juni 2016 um 15:18 Uhr

Ich fand, dass @ThomasLAURENT die beste Lösung ist, aber was ist mit den vorhandenen Tabellen, die ich in meiner Datenbank habe.

Herumarbeiten.

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');
        }
    }
}

Dadurch können wir alle Tabellen konvertieren und bei Bedarf zurücksetzen.

Benutzer-Avatar
Tiago Gouvêa

Ein anderer Ansatz (für wen dies nicht database.php verwendet) besteht darin, on einzuschließen .env Datei:

DB_ENGINE=InnoDB

Denken Sie daran, zu überprüfen, ob Sie haben 'engine' => env('DB_ENGINE', null), auf Ihrer database.php

Benutzer-Avatar
Pradeep

Ich würde empfehlen, Ihr MySQL auf 5.5 oder höher zu aktualisieren. Die standardmäßige Speicher-Engine für Mysql ist jetzt InoDB

Vor MySQL 5.5.5 war MyISAM die Standardspeicher-Engine. (Die Standardeinstellung wurde in MySQL 5.5.5 auf InnoDB geändert.) MyISAM basiert auf der älteren (und nicht mehr verfügbaren) ISAM-Speicher-Engine, hat aber viele nützliche Erweiterungen.

http://dev.mysql.com/doc/refman/5.5/en/myisam-storage-engine.html

Ist dies erledigt, können Sie Beziehungen innerhalb der Entitätsklassen einfach über Laravel abbilden

Benutzer-Avatar
RDK

Verwenden Sie InnoDb-Tabellen auf der Serverseite, das ist der beste Weg zum Erfolg. Benutzen MySQL-Workbench. Es ist einfach in der Workbench. Und wenn Sie wollen, lesen Sie den Eingeborenen Handbuch

1011900cookie-checkMySQL InnoDB-Engine in Laravel

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy