web-dev-qa-db-de.com

Legen Sie das Startfeld 1000 für das automatische Inkrementfeld in Migrationsliste 5.1 fest

Ich muss meine IDs von 1000 in der Benutzertabelle starten. Wie kann ich dafür eine Migration erstellen?.

Meine aktuelle Migration ist:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id'); // how can I start this from 1000
        $table->integer('qualification_id')->nullable();
        $table->integer('experience_id')->nullable();
    });
}
16
Anshul Mishra

Es sollte so sein (nicht getestet).

use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;

class MyTableMigration extends Migration {

     /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        $statement = "ALTER TABLE MY_TABLE AUTO_INCREMENT = 111111;";
        DB::unprepared($statement);
    }

    /**
    * Reverse the migrations.
    *
    * @return void
    */
    public function down()
    {
    }
}

Update

//Your migrations here:
Schema::create('users', function (Blueprint $table) {
    $table->bigIncrements('id')->unsigned();
    $table->integer('qualification_id')->nullable();
    $table->integer('experience_id')->nullable();
});

//then set autoincrement to 1000
//after creating the table
DB::update("ALTER TABLE users AUTO_INCREMENT = 1000;");
21
user5456506

Die meisten Tabellen arbeiten mit Inkrementen, die von der nächstgrößeren Ganzzahl ansteigen.

Es kann immer eine ganze Zahl eingefügt werden, die höher ist als der aktuelle Index für die automatische Inkrementierung. Der Autoinkrementierungsindex folgt dann automatisch von diesem neuen Wert +1.

Wenn Sie also eine frisch geprägte Tabelle haben, ist Ihr aktueller Index 0, der nächste Schlüssel ist 0 + 1 = 1.

Was wir wollen, ist ein Primärschlüssel, der bei 1000 beginnt. Wir fügen also einen Datensatz mit dem ID-Wert 999 ein, sodass die nächste Einfügung zu 1000 wird.

In Code:

 $startId = 1000;

 DB::table('users')->insert(['id'=> $startId - 1]);
 DB::table('users')->where('id',$startId - 1)->delete();

und jetzt haben Sie eine leere Tabelle, in der die nächste Einfügungs-ID 1000 sein sollte.

Wenn Sie Werte in die Tabelle mit den ID-Werten <startId setzen möchten, müssen Sie vor ausführen, um diese Anweisungen auszuführen. Andernfalls wirft die Datenbank einen Fehler wegen Einschränkung der Integritätsbedingung ab.

Das sollte datenbankunabhängig funktionieren, aber wenn es eine Datenbank gibt, die dieser Regel der automatischen Inkrementierung nicht folgt, würde ich gerne darüber erfahren.

5
Tschallacka

Migration zum Erstellen einer Tabelle und Festlegen des automatischen Inkrementierungswerts ab Laravel 5.5

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('qualification_id')->nullable();
        $table->integer('experience_id')->nullable();
    });

    // Here's the magic
    \DB::statement('ALTER TABLE table_name AUTO_INCREMENT = 1000;');
}

Mit DB::statement() können Sie jede einzelne SQL-Anweisung ausführen, die Sie benötigen.

1