Bolehkah saya Auto-Tambah Kunci Bukan Utama dalam MySQL InnoDB?

DDD
Lepaskan: 2024-11-01 17:16:30
asal
1003 orang telah melayarinya

Can I Auto-Increment a Non-Primary Key in MySQL InnoDB?

MySQL InnoDB: Auto-Incrementing Non-Primary Keys

Dalam MySQL InnoDB, adalah mungkin untuk menambah automatik kunci bukan utama lajur, tetapi berbuat demikian secara amnya tidak disyorkan.

Soalan:

Adakah mungkin untuk menambah kunci bukan utama secara automatik, khususnya lajur comment_id dalam book_comments jadual?

Alternatif:

Penyoal mencadangkan dua alternatif untuk menggunakan kunci bukan utama penambahan automatik:

  • Membuat komen_id kunci utama dan menguatkuasakan integriti dengan indeks unik pada (id_buku, cap masa, id_pengguna)
  • Menyimpan kunci utama sedia ada dan menggantikan komen_id dengan keseluruhan kunci utama dalam jadual book_comments_votes

Walau bagaimanapun , alternatif ini mempunyai kelemahan seperti menambah overhed indeks yang tidak perlu atau meningkatkan saiz jadual dengan ketara.

Jawapan:

Ya, adalah mungkin untuk menambah secara automatik bukan utama kunci dengan mencipta indeks pada lajur itu. Contoh berikut mencipta jadual dengan lajur autoincrementing testInc:

<code class="sql">CREATE TABLE `test` (
  `testID` int(11) NOT NULL,
  `string` varchar(45) DEFAULT NULL,
  `testInc` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`testID`),
  KEY `testInc` (`testInc`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;</code>
Salin selepas log masuk

Walau bagaimanapun, pakar sangat menasihatkan agar tidak menggunakan amalan ini. Pendekatan yang lebih sesuai ialah menjadikan comment_id sebagai kunci utama dan menguatkuasakan integriti melalui indeks unik pada (book_id, timestamp, user_id). Pendekatan ini menyediakan kunci utama yang sesuai untuk jadual dan mematuhi prinsip paling tidak terkejut.

Atas ialah kandungan terperinci Bolehkah saya Auto-Tambah Kunci Bukan Utama dalam MySQL InnoDB?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!