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

Chèn vào nơi không tồn tại-không có khóa chính

Nếu bạn thực sự muốn viết truy vấn (đang hoạt động) của riêng mình ..

INSERT INTO groupdentlink (
  f_dent_id, f_group_id, f_schedule_id
) SELECT 
    '$_POST[id]'  f_dent_id, 
    '$groupid'    f_group_id,
    '$scheduleid' f_schedule_id
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1
  FROM `groupdentlink`
  WHERE 
    f_dent_id = '$_POST[id]' AND f_group_id = '$groupid'
  LIMIT 1 -- will stop mysql to stop searching after first match
)

... nhưng MySQL có thể xử lý tất cả những điều này cho bạn!

Bạn không cần khóa chính để MySQL xử lý việc này cho bạn, bạn nên thêm UNIQUE ràng buộc khóa trên tập hợp kết hợp của hai cột.

Truy vấn thêm khóa duy nhất dent_group_uniq_key tới groupdentlink .

ALTER TABLE groupdentlink ADD UNIQUE KEY `dent_group_uniq_key` (
  f_dent_id, f_group_id
);

Sau đó sử dụng INSERT IGNORE trên truy vấn của bạn:

INSERT IGNORE INTO groupdentlink (
  f_dent_id, f_group_id, f_schedule_id
) VALUES (
  '$_POST[id]', '$groupid', '$scheduleid'
)

INSERT IGNORE sẽ cố gắng chèn một hàng vào bảng của bạn, nếu hàng không thành công do hạn chế về khóa, nó sẽ hoạt động như không có gì xảy ra.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trường hợp MySQL trong Câu lệnh Chọn với toán tử LIKE

  2. Làm cách nào để sử dụng mã hóa dữ liệu minh bạch với MySQL?

  3. Giải pháp cho truy vấn con trả về lỗi nhiều hơn 1 hàng

  4. Bảng được chỉ định hai lần, vừa là mục tiêu cho 'CẬP NHẬT' và là nguồn riêng cho dữ liệu trong mysql

  5. Ràng buộc KIỂM TRA trong MySQL không hoạt động