Tôi có tập lệnh sao lưu cho cơ sở dữ liệu MySQL của mình, sử dụng mysqldump
với tùy chọn --tab
để nó tạo tệp .sql
cho cấu trúc và tệp .txt
(phân cách bằng ống) cho nội dung.Vô hiệu hóa kiểm tra khóa ngoài trên dòng lệnh
Một số bảng có phím nước ngoài, vì vậy khi tôi nhập nó tôi nhận được lỗi:
ERROR 1217 (23000) at line 8: Cannot delete or update a parent row: a foreign key constraint fails
tôi biết về việc sử dụng SET FOREIGN_KEY_CHECKS=0
(và SET FOREIGN_KEY_CHECKS=1
sau đó). Nếu tôi thêm chúng vào mỗi tệp .sql
thì quá trình nhập sẽ hoạt động. Nhưng sau đó hiển nhiên trên mysqldump
những người bị ghi đè.
Tôi cũng đã cố gắng chạy nó như một lệnh riêng biệt, như dưới đây nhưng lỗi trở lại:
echo "SET FOREIGN_KEY_CHECKS=0" | mysql [user/pass/database]
[all the imports]
echo "SET FOREIGN_KEY_CHECKS=1" | mysql [user/pass/database]
Có một số cách khác để vô hiệu hóa kiểm tra FK trên dòng lệnh?
này trông giống như cách tốt nhất. Thật đáng ngạc nhiên 'mysqldump' không có tùy chọn' --disable-foreign-keys'. – Barmar
@Barar nhớ rằng các khóa ngoại là một sản phẩm của động cơ InnoDB hơn là bản thân MySQL –
Cảm ơn, điều đó đang hoạt động! Vì vậy, thiết lập FK kiểm tra chỉ hoạt động cho một lệnh, chứ không phải là sự bền bỉ trên nhiều lệnh? – DisgruntledGoat