Trước hết, bạn nên biết rằng khóa và chỉ số là những từ đồng nghĩa trong MySQL. Nếu bạn xem tài liệu về Cú pháp TẠO BẢNG , bạn có thể đọc:
KEY
thường là một từ đồng nghĩa với INDEX
. Thuộc tính khóa PRIMARY KEY
cũng có thể được chỉ định giống như KEY
khi được đưa ra trong định nghĩa cột. Điều này đã được thực hiện để tương thích với các hệ thống cơ sở dữ liệu khác.
Bây giờ, loại lỗi bạn đang gặp phải có thể do hai nguyên nhân:
- Sự cố đĩa trên máy chủ MySQL
- Khóa / bảng bị hỏng
Trong trường hợp đầu tiên, bạn sẽ thấy rằng việc thêm giới hạn vào truy vấn của mình có thể giải quyết vấn đề tạm thời. Nếu điều đó phù hợp với bạn, có thể bạn có một tmp
thư mục quá nhỏ so với kích thước của các truy vấn mà bạn đang cố gắng thực hiện. Sau đó, bạn có thể quyết định hoặc làm tmp
lớn hơn hoặc thu nhỏ các truy vấn của bạn! ;)
Đôi khi, tmp
đủ lớn nhưng vẫn bị đầy, bạn sẽ cần phải dọn dẹp thủ công trong những trường hợp này.
Trong trường hợp thứ hai, có những vấn đề thực tế với dữ liệu của MySQL. Nếu bạn có thể chèn lại dữ liệu một cách dễ dàng, tôi khuyên bạn chỉ nên thả / tạo lại bảng và chèn lại dữ liệu. Nếu bạn không thể, bạn có thể thử sửa chữa bảng tại chỗ với bảng REPAIR . Đó là một quá trình thường kéo dài và rất có thể thất bại.
Xem thông báo lỗi hoàn chỉnh mà bạn nhận được:
Tệp khóa không chính xác cho bảng 'FILEPATH.MYI'; cố gắng sửa chữa nó
Nó đề cập trong thông báo rằng bạn có thể cố gắng sửa chữa nó. Ngoài ra, nếu bạn nhìn vào FILEPATH thực tế mà bạn nhận được, bạn có thể tìm hiểu thêm:
nếu nó giống như /tmp/#sql_ab34_23f
vậy có nghĩa là MySQL cần tạo một bảng tạm thời vì kích thước truy vấn. Nó lưu trữ nó trong / tmp và không có đủ dung lượng trong / tmp của bạn cho bảng tạm thời đó.
nếu nó chứa tên của một bảng thực thay thế, điều đó có nghĩa là bảng này rất có thể bị hỏng và bạn nên sửa chữa nó.
Nếu bạn xác định rằng sự cố của bạn là với kích thước / tmp, chỉ cần đọc câu trả lời này cho một câu hỏi tương tự để khắc phục: MySQL, Lỗi 126: Tệp khóa không chính xác cho bảng .