Apakah mysql secara otomatis menambah kunci utama?

Atribut AUTO_INCREMENT dapat digunakan untuk menghasilkan identitas unik untuk baris baru. Saat Anda memasukkan catatan baru ke tabel (atau setelah menambahkan atribut AUTO_INCREMENT dengan pernyataan ALTER TABLE), dan bidang auto_increment adalah NULL atau DEFAULT (dalam kasus INSERT), nilainya akan bertambah secara otomatis. Ini juga berlaku untuk 0, kecuali diaktifkan

AUTO_INCREMENT kolom mulai dari 1 secara default. Nilai yang dihasilkan secara otomatis tidak boleh lebih rendah dari 0

Setiap tabel hanya dapat memiliki satu kolom AUTO_INCREMENT. Itu harus didefinisikan sebagai kunci (tidak harus kunci

SELECT * FROM animals;
+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | fox     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+
1 atau
SELECT * FROM animals;
+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | fox     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+
2). Di beberapa mesin penyimpanan (termasuk InnoDB default), jika kunci terdiri dari beberapa kolom, kolom AUTO_INCREMENT harus menjadi kolom pertama. Mesin penyimpanan yang mengizinkan kolom ditempatkan di tempat lain adalah Aria, MyISAM, MERGE, Spider, TokuDB, BLACKHOLE, FederatedX, dan Federated

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
 );

INSERT INTO animals (name) VALUES
    ('dog'),('cat'),('penguin'),
    ('fox'),('whale'),('ostrich');
SELECT * FROM animals;
+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | fox     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+

SELECT * FROM animals;
+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | fox     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+
4 adalah alias untuk
SELECT * FROM animals;
+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | fox     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+
5

CREATE TABLE t (id SERIAL, c CHAR(1)) ENGINE=InnoDB;

SHOW CREATE TABLE t \G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `c` char(1) DEFAULT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
_

Mengatur atau Mengubah Nilai Auto_Increment

Anda dapat menggunakan pernyataan

SELECT * FROM animals;
+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | fox     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+
6 untuk menetapkan nilai baru ke opsi tabel
SELECT * FROM animals;
+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | fox     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+
7, atau menyetel variabel sistem server untuk mengubah nilai AUTO_INCREMENT berikutnya yang disisipkan oleh sesi saat ini

SELECT * FROM animals;
+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | fox     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+
_9 dapat digunakan untuk melihat nilai AUTO_INCREMENT terakhir yang dimasukkan oleh sesi saat ini

ALTER TABLE animals AUTO_INCREMENT=8;

INSERT INTO animals (name) VALUES ('aardvark');

SELECT * FROM animals;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | dog       |
|  2 | cat       |
|  3 | penguin   |
|  4 | fox       |
|  5 | whale     |
|  6 | ostrich   |
|  8 | aardvark  |
+----+-----------+

SET insert_id=12;

INSERT INTO animals (name) VALUES ('gorilla');

SELECT * FROM animals;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | dog       |
|  2 | cat       |
|  3 | penguin   |
|  4 | fox       |
|  5 | whale     |
|  6 | ostrich   |
|  8 | aardvark  |
| 12 | gorilla   |
+----+-----------+

InnoDB

Sampai MariaDB 10. 2. 3, InnoDB menggunakan penghitung kenaikan otomatis yang disimpan di memori. Saat server dimulai ulang, penghitung diinisialisasi ulang ke nilai tertinggi yang digunakan dalam tabel, yang membatalkan efek opsi AUTO_INCREMENT = N apa pun dalam pernyataan tabel

Dari MariaDB 10. 2. 4, pembatasan ini telah dicabut dan AUTO_INCREMENT tetap ada

Lihat juga Penanganan AUTO_INCREMENT di InnoDB

Menetapkan Nilai Eksplisit

Dimungkinkan untuk menentukan nilai untuk kolom AUTO_INCREMENT. Jika kuncinya primer atau unik, nilainya tidak boleh ada di kunci

Jika nilai baru lebih tinggi dari nilai maksimum saat ini, nilai AUTO_INCREMENT diperbarui, sehingga nilai selanjutnya akan lebih tinggi. Jika nilai baru lebih rendah dari nilai maksimum saat ini, nilai AUTO_INCREMENT tetap tidak berubah

Contoh berikut menunjukkan perilaku ini

CREATE TABLE t (id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY) ENGINE = InnoDB;

INSERT INTO t VALUES (NULL);
SELECT id FROM t;
+----+
| id |
+----+
|  1 |
+----+

INSERT INTO t VALUES (10); -- higher value
SELECT id FROM t;
+----+
| id |
+----+
|  1 |
| 10 |
+----+

INSERT INTO t VALUES (2); -- lower value
INSERT INTO t VALUES (NULL); -- auto value
SELECT id FROM t;
+----+
| id |
+----+
|  1 |
|  2 |
| 10 |
| 11 |
+----+

Mesin penyimpanan ARCHIVE tidak memungkinkan untuk memasukkan nilai yang lebih rendah dari maksimum saat ini

Nilai yang hilang

Kolom AUTO_INCREMENT biasanya memiliki nilai yang hilang. Ini terjadi karena jika sebuah baris dihapus, atau nilai AUTO_INCREMENT diperbarui secara eksplisit, nilai lama tidak akan pernah digunakan kembali. Pernyataan REPLACE juga menghapus satu baris, dan nilainya terbuang sia-sia. Dengan InnoDB, nilai dapat dipesan melalui transaksi;

Jadi nilai AUTO_INCREMENT dapat digunakan untuk mengurutkan hasil dalam urutan kronologis, tetapi tidak untuk membuat urutan numerik

Untuk membuat master-master atau Galera aman digunakan AUTO_INCREMENT seseorang harus menggunakan variabel sistem dan menghasilkan nilai unik untuk setiap server

Bagaimana cara menambahkan kenaikan otomatis ke kunci utama di MySQL?

Untuk menambahkan kolom integer AUTO_INCREMENT baru bernama c. UBAH TABEL t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (c); Kami mengindeks c (sebagai PRIMARY KEY ) karena kolom AUTO_INCREMENT harus .

Bisakah kunci utama tidak berupa peningkatan otomatis?

Kuncinya bisa berupa PRIMARY KEY (atau bisa berupa indeks non-unik biasa), tetapi apa pun itu harus ada di kolom AUTO_INCREMENT.

Bagaimana saya tahu jika kunci utama saya adalah peningkatan otomatis?

Periksa apakah tabel memiliki kunci utama, dan dapatkan dari tabel table_info, menggunakan kueri di bawah. PRAGMA table_info(" 2. Anda dapat melihat hasil yang dikembalikan menggunakan CURSOR , dan hanya memilih yang memiliki nilai kolom "pk" berbeda dari 0, yang menunjukkan bahwa itu adalah Kunci Utama.