นี่คือสิ่งที่ฉันพยายาม แต่ล้มเหลว:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
ใครมีเคล็ดลับ?
นี่คือสิ่งที่ฉันพยายาม แต่ล้มเหลว:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
ใครมีเคล็ดลับ?
คำตอบ:
หลังจากเพิ่มคอลัมน์แล้วคุณสามารถเพิ่มคีย์หลักได้ตลอดเวลา:
ALTER TABLE goods ADD PRIMARY KEY(id)
สาเหตุที่สคริปต์ของคุณไม่ทำงานคุณต้องระบุPRIMARY KEY
ไม่ใช่แค่คำว่าPRIMARY
:
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
FIRST
หลังจากAUTO_INCREMENT
ซึ่งหมายความว่าid
จะเป็นคอลัมน์แรกของตารางที่มีอยู่แล้ว มิฉะนั้นจะวางไว้ท้ายตารางตามที่เขียนไว้ตอนนี้ซึ่งอาจทำให้สับสนเล็กน้อยเมื่อทำแบบง่ายๆSELECT * ...
หากคุณต้องการเพิ่มข้อ จำกัด ของคีย์หลักลงในคอลัมน์ที่มีอยู่ไวยากรณ์ทั้งหมดที่ระบุไว้ก่อนหน้านี้จะล้มเหลว
หากต้องการเพิ่มข้อ จำกัด ของคีย์หลักให้กับคอลัมน์ที่มีอยู่ให้ใช้แบบฟอร์ม:
ALTER TABLE `goods`
MODIFY COLUMN `id` INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT;
หากโต๊ะของคุณค่อนข้างใหญ่อย่าใช้คำสั่ง:
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
เนื่องจากทำสำเนาข้อมูลทั้งหมดในตารางชั่วคราวให้แก้ไขตารางแล้วคัดลอกกลับ ทำด้วยตนเองดีกว่า เปลี่ยนชื่อตารางของคุณ:
rename table goods to goods_old;
สร้างตารางใหม่ด้วยคีย์หลักและดัชนีที่จำเป็นทั้งหมด:
create table goods (
id int(10) unsigned not null AUTO_INCREMENT
... other columns ...
primary key (id)
);
ย้ายข้อมูลทั้งหมดจากตารางเก่าไปยังใหม่ปิดใช้งานคีย์และดัชนีเพื่อเร่งการคัดลอก:
- ใช้สิ่งนี้สำหรับตาราง 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;
- ใช้สิ่งนี้สำหรับตาราง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;
ใช้เวลา 2,000 วินาทีในการเพิ่ม PK ลงในตารางที่มีแถว ~ 200 mln
ไม่แน่ใจว่าเรื่องนี้กับใครหรือเปล่า แต่ฉันชอบตาราง id ที่คอลัมน์แรกในฐานข้อมูล ไวยากรณ์สำหรับสิ่งนั้นคือ:
ALTER TABLE your_db.your_table ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT FIRST;
ซึ่งเป็นเพียงการปรับปรุงเล็กน้อยจากคำตอบแรก หากคุณต้องการให้มันอยู่ในตำแหน่งที่แตกต่างออกไป
ALTER TABLE unique_address ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT AFTER some_other_column;
HTH, -ft
ใช้คำค้นหานี้
alter table `table_name` add primary key(`column_name`);
รหัสนี้ทำงานในฐานข้อมูล mysql ของฉัน:
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;
ลองสิ่งนี้
alter table goods add column `id` int(10) unsigned primary key auto_increment
สำหรับฉันไม่มีคำแนะนำใดที่ทำให้ฉันมีข้อผิดพลาดของไวยากรณ์ดังนั้นฉันจึงลองใช้ phpmyadmin (เวอร์ชัน 4.9.2), (10.4.10-MariaDB) และเพิ่มid
คอลัมน์ด้วยคีย์หลักที่เพิ่มอัตโนมัติ Id
คอลัมน์ถูกเพิ่มเข้ามาอย่างดีจากองค์ประกอบแรก
ผลลัพธ์การค้นหาคือ:
แก้ไขตารางtable_name
เพิ่มid
INT not NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY ( id
);
ลบเครื่องหมายคำพูดเพื่อให้ทำงานได้อย่างถูกต้อง ...
alter table goods add column id int(10) unsigned primary KEY AUTO_INCREMENT;