Ví dụ:đây là một bảng có khóa chính nhưng không phải là AUTO_INCREMENT
:
mysql> CREATE TABLE foo (
id INT NOT NULL,
PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);
Bạn có thể MODIFY
cột để xác định lại nó với AUTO_INCREMENT
tùy chọn:
mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
Xác minh rằng điều này đã có hiệu lực:
mysql> SHOW CREATE TABLE foo;
Kết quả đầu ra:
CREATE TABLE foo (
`id` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
Lưu ý rằng bạn đã sửa đổi định nghĩa cột tại chỗ mà không yêu cầu tạo cột thứ hai và bỏ cột ban đầu. PRIMARY KEY
ràng buộc không bị ảnh hưởng và bạn không cần phải đề cập đến trong ALTER TABLE
tuyên bố.
Tiếp theo, bạn có thể kiểm tra xem một chèn có tạo ra giá trị mới không:
mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;
Kết quả đầu ra:
+----+
| id |
+----+
| 1 |
| 2 |
| 5 |
| 6 |
+----+
4 rows in set (0.00 sec)
Tôi đã thử nghiệm điều này trên MySQL 5.0.51 trên Mac OS X.
Tôi cũng đã thử nghiệm với ENGINE=InnoDB
và một bảng phụ thuộc. Sửa đổi id
định nghĩa cột không làm gián đoạn tính toàn vẹn của tham chiếu.
Để giải quyết lỗi 150 mà bạn đã đề cập trong nhận xét của mình, có thể đó là xung đột với các ràng buộc khóa ngoại. Tôi xin lỗi, sau khi tôi thử nghiệm nó, tôi nghĩ rằng nó sẽ hoạt động. Dưới đây là một số liên kết có thể giúp chẩn đoán sự cố:
- Lỗi mysql 1025 (HY000):Lỗi khi đổi tên của './foo' (errorno:150) có nghĩa là gì?
- http://www.simplicidade.org/notes/ archives / 2008/03 / mysql_errno_150.html