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

Kiểm tra xem các giá trị có tồn tại không trước khi CHÈN VÀO ... TRÊN CẬP NHẬT KHÓA DUPLICATE

Thay vì review_autosave_data bạn có thể tạo hai tab như review_insert_draftsreview_update_drafts (một cho các đánh giá mới và một cho các cập nhật đánh giá).

CREATE TABLE `review_insert_drafts` (
  `product_id` int(11) unsigned NOT NULL,
  `user_id` int(11) unsigned NOT NULL,
  `review` blob,
  `name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`product_id`, `user_id`),
  CONSTRAINT FOREIGN KEY (`product_id`) REFERENCES `products` (`id`),
  CONSTRAINT FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
);

CREATE TABLE `review_update_drafts` (
  `review_id` int(11) unsigned NOT NULL,
  `review` blob,
  `name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`review_id`),
  CONSTRAINT FOREIGN KEY (`review_id`) REFERENCES `reviews` (`id`)
);

(Không chắc name là gì là tốt cho.)

Trong ứng dụng của mình, bạn phải kiểm tra xem người dùng đang viết bài đánh giá mới hay đang cập nhật bài đánh giá hiện có.

Đối với các bài đánh giá mới mà bạn chạy:

INSERT INTO review_insert_drafts (product_id, user_id, review)
VALUES (50, 1, "lorem ipsum")
ON DUPLICATE KEY
UPDATE review = "lorem ipsum";

hoặc

REPLACE INTO review_insert_drafts (product_id, user_id, review)
VALUES (50, 1, "lorem ipsum");

Đối với các bản cập nhật đánh giá bạn chạy:

INSERT INTO review_update_drafts (review_id, review)
VALUES (25, "lorem ipsum")
ON DUPLICATE KEY
UPDATE review = "lorem ipsum";

hoặc

REPLACE INTO review_update_drafts (review_id, review)
VALUES (25, "lorem ipsum");

Ưu điểm:Bạn có một thiết kế rõ ràng với các khóa độc đáo và khóa ngoài rõ ràng.

Nhược điểm:Bạn có hai bảng chứa dữ liệu giống nhau. Vì vậy, bạn có hai câu lệnh chèn khác nhau. Và bạn sẽ cần một câu lệnh UNION nếu bạn muốn kết hợp hai bảng (ví dụ:hiển thị tất cả các bản nháp cho người dù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. Làm thế nào để xác định một đơn đặt hàng tùy chỉnh trong mệnh đề ORDER BY?

  2. Kho lưu trữ tin tức nâng cao Năm / Tháng bằng PHP MySql

  3. Cấu trúc cơ sở dữ liệu tốt nhất để lưu giữ dữ liệu đa ngôn ngữ là gì?

  4. Làm cách nào để tự động xóa các hàng dữ liệu khỏi bảng mysql sau 24 giờ kể từ khi dữ liệu vào bảng?

  5. PHP MySQL - Cách chèn giá trị mặc định trong một câu lệnh đã chuẩn bị