Rumah >pangkalan data >tutorial mysql >Bolehkah saya Auto-Tambah Kunci Bukan Utama dalam MySQL InnoDB?

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

DDD
DDDasal
2024-11-01 17:16:301117semak imbas

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>

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!

Kenyataan:
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