MySQL'de bu komutu yürüttüğümde:
SET FOREIGN_KEY_CHECKS=0;
Tüm motoru etkiler mi, yoksa sadece mevcut işlemim mi?
MySQL'de bu komutu yürüttüğümde:
SET FOREIGN_KEY_CHECKS=0;
Tüm motoru etkiler mi, yoksa sadece mevcut işlemim mi?
Yanıtlar:
Sorunuza yaptığınız şekilde ayarlandığında oturum tabanlıdır.
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
Buna göre FOREIGN_KEY_CHECKS
kapsam için "İkisi" dir. Bu, oturum için ayarlanabileceği anlamına gelir:
SET FOREIGN_KEY_CHECKS=0;
veya global olarak:
SET GLOBAL FOREIGN_KEY_CHECKS=0;
Aslında iki foreign_key_checks
değişken vardır: bir global değişken ve bir yerel (oturum başına) değişken. Bağlantı üzerine, oturum değişkeni genel değişkenin değerine ilklendirilir.
Komut SET foreign_key_checks
, oturum değişkenini değiştirir.
Genel değişkeni değiştirmek için SET GLOBAL foreign_key_checks
veya tuşunu kullanın SET @@global.foreign_key_checks
.
Aşağıdaki manuel bölümlere bakın:
http://dev.mysql.com/doc/refman/5.7/en/using-system-variables.html
http://dev.mysql.com/doc/refman/5.7/en/server -sistem-variables.html
foreign_key_checks
ve aynı oturumda yabancı anahtar kısıtlamalarını yok saymasını bekler. Global olmayan değişkeni ayarlamanız gerekir.
Ron tarafından açıklandığı gibi, yerel ve küresel olmak üzere iki değişken vardır. Yerel değişken her zaman kullanılır ve bağlantı üzerine global ile aynıdır.
SET FOREIGN_KEY_CHECKS=0;
SET GLOBAL FOREIGN_KEY_CHECKS=0;
SHOW Variables WHERE Variable_name='foreign_key_checks'; # always shows local variable
GLOBAL değişkenini ayarlarken, mevcut bağlantı için yerel değişken değişmez. Yerel değişkeni de yeniden bağlamanız veya ayarlamanız gerekir.
Belki de sezgisel olmayan, FORSIGN_KEY_CHECKS yeniden etkinleştirildiğinde MYSQL yabancı anahtarları zorlamıyor. Bu, yabancı anahtarlar ve denetimler açık olsa bile tutarsız bir veritabanı oluşturmayı mümkün kılar.
Yabancı anahtarlarınızın tamamen tutarlı olmasını istiyorsanız, denetleme açıkken anahtarları eklemeniz gerekir.
# will get you the current local (session based) state.
SHOW Variables WHERE Variable_name='foreign_key_checks';
GLOBAL'ı ayarlamadıysanız, yalnızca oturumunuz etkilenmiştir.
Drupal veritabanını yeni bir yerel apache sunucusuna geçirmeye çalıştığımda aynı hatayla karşılaştım (Windows makinesinde XAMPP kullanıyorum). Aslında bu hatanın anlamını bilmiyorum, ancak aşağıdaki adımları denedikten sonra veritabanını hatasız olarak içe aktardım. Umarım bu yardımcı olabilir:
C: \ xampp \ php \ php.ini konumundaki php.ini dosyasını değiştirme
max_execution_time = 600
max_input_time = 600
memory_limit = 1024M
post_max_size = 1024M
C: \ xampp \ mysql \ bin \ my.ini dizinindeki my.ini dosyasını değiştirme
max_allowed_packet = 1024M
Mysql sorgu tarayıcısının kullanılması durumunda, SET FOREIGN_KEY_CHECKS=0;
1.1.20 sürümünde herhangi bir etkisi yoktur. Ancak, Mysql sorgu tarayıcı 1.2.17 iyi çalışıyor