Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara membaca dan mereset AUTO_INCREMENT di MySQL

Tutorial ini memberikan kueri untuk mereset AUTO_INCREMENT di MySQL menggunakan Tabel InnoDB. Ini menunjukkan cara memperbarui atribut AUTO_INCREMENT dari Tabel InnoDB.

Perhatian

Jangan gunakan perintah ALTER pada tabel yang memiliki data besar. MySQL membutuhkan waktu lama untuk memperbarui tabel jika ukuran tabel besar.

Perintah ALTER harus digunakan hanya jika benar-benar diperlukan.

AUTO_INCREMENT tidak dapat ditetapkan dengan nilai yang lebih rendah dari nilai maksimum yang ada.

Membuat Database dan Tabel

Pada bagian ini, kita akan membuat database dan tabel yang akan digunakan untuk mengupdate atribut AUTO_INCREMENT.

# Create the Database
CREATE SCHEMA `autoinc` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# Create the Table
CREATE TABLE `autoinc`.`user` (
`id` INT NOT NULL AUTO_INCREMENT,
`firstName` VARCHAR(100) NOT NULL,
`lastName` VARCHAR(100) NULL,
`username` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`));

Untuk mendemonstrasikan operasi AUTO_INCREMENT, kami akan menyisipkan beberapa baris seperti yang ditunjukkan di bawah ini.

# Insert Rows
INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values('John', 'Dave', 'johndave007');
INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values('Vijay', 'Mallik', 'mallikvijay');
INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values('Ricky', 'Walker', 'rickyhunt');
INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values('Vikas', 'Roy', 'vikasroy');

AUTO_INCREMENT Baca Contoh

 

Kita bisa mendapatkan nilai AUTO_INCREMENT saat ini untuk tabel apa pun menggunakan kueri seperti yang ditunjukkan di bawah ini. Ini mungkin tidak mencerminkan nilai dengan benar karena INFORMATION_SCHEMA menunjukkan nilai perkiraan yang mungkin bukan nilai sebenarnya.

# Syntax
SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '<database>' AND TABLE_NAME = '<table>';

# Example
SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'autoinc' AND TABLE_NAME = 'user';

# Result
---------------
AUTO_INCREMENT
---------------
5

Sekarang tunggu sebentar dan jalankan kueri yang disebutkan di bawah ini.

INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values( 'Nick', 'Jones', 'nick' );

SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'autoinc' AND TABLE_NAME = 'user';

# Result
---------------
AUTO_INCREMENT
---------------
5

Itu masih menunjukkan nilai AUTO_INCREMENT sebagai 5, tetapi nilai yang diharapkan adalah 6. Inilah yang saya maksud dengan nilai perkiraan.

Kita juga dapat memanggil fungsi LAST_INSERT_ID untuk mendapatkan AUTO_INCREMENT nilai kurang satu segera setelah menjalankan kueri INSERT. Mungkin bukan yang terbaik untuk mendapatkan nilai AUTO_INCREMENT menggunakan LAST_INSERT_ID di sebagian besar skenario, terutama dalam produksi.

# Example
INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values('Nicolas', 'Dave', 'nicolas' );
SELECT LAST_INSERT_ID() as `id`;

# Result
---------------
id
---------------
6

Setelah menjalankan kueri di atas, nilai AUTO_INCREMENT yang diharapkan adalah 7, dan memanggil LAST_INSERT_ID() menunjukkan 6 yang benar, tetapi mungkin tidak ideal untuk menggunakan LAST_INSERT_ID() untuk mendapatkan nilai AUTO_INCREMENT.

Cara lain untuk mendapatkan nilai AUTO_INCREMENT adalah dengan menggunakan perintah SHOW seperti gambar di bawah ini. Ini juga menunjukkan nilai perkiraan yang mungkin bukan nilai sebenarnya.

# Syntax
SHOW TABLE STATUS FROM `<database>` WHERE `name` LIKE '<table>';

# Example
SHOW TABLE STATUS FROM `autoinc` WHERE `name` LIKE 'user';

# Result
------------------------------
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
------------------------------
user InnoDB 10 Dynamic 4 4096 16384 0 0 0 5 2020-05-26 20:01:31 2020-05-26 20:04:14 NULL utf8mb4_unicode_ci NULL

Nilai Baris adalah 4 dan Peningkatan_Otomatis adalah 5 yang bukan nilai sebenarnya. Ini adalah nilai perkiraan.

Untuk mendapatkan nilai yang tepat, kita dapat menggunakan perintah SHOW CREATE seperti yang ditunjukkan di bawah ini.

# Example
SHOW CREATE TABLE user;

# Result
Table Create Table
------------------------------
user CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`firstName` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`lastName` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`username` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

Ini menunjukkan nilai yang tepat dari atribut AUTO_INCREMENT.

Contoh Pembaruan AUTO_INCREMENT

Untuk memperbarui nilai AUTO_INCREMENT, kita dapat menggunakan kueri ALTER seperti yang ditunjukkan di bawah ini. Sangat mudah untuk mengatur nilai AUTO_INCREMENT dari tabel kosong karena MySQL tidak perlu membuat salinan dari baris yang ada untuk menjalankan perintah ALTER. Selain itu, kita dapat menyetel ulang AUTO_INCREMENT ke 1 atau menyetelnya ke nilai yang diinginkan untuk memulai urutan.

# Syntax
ALTER TABLE <table> AUTO_INCREMENT = <value>;

# Examples

ALTER TABLE `autoinc`.`user` AUTO_INCREMENT = 1;

ALTER TABLE user AUTO_INCREMENT = 1;

ALTER TABLE `autoinc`.`user` AUTO_INCREMENT = 100000;

Ringkasan

Tutorial ini memberikan kueri dengan contoh untuk mendapatkan nilai atribut AUTO_INCREMENT dari tabel InnoDB. Itu juga memberikan contoh untuk memperbarui atribut AUTO_INCREMENT.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi kata sandi MySQL

  2. Bagaimana menghubungkan ke MySQL menggunakan Microsoft .NET

  3. Cara Menghitung Rata-Rata Penjualan Per Minggu di MySQL

  4. Pencarian tidak sensitif diakritik MySQL (aksen Spanyol)

  5. Hapus duplikat hanya menggunakan kueri MySQL?