Chủ Nhật, 17 tháng 5, 2026

Duplicate Entry là gì? Khi MySQL nói: "Xin lỗi, cái này đã tồn tại rồi!"

Cái này thực tế không phải là lỗi...mà là "chuyện nhỏ", chỉ là "quên chút thôi", đâu có gì "to tát". Bạn tạo form đăng ký tài khoản.

Người dùng nhập:

  • Username: admin
  • Email: admin@gmail.com

Bấm nút Đăng ký.

Mọi thứ hoạt động hoàn hảo.


Một lát sau, bạn thử đăng ký lại đúng email đó.

Và MySQL lập tức “gắt nhẹ”:

Duplicate entry 'admin@gmail.com' for key 'email'

Bạn nhìn dòng thông báo.

MySQL nhìn lại bạn.

Hai "đứa" rõ ràng đều rất...bực mình và nghĩ là "đứa kia" có vấn đề!

Ý của nó rất đơn giản:

“Bạn đã gửi cho tôi thứ mà tôi đã có rồi.” 🤡


Duplicate Entry là gì?

Nói ngắn gọn:

Duplicate entry nghĩa là bạn đang cố thêm một giá trị đã tồn tại trong cột được đặt UNIQUE.



Lỗi Duplicate entry trong MySQL xảy ra khi câu lệnh INSERT hoặc UPDATE cố gắng ghi một giá trị đã tồn tại vào cột có ràng buộc:

  • PRIMARY KEY
  • UNIQUE

Ví dụ đời thường

Hãy tưởng tượng mỗi công dân chỉ có một số căn cước duy nhất.

Nếu đã có người mang số:

0123456789

thì không thể cấp lại số đó cho người khác.

Mặt khác, cũng "cùng một địa chỉ" thì lại có thể có tên nhiều người trong gia đình.


👉 Database cũng hoạt động tương tự.

Một số giá trị có thể gắn với nhiều bảng ghi. Một số giá trị phải là duy nhất.


Ví dụ đơn giản

Tạo bảng users

CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(100) UNIQUE
);

Lần insert đầu tiên

INSERT INTO users (email)
VALUES ('admin@gmail.com');

✅ Thành công.


Lần insert thứ hai

INSERT INTO users (email)
VALUES ('admin@gmail.com');

❌ Lỗi:

Duplicate entry 'admin@gmail.com' for key 'email'

UNIQUE là gì?

UNIQUE có nghĩa:

Cột này không được phép có hai giá trị giống nhau.


Ví dụ rất thường gặp:

  • email
  • username
  • số điện thoại
  • mã sản phẩm
  • số căn cước

PRIMARY KEY cũng là UNIQUE

Ví dụ:

id INT AUTO_INCREMENT PRIMARY KEY

Mỗi id đều phải duy nhất.


Khi nào bạn thường gặp lỗi này?


❌ 1. Người dùng đăng ký email đã tồn tại

Tình huống phổ biến nhất.


❌ 2. Bạn bấm Submit nhiều lần

Người dùng sốt ruột.

Bấm:

  • 1 lần
  • 2 lần
  • 3 lần 😅

👉 Lần đầu thành công, các lần sau gây duplicate entry.


❌ 3. Import dữ liệu trùng


❌ 4. Chạy lại script seed dữ liệu


❌ 5. Update thành giá trị đã tồn tại


Ví dụ thực tế bằng PHP

$sql = "INSERT INTO users (email)
VALUES ('$email')";

if (mysqli_query($conn, $sql)) {
echo "Đăng ký thành công";
} else {
echo "Lỗi: " . mysqli_error($conn);
}

Nếu email đã tồn tại, bạn sẽ thấy:

Duplicate entry 'admin@gmail.com' for key 'email'

Cách xử lý chuyên nghiệp

Kiểm tra trước khi insert

$sql = "SELECT * FROM users WHERE email='$email'";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
echo "Email này đã được sử dụng.";
} else {
// INSERT
}

Ví dụ đời thường

Trước khi bán vé máy bay, hệ thống kiểm tra:

“Ghế 12A đã có người ngồi chưa?”

Nếu có rồi:

“Xin vui lòng chọn ghế khác.” 😅


INSERT IGNORE

INSERT IGNORE INTO users (email)
VALUES ('admin@gmail.com');

👉 Nếu trùng, MySQL sẽ bỏ qua mà không báo lỗi.


ON DUPLICATE KEY UPDATE

INSERT INTO users (email, name)
VALUES ('admin@gmail.com', 'Admin')
ON DUPLICATE KEY UPDATE
name = 'Admin';

👉 Nếu chưa tồn tại → INSERT.

👉 Nếu đã tồn tại → UPDATE.


Cách debug nhanh

In lỗi

echo mysqli_error($conn);

Kiểm tra cột UNIQUE

Trong phpMyAdmin, xem tab Structure.


Chạy thử câu SQL

Copy câu SQL vào phpMyAdmin để kiểm tra.


Ví dụ “đau lòng”

Bạn viết website đăng ký.

Thử lần đầu.

Thành công.


Bạn sửa giao diện.

Thử lại.

MySQL báo:

Duplicate entry 'test@gmail.com'

Bạn tưởng code hỏng.

Thực ra chỉ vì:

Email đó đã tồn tại từ lần test trước 😅


Checklist “cứ theo là ra”

Khi gặp Duplicate entry:

  1. Đọc kỹ giá trị bị trùng.
  2. Xem cột nào có UNIQUE.
  3. Kiểm tra dữ liệu hiện có.
  4. Kiểm tra người dùng đã đăng ký chưa.
  5. Dùng SELECT trước khi INSERT.

Một sự thật hơi “đau”

Rất nhiều lỗi Duplicate entry không phải do code sai.

👉 Code hoàn toàn đúng.

👉 Database chỉ đang bảo vệ dữ liệu khỏi bị trùng lặp.


Tổng kết

Duplicate entry nghĩa là:

Bạn đang cố lưu một giá trị đã tồn tại trong cột phải duy nhất.


Những cột thường gặp:

  • email
  • username
  • phone
  • product_code

👉 Đây không phải “thảm họa”.

👉 Thật ra đây là dấu hiệu database đang làm đúng nhiệm vụ của nó 😎


FAQ nhanh

Duplicate entry có phải lỗi nghiêm trọng không?

→ Không. Đây là lỗi rất phổ biến.


Có nên kiểm tra trước khi INSERT?

→ Có, gần như luôn luôn.


Email nên đặt UNIQUE không?

→ Chắc chắn nên.


👉 Bạn có thể cũng đang gặp

  • INSERT không chạy
  • Query không có dữ liệu
  • SQL syntax error
  • Cannot connect to database

Không có nhận xét nào:

Đăng nhận xét