Tài liệu
cho LAST_INSERT_ID()
nói:
Biết được điều này, bạn có thể biến đây thành một quy trình gồm nhiều bước:
- CHÈN BỎ QUA
- if LAST_INSERT_ID (), thì xong (hàng mới đã được chèn)
- else CHỌN khóa your_primary TỪ ĐÂU máy tính bảng của bạn (các ràng buộc DUY NHẤT của dữ liệu đã chèn của bạn)
Ví dụ với các tiểu bang của Hoa Kỳ:
id | abbrev | other_data
1 | AL | ...
2 | AK |
UNIQUE KEY abbr (abbrev)
Bây giờ, chèn một hàng mới:
INSERT IGNORE INTO `states` (`abbrev`,`other_data`) VALUES ('AZ','foo bar');
> OK
SELECT LAST_INSERT_ID();
> "3"
// we have the ID, we're done
Chèn một hàng sẽ bị bỏ qua:
INSERT IGNORE INTO `states` (`abbrev`,`other_data`) VALUES ('AK','duplicate!');
> OK
SELECT LAST_INSERT_ID();
> "0"
// oops, it already exists!
SELECT id FROM `states` WHERE `abbrev` = 'AK'; // our UNIQUE constraint here
> "2"
// there we go!
Ngoài ra, có một giải pháp khả thi để thực hiện việc này trong một bước - sử dụng REPLACE INTO
thay vì INSERT IGNORE INTO
- cú pháp tương tự
. Tuy nhiên, lưu ý rằng có tác dụng phụ với cách tiếp cận này - những điều này có thể có hoặc có thể không quan trọng đối với bạn:
- REPLACE xóa + tạo lại hàng
- do đó, trình kích hoạt DELETE được kích hoạt
- ngoài ra, ID chính sẽ được tăng lên ngay cả khi hàng tồn tại
-
INSERT IGNORE
giữ dữ liệu hàng cũ,REPLACE
thay thế nó bằng dữ liệu hàng mới