2011-10-30 34 views
6

Tôi thiết lập cơ sở dữ liệu, với cột tăng tự động vốn có nghĩa là ID. Vấn đề là tôi quên kiểm tra tự động tăng khi tạo bảng trong phpMyAdmin ... và không thông báo cho đến bây giờ! Vì vậy, những gì tôi có là một cái gì đó như:MySQL: Quên để đặt Tự động gia tăng

ID | column one | column two 
------------------------------------ 
0 | some value | some value 
0 | other value | something else 
0 | example val. | something 
0 | my example | something 

Về cơ bản, cột "tự động tăng" của tôi hiển thị số không trên bảng. Làm thế nào tôi có thể sửa đổi bảng này để hiển thị tăng tự động cho tất cả các hàng trước đó và tất cả các hàng trong tương lai?

+1

Bạn có lược đồ của bảng? –

Trả lời

8

Nếu bảng đã có sản phẩm nào bạn chỉ có thể làm:

ALTER TABLE mytable MODIFY COLUMN id bigint not null primary key auto_increment 

nhưng tôi không chắc chắn những gì sẽ xảy ra với hàng trong đó. Nó có thể là tốt nhất để tạo ra một cái mới với các định nghĩa chính xác, sao chép dữ liệu trên trừ cột id, thả bảng cũ (sai), và di chuyển một cái mới đến tên cũ.

-- Either: 
CREATE TABLE newtable LIKE mytable; 
ALTER TABLE newtable MODIFY COLUMN id bigint not null primary key auto_increment; 
-- or: 
CREATE TABLE newtable (
    id bigint not null primary key auto_increment, 
    column1 type1, 
    column2 type2, 
    ... 
); 

INSERT INTO newtable 
    (column1, column2, ...) 
    SELECT column1, column2, column3, ... 
    FROM mytable; 
-- Make SURE that insert worked BEFORE you drop the old table 
-- and lose data if it didn't. 
DROP TABLE mytable; 
ALTER TABLE newtable RENAME TO mytable; 

Tôi chắc chắn phpMyAdmin có khả năng thực hiện điều này một cách đồ họa hơn.

+0

Có, thao tác này sẽ hoạt động. Chỉ cần sửa đổi cột thành 'PRIMARY KEY' và' auto_increment'. –

+1

+1 giải pháp tốt nếu bạn có nhiều hồ sơ –

6

Đầu tiên cập nhật hồ sơ của bạn (nếu không bạn sẽ nhận được nhân đôi khóa chính):

UPDATE `tablename` SET id = 1 WHERE "column one" = 'some value'; 
UPDATE `tablename` SET id = 2 WHERE "column one" = 'other value'; 
UPDATE `tablename` SET id = 3 WHERE "column one" = 'example val.'; 
UPDATE `tablename` SET id = 4 WHERE "column one" = 'my example'; 

Sau đó, thêm khóa chính/auto_increment:

ALTER TABLE tablename MODIFY COLUMN id int(11) NOT NULL primary key auto_increment; 

Sau đó thiết lập các auto_increment tiếp theo:

ALTER TABLE tablename AUTO_INCREMENT = 5; 
+0

Cập nhật tất cả các hồ sơ sẽ rất chậm và tốn nhiều công sức nếu có nhiều hơn một vài dòng. – Kevin

+0

Tôi đồng ý, nhưng trong ví dụ có 4 hồ sơ. Tôi đã bình chọn của bạn nếu người dùng có nhiều hồ sơ –

4

Bạn có thể thả cột ID và tạo lại nó. Các id sẽ được gán lại, nếu bạn nhớ bật tăng tự động;)

Các vấn đề liên quan