Tôi nói rằng bạn không làm điều đó, vì hai lý do:
- thông báo lỗi hơi không rõ ràng: ERROR 1062 (23000):Mục nhập trùng lặp 'xxx' cho khóa 1 . Bạn có luôn chắc chắn 100% khóa nào là 1 không?
- nó gắn bạn với một nhà cung cấp cơ sở dữ liệu cụ thể
Tôi thấy giao dịch đơn giản hơn :
- kiểm tra sự tồn tại của hàng;
- ném một ngoại lệ nếu hàng đã tồn tại;
- chèn hàng mới.
Vấn đề về hiệu suất :
Tôi nói đo hai lần, cắt một lần . Lập hồ sơ việc sử dụng cho trường hợp sử dụng cụ thể của bạn. Tôi muốn nói rằng hiệu suất sẽ không có vấn đề gì ngoại trừ các trường hợp sử dụng db nặng.
Lý do là khi bạn thực hiện SELECT
trên hàng cụ thể đó, dữ liệu của hàng đó sẽ được đặt trong bộ nhớ đệm của cơ sở dữ liệu và ngay lập tức được sử dụng để kiểm tra chèn được thực hiện trên chỉ mục cho INSERT
bản tường trình. Cũng nên nhớ rằng quyền truy cập này được hỗ trợ bởi một chỉ mục dẫn đến kết luận rằng hiệu suất sẽ không phải là vấn đề.
Nhưng, như mọi khi, hãy đo lường.