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

Ngăn chặn tự động gia tăng trên chèn trùng lặp MySQL

Bạn có thể sửa đổi CHÈN của mình thành một cái gì đó như thế này:

INSERT INTO tablename (tag)
SELECT $tag
FROM tablename
WHERE NOT EXISTS(
    SELECT tag
    FROM tablename
    WHERE tag = $tag
)
LIMIT 1

Nơi $tag là thẻ (được trích dẫn chính xác hoặc tất nhiên là một trình giữ chỗ) mà bạn muốn thêm nếu nó chưa có ở đó. Cách tiếp cận này thậm chí sẽ không kích hoạt INSERT (và sự lãng phí tự động tăng thêm sau đó) nếu thẻ đã ở đó. Bạn có thể nghĩ ra câu SQL đẹp hơn thế nhưng phần trên sẽ thành công.

Nếu bảng của bạn được lập chỉ mục đúng cách thì việc CHỌN bổ sung để kiểm tra sự tồn tại sẽ nhanh chóng và cơ sở dữ liệu sẽ phải thực hiện kiểm tra đó.

Tuy nhiên, cách tiếp cận này sẽ không hoạt động đối với thẻ đầu tiên. Bạn có thể tạo bảng thẻ của mình bằng một thẻ mà bạn nghĩ rằng sẽ luôn được sử dụng hoặc bạn có thể thực hiện kiểm tra riêng cho bảng trống.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cảnh báo:mysqli_connect ():(HY000 / 2002):Không có tệp hoặc thư mục như vậy

  2. Các lựa chọn thay thế MySQL Workbench hàng đầu

  3. Khắc phục “ERROR 1054 (42S22):Cột không xác định‘… ’trong‘ mệnh đề thứ tự ”khi sử dụng UNION trong MySQL

  4. Trong Apache Spark 2.0.0, có thể tìm nạp một truy vấn từ cơ sở dữ liệu bên ngoài (thay vì lấy toàn bộ bảng) không?

  5. Hướng dẫn sử dụng MySQL - Hiểu được những giây đằng sau giá trị chính