SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key
Nếu bạn gặp phải lỗi trên trong Laravel, mình sẽ cho bạn lý do tại sao nó lại xảy ra và cách khắc phục lỗi đó.
Lỗi "Incorrect table definition" có thể xảy ra trong Laravel do nhiều vấn đề. Mình đã gặp lỗi này khi chạy lệnh php artisan migrate để tạo cơ sở dữ liệu trong Laravel. Mặc dù bản thân lỗi cung cấp cho chúng ta gợi ý về lý do tại sao nó xảy ra, nhưng điều đó không đủ hữu ích để xác định nguyên nhân gốc rễ của lỗi.
Sau đây là một ví dụ về mã gây ra lỗi trong trường hợp của mình.
bảng bills của mình
bảng bills của mình
Như bạn có thể thấy, chỉ có một cột Tự động tăng, tức là id. Trong khi lỗi cho thấy có nhiều hơn một cột tự động.
Nguyên nhân của lỗi là dòng $table->integer('id_customer',11); của mình. Ở đây mình đã chỉ định kích thước của số nguyên, đó là nguyên nhân gây ra lỗi.
Tham số thứ hai của trường số nguyên là để tăng tự động. Nếu nó được chỉ định, nó sẽ đặt tham số thứ hai là true, đại diện cho phần Tăng tự động. Do đó, tạo ra một cột tăng tự động khác và điều này gây ra lỗi.
Nếu bạn muốn đặt độ dài của trường số nguyên, bạn có thể làm điều đó bằng cách thêm length() để đặt độ dài của số nguyên. Đây là cách đặt cụ thể.
$table->integer('id_customer')->length(11);
Bạn nên biết rằng không chỉ integer() . Nếu bạn sử dụng bất kỳ kiểu dữ kiệu nào (bigInteger, mediumInteger, tinyInteger, smallInteger, ...vv) với tham số thứ hai khác 0. Bạn đang yêu cầu Laravel tạo một số nguyên với thuộc tính auto_increment được đặt thành true, điều này sẽ giống như “Incorrect table definition" và nó sẽ lỗi.