mysql 設置外鍵約束SET FOREIGN_KEY_CHECKS=1


1.問題描述:Mysql中如果表和表之間建立的外鍵約束,則無法刪除表及修改表結構

解決方法:

在Mysql中取消外鍵約束: SET FOREIGN_KEY_CHECKS=0;

然后將原來表的數據導出到sql語句,重新創建此表后,再把數據使用sql導入,

然后再設置外鍵約束: SET FOREIGN_KEY_CHECKS=1;
 

2. MySQL 5.1.48 導入 MySQL 5.7.18 時遇到 T FOREIGN_KEY_CHECKS = 0 錯誤的解決方法

#1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘T FOREIGN_KEY_CHECKS = 0’ at line 1

經查詢,這個是 mysql 啟動和關閉外鍵約束的方法,去掉即可。

編輯數據庫文件:

//去掉此行
SET FOREIGN_KEY_CHECKS = 0;

//去掉此行
SET FOREIGN_KEY_CHECKS = 1;

然后重新導入即可。

3.查看當前FOREIGN_KEY_CHECKS的值可用如下命令

SELECT  @@FOREIGN_KEY_CHECKS;

4.外鍵使用實例

  CREATE TABLE cities
  (
     name VARCHAR(90),
     state CHAR(2) REFERENCES states   
  ) ENGINE = InnoDB; 
  -- Query OK, 0 rows affected (0.05 sec)
 
  -- Let's see DDL 查看表結構
  SHOW CREATE TABLE cities;  
 
  -- It does not have FOREIN KEY constraint 此時沒有外鍵約束
  CREATE TABLE `cities` (
  `name` varchar(90) DEFAULT NULL,
  `state` char(2) DEFAULT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

You have to use FOREIGN KEY clause in CREATE TABLE to specify a foreign key in MySQL:
//您必須在CREATE TABLE中使用外鍵子句來指定MySQL中的外鍵:

  DROP TABLE IF EXISTS cities; #刪除原來創建的表
 
  CREATE TABLE cities
  (
     name VARCHAR(90),
     state CHAR(2),
     FOREIGN KEY (state) REFERENCES states(abbr) 
  ) ENGINE = InnoDB;   
 
  -- Let's see DDL now
  SHOW CREATE TABLE cities;  
 
  -- Now the table has FOREIGN KEY  現在表中有了外鍵
  CREATE TABLE `cities` (
    `name` varchar(90) DEFAULT NULL,
    `state` char(2) DEFAULT NULL,
    KEY `state` (`state`),
    CONSTRAINT `cities_ibfk_1` FOREIGN KEY (`state`) REFERENCES `states` (`abbr`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

 

參考:SET FOREIGN_KEY_CHECKS命令


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM