MySQL kiểm tra xem giá trị có tồn tại trước khi chèn không

Điều này là do khi bạn có [các] cột trong bảng có ràng buộc

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
8 hoặc
INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
9, thì MySQL sẽ đưa ra lỗi mỗi khi truy vấn của bạn chèn một hàng mới với các giá trị trùng lặp cho các cột đó

Tuy nhiên, nếu bạn chỉ muốn thực hiện thao tác chèn khi dữ liệu chưa tồn tại, thì bạn cần tạo một giải pháp khắc phục với các câu lệnh do MySQL cung cấp

Có ba cách bạn có thể thực hiện truy vấn “chèn nếu không tồn tại” trong MySQL

  • Sử dụng câu lệnh
    INSERT INTO users 
      [user_id, first_name, last_name] 
    VALUES 
      [202, "Tony", "Smith"];
    
    0
  • Sử dụng mệnh đề
    INSERT INTO users 
      [user_id, first_name, last_name] 
    VALUES 
      [202, "Tony", "Smith"];
    
    0
  • Hoặc sử dụng câu lệnh
    INSERT INTO users 
      [user_id, first_name, last_name] 
    VALUES 
      [202, "Tony", "Smith"];
    
    1

Hãy nhớ rằng trước khi bạn tạo truy vấn chèn nếu không tồn tại, bảng MySQL đang sử dụng phải có sẵn một hoặc nhiều cột với ràng buộc

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
8 hoặc
INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
9

Nếu không đặt ràng buộc cho cột mà bạn muốn phân biệt, thì các truy vấn bên dưới sẽ không hoạt động như dự kiến

Chèn một hàng mới nếu không tồn tại bằng INSERT IGNORE

Câu lệnh MySQL

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
0 thường được sử dụng để thay đổi lỗi mà MySQL đưa ra khi bạn sử dụng câu lệnh
INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
5 bình thường thành một cảnh báo để việc thực thi truy vấn của bạn không bị gián đoạn

Ví dụ: giả sử bạn có bảng

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
6 với dữ liệu sau

+---------+------------+-----------+
| user_id | first_name | last_name |
+---------+------------+-----------+
|     202 | Thor       | Odinson   |
|     204 | Loki       | Laufeyson |
+---------+------------+-----------+
2 rows in set [0.00 sec]

Cột

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
7 ở trên là trường
INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
8, vì vậy MySQL sẽ báo lỗi nếu bạn cố chèn một hàng mới với một trong các giá trị
INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
7 hiện có

Truy vấn trên sử dụng giá trị

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
7 của
ERROR 1062 [23000]: Duplicate entry '202' for key 'users.PRIMARY'
1

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];

Vì vậy, MySQL sẽ tạo ra lỗi sau

________số 8

Câu lệnh

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
0 sẽ khiến MySQL không làm gì khi quá trình chèn gây ra lỗi. Nếu không có lỗi thì một hàng mới sẽ được thêm vào bảng

Khi bạn chạy truy vấn sau

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
1

MySQL sẽ tạo ra đầu ra sau

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
2

Với câu lệnh

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
0, MySQL sẽ chỉ chèn một hàng mới nếu các giá trị không tồn tại trong bảng

Cập nhật hàng hiện có với giá trị duy nhất bằng mệnh đề ON DUPLICATE KEY UPDATE

Mệnh đề

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
0 cho phép bạn cập nhật hàng với giá trị mới khi tìm thấy giá trị trùng lặp trong chỉ mục
INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
9 hoặc cột
INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
8

Mệnh đề có thể được thêm vào cuối truy vấn MySQL

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
5 như hình bên dưới

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
5

Đầu tiên, MySQL sẽ thực hiện truy vấn chèn thông thường ở trên. Khi tìm thấy một giá trị trùng lặp, thì MySQL sẽ thực hiện cập nhật thay vì chèn

Truy vấn này hữu ích nếu bạn vẫn muốn hàng được cập nhật khi giá trị duy nhất đã tồn tại

Sử dụng câu lệnh REPLACE khi đã tồn tại một giá trị duy nhất

Câu lệnh

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
1 là một thay thế cho mệnh đề
INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
0

Tuyên bố về cơ bản thực hiện hai điều

  • MySQL sẽ kiểm tra bản ghi hiện có để xem liệu một hàng có cùng giá trị duy nhất đã tồn tại chưa
  • Khi một hàng có cùng giá trị duy nhất được tìm thấy, thì hàng đó sẽ bị xóa bằng cách sử dụng câu lệnh
    INSERT INTO users 
      [user_id, first_name, last_name] 
    VALUES 
      [202, "Tony", "Smith"];
    
    10. MySQL sau đó sẽ chạy câu lệnh
    INSERT INTO users 
      [user_id, first_name, last_name] 
    VALUES 
      [202, "Tony", "Smith"];
    
    5 để thay thế hàng đã xóa

Khi không có kết quả khớp trong bản ghi hiện có, thì câu lệnh

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
1 hoạt động giống như câu lệnh
INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
5 thông thường

Đây là một ví dụ về câu lệnh

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
1 đang hoạt động

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
3

Hàng có giá trị

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
7 của
ERROR 1062 [23000]: Duplicate entry '202' for key 'users.PRIMARY'
1 sẽ được thay thế bằng các giá trị trên nếu nó đã tồn tại

Phần kết luận

Và đó là ba cách bạn có thể thực hiện truy vấn chèn MySQL nếu không tồn tại

Cá nhân tôi thích thực hiện một truy vấn

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
5 bình thường và xử lý lỗi do MySQL đưa ra từ phía phụ trợ

Các ngôn ngữ lập trình như JavaScript, PHP, Ruby và Python đều có khối

INSERT INTO users 
  [user_id, first_name, last_name] 
VALUES 
  [202, "Tony", "Smith"];
18 mà bạn có thể sử dụng để xử lý lỗi khi thực thi truy vấn MySQL

Nhưng nếu bạn phải xử lý logic “chèn nếu không tồn tại” từ phía MySQL, thì ba phương pháp trên là lựa chọn tốt nhất của bạn

Làm cách nào để kiểm tra xem bản ghi có tồn tại trước khi chèn vào SQL không?

Cách kiểm tra xem bản ghi có tồn tại hay không Chèn vào Bảng trong SQL Server .
TẠO KÍCH HOẠT [dbo]. [trg_afterInsert] BẬT [dbo]. [Dữ liệu mẫu]
--Kiểm tra xem các bản ghi Mới đã tồn tại trong bảng Master_Data hay chưa
NẾU TỒN TẠI[
CHỌN [Id_đơn hàng] riêng biệt từ đã chèn
NGOẠI TRỪ

Làm cách nào để kiểm tra xem một mục có tồn tại trong MySQL không?

Toán tử EXISTS của MySQL . Toán tử EXISTS trả về TRUE nếu truy vấn con trả về một hoặc nhiều bản ghi.

Làm cách nào để kiểm tra xem bản ghi có tồn tại trong cơ sở dữ liệu trước khi chèn bằng php không?

php $query = "CHỌN * TỪ sản phẩm WHERE code = '$code'"; . '; . '

Làm cách nào để kiểm tra xem giá trị có tồn tại trong bảng SQL không?

Để kiểm tra xem một hàng có tồn tại trong bảng MySQL hay không, hãy sử dụng điều kiện tồn tại. Điều kiện tồn tại có thể được sử dụng với truy vấn con. Nó trả về true khi hàng tồn tại trong bảng, nếu không thì trả về false. Đúng được biểu thị ở dạng 1 và sai được biểu thị bằng 0

Chủ Đề