Khi tôi thực thi lệnh này trong MySQL:
SET FOREIGN_KEY_CHECKS=0;
Nó có ảnh hưởng đến toàn bộ động cơ hay chỉ là giao dịch hiện tại của tôi?
Khi tôi thực thi lệnh này trong MySQL:
SET FOREIGN_KEY_CHECKS=0;
Nó có ảnh hưởng đến toàn bộ động cơ hay chỉ là giao dịch hiện tại của tôi?
Câu trả lời:
Nó dựa trên phiên, khi đặt theo cách bạn đã làm trong câu hỏi của mình.
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
Theo đó, FOREIGN_KEY_CHECKS
là "Cả hai" cho phạm vi. Điều này có nghĩa là nó có thể được đặt cho phiên:
SET FOREIGN_KEY_CHECKS=0;
hoặc trên toàn cầu:
SET GLOBAL FOREIGN_KEY_CHECKS=0;
Trên thực tế, có hai foreign_key_checks
biến: biến toàn cục và biến cục bộ (mỗi phiên). Khi kết nối, biến phiên được khởi tạo thành giá trị của biến toàn cục.
Lệnh SET foreign_key_checks
sửa đổi biến phiên.
Để sửa đổi biến toàn cục, sử dụng SET GLOBAL foreign_key_checks
hoặc SET @@global.foreign_key_checks
.
Tham khảo các phần hướng dẫn sau:
http://dev.mysql.com/doc/refman/5.7/en/USE-system-variables.html
http://dev.mysql.com/doc/refman/5.7/en/server -system-biến.html
foreign_key_checks
và trong cùng một phiên, hy vọng nó sẽ bỏ qua các ràng buộc khóa ngoại. Bạn cần đặt biến không toàn cầu.
Theo giải thích của Ron, có hai biến số, cục bộ và toàn cầu. Biến cục bộ luôn được sử dụng và giống như toàn cục khi kết nối.
SET FOREIGN_KEY_CHECKS=0;
SET GLOBAL FOREIGN_KEY_CHECKS=0;
SHOW Variables WHERE Variable_name='foreign_key_checks'; # always shows local variable
Khi đặt biến GLOBAL, biến cục bộ không thay đổi đối với mọi kết nối hiện có. Bạn cần kết nối lại hoặc đặt biến cục bộ.
Có lẽ không trực quan, MYSQL không thực thi khóa ngoại khi FOREIGN_KEY_CHECKS được bật lại. Điều này cho phép tạo một cơ sở dữ liệu không nhất quán mặc dù các khóa và kiểm tra nước ngoài được bật.
Nếu bạn muốn các khóa ngoại của bạn hoàn toàn nhất quán, bạn cần thêm các khóa trong khi kiểm tra được bật.
# will get you the current local (session based) state.
SHOW Variables WHERE Variable_name='foreign_key_checks';
Nếu bạn không THIẾT LẬP TOÀN CẦU, chỉ phiên của bạn bị ảnh hưởng.
Tôi đã gặp lỗi tương tự khi tôi cố gắng di chuyển cơ sở dữ liệu Drupal sang máy chủ apache cục bộ mới (tôi đang sử dụng XAMPP trên máy Windows). Thật ra tôi không biết ý nghĩa của lỗi này, nhưng sau khi thử các bước bên dưới, tôi đã nhập cơ sở dữ liệu mà không gặp lỗi. Hy vọng điều này có thể giúp:
Thay đổi php.ini tại C: \ xampp \ php \ php.ini
max_execution_time = 600
max_input_time = 600
memory_limit = 1024M
post_max_size = 1024M
Thay đổi my.ini tại C: \ xampp \ mysql \ bin \ my.ini
max_allowed_packet = 1024M
Trong trường hợp sử dụng trình duyệt truy vấn Mysql, SET FOREIGN_KEY_CHECKS=0;
không có bất kỳ tác động nào trong phiên bản 1.1.20. Tuy nhiên, nó hoạt động tốt trên trình duyệt truy vấn Mysql 1.2.17