Saya mampu beradaptasi petunjuk ini mengambil meja dengan yang ada primary key non-increment, dan menambahkan kunci utama incrementing ke meja dan membuat kunci primer komposit baru dengan kedua tombol lama dan baru sebagai kunci utama komposit menggunakan berikut kode:
DROP TABLE IF EXISTS SAKAI_USER_ID_MAP;
CREATE TABLE SAKAI_USER_ID_MAP (
USER_ID VARCHAR (99) NOT NULL,
EID VARCHAR (255) NOT NULL,
PRIMARY KEY (USER_ID)
);
INSERT INTO SAKAI_USER_ID_MAP VALUES ('admin', 'admin');
INSERT INTO SAKAI_USER_ID_MAP VALUES ('postmaster', 'postmaster');
ALTER TABLE SAKAI_USER_ID_MAP
DROP PRIMARY KEY,
ADD _USER_ID INT AUTO_INCREMENT NOT NULL FIRST,
ADD PRIMARY KEY ( _USER_ID, USER_ID );
Saat ini selesai, bidang _USER_ID ada dan memiliki semua nilai angka untuk kunci utama persis seperti yang Anda harapkan. Dengan "DROP TABLE" di bagian atas, Anda dapat menjalankan ini berulang-ulang untuk bereksperimen dengan variasi.
Apa yang saya belum dapat bekerja adalah situasi di mana ada KUNCI ASING masuk yang sudah menunjuk pada bidang USER_ID. Saya mendapatkan pesan ini ketika saya mencoba melakukan contoh yang lebih kompleks dengan kunci asing yang masuk dari tabel lain.
#1025 - Error on rename of './zap/#sql-da07_6d' to './zap/SAKAI_USER_ID_MAP' (errno: 150)
Saya menduga bahwa saya perlu menghancurkan semua kunci asing sebelum melakukan tabel ALTER dan kemudian membangunnya kembali setelah itu. Tetapi untuk sekarang saya ingin membagikan solusi ini ke versi yang lebih menantang dari pertanyaan awal jika orang lain menghadapi situasi ini.
alter table
untuk menambahkan kunci, tetapi MySQL tidak akan menghasilkan ID untuk bidang yang belum memilikinya. Anda harus secara manual memperbarui bidang yang ada dan kemudian memastikan auto_increment baru Anda mulai dari offset yang tepat - standarnya adalah '1' dan Anda hanya akan berakhir dengan kesalahan kunci duplikat.