Bagi saya dikatakan: ini akan menentukan beberapa kunci utama. Saya menggunakan InnoDB. Perhatikan Saya sudah memiliki 3 dari mereka.
LMD
2
Saya pasti akan meletakkan FIRSTsetelah AUTO_INCREMENT, yang berarti, bahwa idakan menjadi kolom pertama dari tabel yang sudah ada. Jika tidak, itu akan diletakkan di ujung tabel seperti yang tertulis sekarang, yang bisa sedikit membingungkan ketika melakukan yang sederhanaSELECT * ...
StefanK
Cara mendapatkan tempat pertama ke kolom 'id' baru
TipVisor
17
Kolom yang Ada
Jika Anda ingin menambahkan batasan kunci utama ke kolom yang ada, semua sintaks yang terdaftar sebelumnya akan gagal.
Untuk menambahkan batasan kunci utama ke kolom yang ada, gunakan formulir:
mysql tidak mengenali MODIFY sebagai pernyataan yang tepat (setidaknya di XAMPP, InnoDB)
LMD
@LMD Anda menggunakan versi mysql apa? (CATATAN: Saya tahu ini berhasil pada saat saya memposting ini dan saya percaya itu 5,6 ... tapi saya tidak ingat pasti)
MER
1
Jika bagi Anda, seperti saya, tidak berhasil ganti MODIFY dengan CHANGE dan itu akan berhasil!
csr-nontol
12
Jika tabel Anda cukup besar lebih baik tidak menggunakan pernyataan:
karena itu membuat salinan dari semua data dalam tabel sementara, mengubah tabel dan kemudian menyalinnya kembali. Lebih baik lakukan secara manual. Ubah nama tabel Anda:
rename table goods to goods_old;
buat tabel baru dengan kunci utama dan semua indeks yang diperlukan:
createtable goods (
id int(10) unsigned notnull AUTO_INCREMENT... other columns ...primarykey(id));
pindahkan semua data dari tabel lama ke yang baru, nonaktifkan kunci dan indeks untuk mempercepat penyalinan:
SET UNIQUE_CHECKS=0;ALTERTABLE goods DISABLE KEYS;INSERTINTO goods (... your column names ...)SELECT... your column names FROM goods_old;ALTERTABLE goods ENABLE KEYS;SET UNIQUE_CHECKS=1;
SET AUTOCOMMIT =0;SET UNIQUE_CHECKS=0;SET FOREIGN_KEY_CHECKS=0;INSERTINTO goods (... your column names ...)SELECT... your column names FROM goods_old;SET FOREIGN_KEY_CHECKS=1;SET UNIQUE_CHECKS=1;COMMIT;SET AUTOCOMMIT =1;
Diperlukan 2000 detik untuk menambahkan PK ke tabel dengan ~ 200 juta baris.
Bagi saya, tidak ada saran yang berhasil memberi saya kesalahan sintaks, jadi saya hanya mencoba menggunakan phpmyadmin (versi 4.9.2), (10.4.10-MariaDB) dan menambahkan idkolom dengan kunci primer kenaikan otomatis. Idkolom dengan baik ditambahkan dari elemen pertama.
Output kueri adalah:
ALTER TABLE table_nameTAMBAHKAN idINT BUKAN NULL AUTO_INCREMENT PERTAMA, TAMBAHKAN KUNCI UTAMA ( id);
Jawaban:
Setelah menambahkan kolom, Anda selalu dapat menambahkan kunci utama:
ALTER TABLE goods ADD PRIMARY KEY(id)
Tentang mengapa skrip Anda tidak berfungsi, Anda perlu menentukan
PRIMARY KEY
, bukan hanya kataPRIMARY
:sumber
FIRST
setelahAUTO_INCREMENT
, yang berarti, bahwaid
akan menjadi kolom pertama dari tabel yang sudah ada. Jika tidak, itu akan diletakkan di ujung tabel seperti yang tertulis sekarang, yang bisa sedikit membingungkan ketika melakukan yang sederhanaSELECT * ...
Kolom yang Ada
Jika Anda ingin menambahkan batasan kunci utama ke kolom yang ada, semua sintaks yang terdaftar sebelumnya akan gagal.
Untuk menambahkan batasan kunci utama ke kolom yang ada, gunakan formulir:
sumber
Jika tabel Anda cukup besar lebih baik tidak menggunakan pernyataan:
karena itu membuat salinan dari semua data dalam tabel sementara, mengubah tabel dan kemudian menyalinnya kembali. Lebih baik lakukan secara manual. Ubah nama tabel Anda:
buat tabel baru dengan kunci utama dan semua indeks yang diperlukan:
pindahkan semua data dari tabel lama ke yang baru, nonaktifkan kunci dan indeks untuk mempercepat penyalinan:
- GUNAKAN INI UNTUK TABEL MyISAM :
ATAU
- GUNAKAN INI UNTUK TABEL InnoDB :
Diperlukan 2000 detik untuk menambahkan PK ke tabel dengan ~ 200 juta baris.
sumber
Tidak yakin apakah ini masalah bagi orang lain, tetapi saya lebih suka tabel id daripada kolom pertama dalam database. Sintaksnya adalah:
Yang hanya sedikit perbaikan dari jawaban pertama. Jika Anda ingin berada di posisi yang berbeda, maka
HTH, -ft
sumber
Gunakan kueri ini,
sumber
Kode ini berfungsi di mysql db saya:
sumber
sumber
Coba ini,
sumber
Bagi saya, tidak ada saran yang berhasil memberi saya kesalahan sintaks, jadi saya hanya mencoba menggunakan phpmyadmin (versi 4.9.2), (10.4.10-MariaDB) dan menambahkan
id
kolom dengan kunci primer kenaikan otomatis.Id
kolom dengan baik ditambahkan dari elemen pertama.Output kueri adalah:
ALTER TABLE
table_name
TAMBAHKANid
INT BUKAN NULL AUTO_INCREMENT PERTAMA, TAMBAHKAN KUNCI UTAMA (id
);sumber
Hapus tanda kutip agar berfungsi dengan baik ...
sumber