2010-06-25 52 views
6

Tôi có một trang tính Excel có khoảng 2.000 hàng mà tôi muốn chèn vào cơ sở dữ liệu của mình.MySQL: Chèn nếu khóa ngoài tồn tại

Vấn đề là bảng tôi muốn chèn 2.000 hàng vào có cột tham chiếu đến khóa ngoài trong bảng khác. Rất tiếc, rất nhiều truy vấn thất bại, vì giá trị khóa ngoại được cung cấp KHÔNG tồn tại.

Tôi biết rằng tôi có thể bỏ qua kiểm tra khóa ngoại, nhưng đây không phải là điều tôi muốn. Tôi không muốn bỏ qua kiểm tra chìa khóa nước ngoài, tôi chỉ muốn truy vấn xấu không được thực hiện.

Ví dụ:

INSERT INTO test (id, value) VALUES (10, 20); 
INSERT INTO test (id, value) VALUES (20, 20); 

Truy vấn đầu tiên thất bại, kể từ TEST.id tài liệu tham khảo foobar.id và không có foobar.id = 10. Tuy nhiên, truy vấn thứ hai sẽ làm việc, kể từ foobar.id = 20 tồn tại, nhưng truy vấn thứ hai sẽ không được thực hiện, bởi vì cái đầu tiên đã thất bại.

Có cách nào tôi không gặp lỗi trên truy vấn đầu tiên và các truy vấn khác của tôi vẫn sẽ được thực thi không?

Tôi có thể viết một tập lệnh php, nhưng tôi muốn có một giải pháp MySQL ở đây.

Trả lời

3

Bạn có thể thay đổi để chèn kết quả của một lựa chọn, nên cái gì như:

INSERT INTO test (id, value) 
SELECT foobar.id, 20 
FROM foobar WHERE id = 10; 
+0

Phải thêm giới hạn 1, nếu không mỗi chèn có thể được nhiều hàng. – MJB

+0

@MJB Tôi giả định rằng id là khóa chính trên 'foobar', theo OP, do đó,' LIMIT' * không nên * là cần thiết. –

+0

Nếu tôi làm như vậy, chỉ có thể chèn dữ liệu vào "kiểm tra", đã có trong "foobar", phải không? Nhưng tôi có dữ liệu mới để thêm vào, xuất phát từ bảng excel. Tôi có thể điều chỉnh điều này bằng cách nào đó, vì vậy tôi có thể thêm dữ liệu mới vào nó? – user375700

Các vấn đề liên quan