Chỉ có thể có một cột tự động


104

Làm cách nào để sửa lỗi từ MySQL 'bạn chỉ có thể có một cột tăng tự động'.

CREATE TABLE book (
   id INT AUTO_INCREMENT NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Câu trả lời:


119

My MySQL cho biết "Định nghĩa bảng không chính xác; chỉ có thể có một cột tự động và nó phải được định nghĩa là một khóa " Vì vậy, khi tôi thêm khóa chính như bên dưới, nó bắt đầu hoạt động:

CREATE TABLE book (
   id INT AUTO_INCREMENT NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL,
   primary key (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

6
Quy trình hành động chính xác là gì nếu cột là một phần của khóa tổng hợp?
Nubcake,

Cú pháp khi thay đổi bảng là gì?
Mike Harrison

2
@MikeHarrison trông giống như bạn chỉ có thể đặt ALTER TABLE book ADD id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id);
suxur

34

Thông báo lỗi đầy đủ sẽ phát ra:

ERROR 1075 (42000): Định nghĩa bảng không chính xác; chỉ có thể có một cột tự động và nó phải được xác định là một khóa

Vì vậy, hãy thêm primary keyvào auto_incrementtrường:

CREATE TABLE book (
   id INT AUTO_INCREMENT primary key NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

13

Cũng lưu ý rằng "chìa khóa" không nhất thiết có nghĩa là chính quan trọng. Một cái gì đó như thế này sẽ hoạt động:

CREATE TABLE book (
    isbn             BIGINT NOT NULL PRIMARY KEY,
    id               INT    NOT NULL AUTO_INCREMENT,
    accepted_terms   BIT(1) NOT NULL,
    accepted_privacy BIT(1) NOT NULL,
    INDEX(id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Đây là một ví dụ giả tạo và có lẽ không phải là ý tưởng hay nhất, nhưng nó có thể rất hữu ích trong một số trường hợp nhất định.


Điều này đã giúp tôi trong một tình huống mà tôi muốn xác định một khóa tổng hợp để dễ dàng cập nhật nhưng tôi cũng muốn có một ID tự động tăng dần cho mục đích gỡ lỗi. Có điều gì tôi nên biết về rủi ro, ngoài việc có thể viết chậm hơn một chút?
Mattias Martens

2
@Mattias Không, tôi không tin rằng có bất kỳ rủi ro cụ thể nào. Điều này được hỗ trợ có chủ đích, với cột tự động là khóa chính hoàn toàn theo quy ước (và để đơn giản).
Matthew Đọc

5
CREATE TABLE book (
   id INT AUTO_INCREMENT primary key NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.