Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengalih Keluar Berbilang Kunci Utama dalam MySQL Semasa Menyimpan Satu?
Soalan: Bagaimanakah anda boleh mengalih keluar kunci utama daripada lajur dalam jadual MySQL sambil mengekalkan satu kunci utama?
Senario:
Pertimbangkan jadual berikut skema yang memetakan pelanggan pengguna kepada kebenaran dalam pangkalan data MySQL secara langsung:
mysql> describe user_customer_permission; +------------------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------------+---------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | user_customer_id | int(11) | NO | PRI | NULL | | | permission_id | int(11) | NO | PRI | NULL | | +------------------+---------+------+-----+---------+----------------+ 3 rows in set (0.00 sec)
Anda ingin mengalih keluar kunci utama untuk user_customer_id dan permission_id sambil mengekalkan id sebagai kunci utama. Walau bagaimanapun, cuba berbuat demikian dengan perintah alter table user_customer_permission drop primary key; mengakibatkan ralat:
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
Jawapan:
Lajur autoincrement memerlukan indeks. Tanpa indeks, mengekalkan lajur autoincrement menjadi terlalu mahal. Oleh itu, MySQL memerlukan lajur autoincrement untuk menjadi bahagian paling kiri indeks.
Untuk mengalih keluar kunci utama daripada user_customer_id dan permission_id, ikut langkah berikut:
Alih keluar sifat autoincrement daripada id:
ALTER TABLE user_customer_permission MODIFY id INT NOT NULL;
Lepaskan kunci utama:
ALTER TABLE user_customer_permission DROP PRIMARY KEY;
Perhatikan bahawa KUNCI UTAMA komposit pada asalnya meliputi ketiga-tiga lajur dan id tidak dijamin unik. Walau bagaimanapun, jika id adalah unik, anda boleh menjadikannya sebagai KUNCI UTAMA dan AUTO_INCREMENT sekali lagi:
ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;
Atas ialah kandungan terperinci Bagaimana untuk Mengalih Keluar Berbilang Kunci Utama dalam MySQL Semasa Menyimpan Satu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!