Saya memiliki tabel yang berisi id kunci primer yang ditambahkan secara otomatis. Jika saya menghapus baris terakhir (id tertinggi, untuk exampe id = 6) dan menyisipkan baris baru, id baru dimulai pada 7. Parameter apa yang harus saya ubah bahwa kunci utama dimulai pada 6?
CREATE TABLE animals (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM;
INSERT INTO animals (name) VALUES
('dog'),('cat'),('penguin'),
('lax'),('whale'),('ostrich');
Hasil:
id name
1 dog
2 cat
3 penguin
4 lax
5 whale
6 ostrich
DELETE FROM animals WHERE id = 6;
INSERT INTO animals (name) VALUES
('x');
Hasil:
id name
1 dog
2 cat
3 penguin
4 lax
5 whale
7 x
Terima kasih atas sarannya.
mysql
primary-key
mariadb
auto-increment
giordano
sumber
sumber
Jawaban:
Ini adalah desain - semua tindakan DBMS ini dengan kolom kenaikan otomatis.
Jika integritas integritas referensial mereka tidak dapat rusak. Untuk contoh sederhana ini, bayangkan Anda menyimpan URL untuk layanan pemendek menggunakan kolom kenaikan otomatis sebagai kunci. Anda tidak tahu apakah URL yang diperpendek telah diberikan kepada siapa pun, dan databasenya jelas tidak, jadi menggunakan kembali ID 1234 dapat mengakibatkan nenek miskin mengunjungi somenastypornsite.xxx alih-alih loverlyknitting.org ketika dia mengklik http: / /shortthi.ng/1234 di email lama, alih-alih menerima pesan "maaf tapi tautan ini tidak ada lagi di catatan kami".
Juga jika Anda mengatur ulang kenaikan setelah menghapus item terakhir, apakah Anda juga akan melalui semua pekerjaan (atau mengharapkan basis data) untuk menomori ulang semuanya setelah item ke-5 dari 5 juta ketika item ke-5 dihapus? lengkap dengan perubahan pada tabel lain di mana kendala kunci asingnya menunjuk pada kolom kenaikan? Pekerjaan ekstra semacam itu bisa sangat mahal untuk IO.
Jika Anda melakukan reset titik kenaikan setelah menghapus item terakhir, jangan menjadi sangat sangat berhati-hati dari tingkat isolasi transaksi Anda: Anda mungkin ulang seperti transaksi lain merek menggunakan dari nilai, yang mengarah ke kesalahan (atau lebih buruk, kegagalan diam), kecuali Anda memastikan bahwa tindakan Anda sepenuhnya 100% terisolasi.
Saya biasanya merekomendasikan orang yang bekerja dengan database membaca "SQL Antipatterns" yang memiliki bab tentang masalah ini bernama "Psuedo-Key Neat Freaks" (yang membahas masalah ini dengan cara yang lebih ramah daripada judul bab yang mungkin menyiratkan pada beberapa!). Pada dasarnya, jika nilai memiliki makna di luar menjadi kunci (atau paling banyak membawa informasi pesanan penyisipan) maka mungkin tidak boleh menjadi kolom penambahan-otomatis, dan jika itu tidak memiliki makna di luar menjadi kunci (atau paling banyak membawa urutan penyisipan informasi) maka kesenjangan seharusnya tidak menjadi masalah.
sumber
Anda dapat mengatur ulang nilai auto_increment menggunakan yang berikut:
Anda harus menentukan nilai maksimum yang ada dalam tabel, dan menambahkan 1 ke nilai itu untuk digunakan dalam pernyataan di atas.
sumber