Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

tạo một ID trong bảng mysql auto_increment (sau thực tế)

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ố:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đăng hàm Javascript và gọi tập lệnh php

  2. MySQL / Hibernate - Làm cách nào để gỡ lỗi một kết nối gộp MySQL liên tục bị rớt?

  3. Ý nghĩa của KHÔNG ĐẦY ĐỦ ĐỊNH NGHĨA '' là gì?

  4. Đại diện cho thời gian không có ngày tháng bằng ruby

  5. MariaDB không thể khởi động sau khi cập nhật:[Cảnh báo] Không thể tạo tệp thử nghiệm /home/mysql/beta.lower-test