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

Kiểm tra xem hàng tồn tại trong cơ sở dữ liệu trước khi chèn

Tốt hơn là bạn nên đặt giới hạn cho các cột của mình để ngăn dữ liệu trùng lặp thay vì kiểm tra và chèn.

Chỉ cần đặt một ràng buộc DUY NHẤT trên imdbid :

ALTER TABLE `requests` ADD UNIQUE `imdbid_unique`(`imdbid`);

Lý do của việc này là để bạn không gặp phải tình trạng cuộc đua .

Có một cửa sổ nhỏ giữa việc hoàn thành kiểm tra và thực sự chèn dữ liệu, và trong cửa sổ nhỏ đó, dữ liệu có thể được chèn vào sẽ xung đột với dữ liệu sẽ được chèn.

Sự hòa tan? Sử dụng các ràng buộc và kiểm tra $DBH->error() đối với lỗi chèn. Nếu có bất kỳ lỗi nào, bạn biết rằng có một bản sao và khi đó bạn có thể thông báo cho người dùng của mình.

Tôi nhận thấy rằng bạn đang sử dụng cái này, $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); . Trong trường hợp này, bạn không cần kiểm tra ->error() bởi vì PDO sẽ ném ra một ngoại lệ. Chỉ cần kết thúc việc thực thi của bạn với try và catch như thế này:

$duplicate = false;

try {
    $STH->execute();
} catch (Exception $e) {
    echo "<p>Failed to Request ".$_POST['imdbid']."!</p>";
    $duplicate = true;
}

if (!$duplicate)
    echo "<p>Successfully Requested ".$_POST['imdbid']."! Thanks!</p>";


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql chọn các hàng riêng biệt thành một cột danh sách được phân tách bằng dấu phẩy

  2. Quyền bị từ chối khi gắn ổ đĩa Docker trong OSX

  3. truy cập đồng thời vào cơ sở dữ liệu MySQL bằng thủ tục được lưu trữ

  4. MySQL dual master

  5. Thiết kế cơ sở dữ liệu cho các ứng dụng sử dụng thẻ bắt đầu bằng #