Buat id secara otomatis di php

MySQL memiliki kata kunci AUTO_INCREMENT untuk melakukan peningkatan otomatis. Nilai awal untuk AUTO_INCREMENT adalah 1, yang merupakan nilai default. Itu akan mendapatkan kenaikan sebesar 1 untuk setiap rekor baru

Untuk mendapatkan id auto increment berikutnya di MySQL, kita bisa menggunakan fungsi last_insert_id() dari MySQL atau auto_increment dengan SELECT

Membuat tabel, dengan "id" sebagai penambahan otomatis

mysql> create table NextIdDemo
   -> (
   -> id int auto_increment,
   -> primary key(id)
   -> );
Query OK, 0 rows affected (1.31 sec)

Memasukkan record ke dalam tabel

mysql> insert into NextIdDemo values(1);
Query OK, 1 row affected (0.22 sec)

mysql>  insert into NextIdDemo values(2);
Query OK, 1 row affected (0.20 sec)

mysql>  insert into NextIdDemo values(3);
Query OK, 1 row affected (0.14 sec)
_

Untuk menampilkan semua catatan

mysql> select *from NextIdDemo;

Berikut ini adalah outputnya

+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
+----+
3 rows in set (0.04 sec)

Kami telah memasukkan 3 catatan di atas. Oleh karena itu, id berikutnya harus 4

Berikut ini adalah sintaks untuk mengetahui id berikutnya

SELECT AUTO_INCREMENT
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = "yourDatabaseName"
AND TABLE_NAME = "yourTableName"
_

Berikut kuerinya

mysql> SELECT AUTO_INCREMENT
    -> FROM information_schema.TABLES
    -> WHERE TABLE_SCHEMA = "business"
    -> AND TABLE_NAME = "NextIdDemo";

Ini adalah output yang menampilkan peningkatan otomatis berikutnya

+----------------+
| AUTO_INCREMENT |
+----------------+
|              4 |
+----------------+
1 row in set (0.25 sec)
_

Buat id secara otomatis di php


Buat id secara otomatis di php

Masalah nyata pertama saya ketika bekerja dengan php/mysql (ya, maksud saya, bukan dengan bahasa lain, mungkin) adalah autoId

Persyaratan saya (yang saya berikan sendiri) adalah. menghasilkan ID untuk setiap permintaan ke server dengan format

$requestId = $prefix . '-' . date('yyyyMMdd') . '-' . $autoId;

Dengan $autoId diberikan dari 1 -> 9999, setel ulang setiap hari ke 1. Misalnya

PREFIX-19700101-1234
PREFIX-19700101-1235
PREFIX-19700102-0001 // New day, reset ID to 1
PREFIX-19700102-0002 // Keep on incrementing
_

Seperti yang Anda ketahui, mySQL memiliki atribut luar biasa yang disebut AUTO_INCREMENT, izinkan kami memiliki satu Id unik untuk setiap penyisipan (dan kenaikan tentunya), kami dapat menggunakannya sepenuhnya untuk membuat Id dari 1 -> MAX. Sisa pekerjaan disetel ulang menjadi 1 harian

Kami punya beberapa ide

  • TRUNCATE TABLE:
  • ALTER TABLE table_name AUTO_INCREMENT=1;
  • Increase autoId normally, store ‘startId’ value each day to calculate ‘daily autoId’:
$autoId = $autoId - $startId;
_
  • Using only one MyISAM table.
  • Dan masih banyak lagi solusinya…

Yah, semuanya punya Google, kami akan mengimplementasikan tabel MyISAM (hanya karena keren ^^)

Langkah 1. Buat tabel

Menggunakan Laravel/Lumen. buat migrasi pertama seperti biasa, berikan Primary Key (PK) untuk kedua kolom

public function up()
{
Schema::create('trans', function (Blueprint $table) {
$table->engine = 'MyISAM';
$table->char('date', 8); // yyyyMMdd
$table->unsignedBigInteger('id');
$table->primary(['date', 'id']);
});
}

Migrasi kedua, tambahkan atribut AUTO_INCREMENT ke kolom id

public function up()
{
Schema::table('trans', function ($table) {
$table->bigIncrements('id')->unsigned()->change();
});
}

Langkah ini mungkin memerlukan pemasangan doktrin/dbal. Buka Terminal

>composer require doctrine/dbal

Jika Anda menggunakan SQL mentah

mysql> CREATE TABLE trans (
date VARCHAR(8) NOT NULL,
id BIGINT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (date, id))
ENGINE=MyISAM;

Langkah 2. Masukkan data pengujian

Menggunakan Laravel/Lumen. buat perintah bernama TestMyISAM. php. Fungsi pegangannya ().

protected $signature = "test:myisam";  // console command namepublic function handle()
{
// $date = date('Ymd'); // get current date
$tran = Trans::create(['date' => '19700101']);
dd($tran->date . '-' . str_pad($tran->id, 4, '0', STR_PAD_LEFT));
}

Daftarkan perintah di Aplikasi/Konsol/Kernel. php

protected $commands = [
Commands\TestMyISAM::class,
];

Buka Terminal, jalankan

>php artisan test:myisam

Jalankan beberapa waktu untuk pengujian dengan 'date' => '19700101' dan tingkatkan nilai ini menjadi '19700102', seterusnya

SQL mentah

PREFIX-19700101-1234
PREFIX-19700101-1235
PREFIX-19700102-0001 // New day, reset ID to 1
PREFIX-19700102-0002 // Keep on incrementing
_0

Kedua solusi memberi kita hasil yang sama

PREFIX-19700101-1234
PREFIX-19700101-1235
PREFIX-19700102-0001 // New day, reset ID to 1
PREFIX-19700102-0002 // Keep on incrementing
_1

Metode ini dapat memecahkan persyaratan yang diberikan di atas. Namun, seperti yang saya sebutkan sebelumnya, mengapa keren tapi tetap buruk? . Ringkasan

  • MyISAM tidak memiliki transaksi, artinya tidak ada ACID (atomisitas, konsistensi, isolasi, daya tahan)
  • Pemulihan kerusakan yang buruk. mungkin crash/mudah crash. Kita bisa recovery dengan perintah REPAIR TABLE, tapi siapa yang mau repair?
  • Penguncian meja. kunci semua tabel untuk setiap perintah INSERT/UPDATE. Tidak apa-apa jika Anda menggunakan SELECT lebih banyak, tetapi BUKAN INSERT/UPDATE

Jadi, mengapa kita menggunakannya, bukan? . Tergantung. Kami dapat melamar tanpa mempedulikan ruang lingkup yang tepat (kecil)

Bagaimana Anda membuat ID secara otomatis?

Basis data Anda dapat menghasilkan ID berurutan untuk Anda. .
Buat kolom ID di database Anda (saya menduga Anda menggunakan MS SQL karena Anda hanya menyatakan C#)
Atur kolom Identitas ke true pada kolom ID
Set Autoincrement ke true pada kolom ID

Bagaimana cara menghasilkan id pesanan acak di PHP?

Hasilkan id acak unik menggunakan fungsi PHP rand() . $random_id = rand(9999999999999999,100000000000000); . use the rand() function with arguments. $random_id = rand(999999999999999,10000000000000); echo $random_id; Now, you can run and get a unique random id on every execution.

Bagaimana cara menambahkan id secara otomatis di MySQL PHP?

MySQL menggunakan kata kunci AUTO_INCREMENT untuk menjalankan fitur peningkatan otomatis . Secara default, nilai awal untuk AUTO_INCREMENT adalah 1, dan akan bertambah 1 untuk setiap record baru. NILAI ('Lars','Monsen'); .

Bagaimana cara menghasilkan id secara otomatis di MySQL?

MySQL memiliki kata kunci AUTO_INCREMENT untuk melakukan peningkatan otomatis. Nilai awal untuk AUTO_INCREMENT adalah 1, yang merupakan nilai default. Itu akan mendapatkan kenaikan sebesar 1 untuk setiap rekor baru. Untuk mendapatkan id auto increment berikutnya di MySQL, kita bisa menggunakan fungsi last_insert_id() dari MySQL atau auto_increment dengan SELECT .