Inilah yang saya coba tetapi gagal:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
Apakah ada yang punya tip?
Inilah yang saya coba tetapi gagal:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
Apakah ada yang punya tip?
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 kata PRIMARY
:
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
FIRST
setelah AUTO_INCREMENT
, yang berarti, bahwa id
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 * ...
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:
ALTER TABLE `goods`
MODIFY COLUMN `id` INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT;
Jika tabel Anda cukup besar lebih baik tidak menggunakan pernyataan:
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
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:
create table goods (
id int(10) unsigned not null AUTO_INCREMENT
... other columns ...
primary key (id)
);
pindahkan semua data dari tabel lama ke yang baru, nonaktifkan kunci dan indeks untuk mempercepat penyalinan:
- GUNAKAN INI UNTUK TABEL MyISAM :
SET UNIQUE_CHECKS=0;
ALTER TABLE goods DISABLE KEYS;
INSERT INTO goods (... your column names ...) SELECT ... your column names FROM goods_old;
ALTER TABLE goods ENABLE KEYS;
SET UNIQUE_CHECKS=1;
- GUNAKAN INI UNTUK TABEL InnoDB :
SET AUTOCOMMIT = 0; SET UNIQUE_CHECKS=0; SET FOREIGN_KEY_CHECKS=0;
INSERT INTO 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.
Tidak yakin apakah ini masalah bagi orang lain, tetapi saya lebih suka tabel id daripada kolom pertama dalam database. Sintaksnya adalah:
ALTER TABLE your_db.your_table ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT FIRST;
Yang hanya sedikit perbaikan dari jawaban pertama. Jika Anda ingin berada di posisi yang berbeda, maka
ALTER TABLE unique_address ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT AFTER some_other_column;
HTH, -ft
Gunakan kueri ini,
alter table `table_name` add primary key(`column_name`);
Kode ini berfungsi di mysql db saya:
ALTER TABLE `goods`
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`id`);
ALTER TABLE GOODS MODIFY ID INT(10) NOT NULL PRIMARY KEY;
Coba ini,
alter table goods add column `id` int(10) unsigned primary key auto_increment
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
TAMBAHKAN id
INT BUKAN NULL AUTO_INCREMENT PERTAMA, TAMBAHKAN KUNCI UTAMA ( id
);
Hapus tanda kutip agar berfungsi dengan baik ...
alter table goods add column id int(10) unsigned primary KEY AUTO_INCREMENT;