Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

mysql - sau khi chèn bỏ qua lấy khóa chính

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSON mã hóa kết quả MySQL

  2. Truy vấn MySQL để trả về các hàng có chứa khoảng trắng

  3. Elo-nhiều-nhiều-nhiều - cách tải quan hệ xa một cách dễ dàng

  4. Chia chuỗi được phân tách bằng dấu phẩy -> FUNCTION db.CHARINDEX không tồn tại

  5. Cách cài đặt MySQL với phpMyAdmin trên Debian 7