Mục nhập khóa trùng lặp xảy ra khi bạn đạt đến giới hạn trên của trường tăng tự động, trong trường hợp của bạn, là một int đã ký, ranh giới trên là 2147483647
Khi bản ghi cuối cùng có id 2147483647, khi bạn chèn bản ghi mới, id sẽ là 2147483648. Nhưng mysql giảm nó trong phạm vi hợp lệ và cố gắng chèn id 2147483647, do đó, nó tạo ra một mục khóa trùng lặp
IMHO tốt hơn hết là thay đổi trường chỉ mục, đặt nó thành unsigned int [4294967295] hoặc unsigned bigint [18446744073709551615]. Có lẽ int không dấu là đủ cho yêu cầu của khách hàng của bạn và nó sử dụng 4 byte thay vì 8 của int lớn để chỉ mục sẽ làm điều đó tốt hơn về cpu và bộ nhớ
ALTER TABLE test SỬA ĐỔI id INT UNSIGNED NOT NULL AUTO_INCREMENT;
Giải pháp hiện tại hoạt động vì bạn đang sử dụng lại id của các hàng đã bị xóa, lỗi khóa trùng lặp sẽ xảy ra một lần nữa tùy thuộc vào cách các hàng có thể bị xóa khỏi bảng trước đó
Ngày 15/4/2017 1. 33h, troll nổi tiếng Thomas 'Đầu Nhọn' Lahn viết
> Jerry Stuckle đã viết
>
>> Ngày 15/4/2017 10. 05 giờ sáng, Thomas 'Tai nhọn' Lahn đã viết
>>> Tôi KHÔNG nói rằng nó giải quyết được vấn đề. Tập đọc
>> Bạn nói. ". miễn là một người *biết* rằng bất kỳ khóa ngoại nào đề cập đến
>> đến bảng đó cũng không hợp lệ, thì không có vấn đề gì. "
>>
>> Không có vấn đề thì phải giải quyết vấn đề. bạn không thể
>> backpedal ra khỏi nó
>
> Bạn nên lắng nghe những lời lảm nhảm vô tâm của mình một lúc
>
>>> Tính toàn vẹn của dữ liệu không thể bị xâm phạm khi nhập vì KHÔNG CÓ GÌ LIÊN QUAN
>>> đang tham khảo bảng YET
>>
>> Một lần nữa, bạn cho thấy mình KHÔNG HIỂU GÌ về tính toàn vẹn của dữ liệu trong một
>> cơ sở dữ liệu quan hệ
>
> Nồi gọi ấm đen
>
>> Nhập dữ liệu vào 2 bảng liên quan là liên quan
>
> Nhưng chúng KHÔNG NÊN có liên quan trong trường hợp này theo bất kỳ ý nghĩa thực tế nào của
> từ. KHÔNG NÊN có bất kỳ bản ghi nào trong bảng đầu tiên đề cập đến
> cái thứ hai vì cái thứ hai là Rỗng. [Các ràng buộc khóa ngoại có thể
> đảm bảo điều đó đang hoạt động, nhưng không phải với MyISAM; . ]
>
theo bạn, bạn không thể
> Nếu nó ĐÃ BỊ HỎNG, bạn KHÔNG THỂ phá vỡ nó LẠI
>
> Còn AISB nếu nó BỊ HỎNG thì cần phải SỬA TRƯỚC. TRƯỚC
> cố gắng nhập BẤT CỨ ĐIỀU GÌ khác
>
>>>> Dữ liệu được chèn vào cơ sở dữ liệu mới KHÔNG "rỗng"
>>> Tôi KHÔNG nói rằng *dữ liệu* trống. Tập đọc
>>
>> Một lần nữa. "Tôi phải nhấn mạnh *một lần nữa* rằng bảng mục tiêu *trong này
>>>>> trường hợp* là *trống*. "
>>
>> Không có chuyện "dữ liệu rỗng"
>
> Thỉnh thoảng bạn nên lắng nghe những tiếng lảm nhảm rời rạc, không nhất quán của mình
>
> Nếu không có thứ gọi là ?dữ liệu trống?, tại sao bạn lại tuyên bố rằng có
> có thể được?
>
> Và tôi KHÔNG nói rằng có DỮ LIỆU trống. A nói rằng mục tiêu BẢNG
> trống ở đây. Giờ đã hiểu?
>
>>>>> JACK và chỉ *cố gắng* thêm khóa chính [hoặc bất kỳ khóa nào khác]
>>>>> [quay lại] với các kiểm tra chính *đã bật* sẽ *dẫn đến* trong việc *phát hiện* những kiểm tra đó
>>>>> mâu thuẫn rồi. AISB
>>>> Nó * CÓ THỂ * phát hiện sự không nhất quán. Ví dụ, nếu có một người nước ngoài
>>>> key trỏ đến khóa chính không tồn tại, nó sẽ phát hiện ra rằng
>>>> Tuy nhiên, nếu khóa ngoại trỏ đến *WRONG ROW* vì *THE
>>>> PRIMARY KEY ĐÃ THAY ĐỔI*, không phát hiện lỗi
>>>
>>> Nhưng TRONG TRƯỜNG HỢP NÀY, không nên có khóa ngoại đề cập đến điều đó
>>> bảng ở nơi đầu tiên. Nếu đúng như vậy, tính toàn vẹn của dữ liệu đã được
>>> bị xâm phạm
>>
>> Vớ vẩn. Rất có thể đã có một khóa ngoại liên quan
>
> Nhưng sau đó SỰ TÍCH HỢP DỮ LIỆU SẼ BỊ XÂM PHẠM
>
>> Nhưng việc đánh số lại khóa chính của bảng hiện đã phá vỡ điều đó
>> mối quan hệ
>
> Có các bản ghi trong bất kỳ bảng nào tham chiếu đến bảng mục tiêu EMPTY
> bằng khóa ngoại, thì mối quan hệ ĐÃ BỊ HỎNG. Hoặc KHÔNG CÓ
> các bản ghi như vậy, thì KHÔNG CÓ GÌ sẽ bị phá vỡ bằng cách thêm dữ liệu vào BẢNG Rỗng
>
Cơ sở dữ liệu quan hệ. Nhưng điều đó khá bình thường đối với bạn. Không có thắc mắc
bạn là một troll nổi tiếng trong rất nhiều nhóm tin tức. Bạn nhấn mạnh vào
thể hiện sự thiếu hiểu biết của bạn hết lần này đến lần khác