1. 程式人生 > 其它 >mysql外來鍵建立不成功/失效

mysql外來鍵建立不成功/失效

當前mysql版本:SELECT VERSION();結果為:5.5.40。

在複習mysql外來鍵約束時建立表格:stu與grade,目標:grade的id隨著student的id級聯更新,且限制刪除。

建立student表格:

     CREATE TABLE student (
  id INT ( 8 ),
  NAME VARCHAR ( 20 ),
  department VARCHAR ( 20 ),
 INDEX ( id )) ENGINE = INNODB;

建立grade表格:

 CREATE TABLE grade (
  id INT PRIMARY KEY auto_increment,
  score INT NOT NULL,
  stu_id INT,
  index( id ),
  CONSTRAINT yueshu1 FOREIGN KEY ( id ) REFERENCES student ( id ) ON DELETE RESTRICT ON UPDATE CASCADE
  )ENGINE = INNODB ;

原以為已經成功,且發現外來鍵彷彿沒有新增成功,即grade表的id欄位不會隨著student表的id欄位更新,且沒有刪除的限制。

經過排查發現是表的引擎不對(MyISAM不支援外來鍵,InnoDB支援。MyISAM與InnoDB的區別見: Mysql 中 MyISAM 和 InnoDB 的區別有哪些? - 知乎 (zhihu.com))使用了:MyISAM

使用語句為:

 SHOW TABLE STATUS FROM fuxi WHERE NAME LIKE 'grade';

因此將建立grade表的語句指定engine=INNODB即可:

 CREATE TABLE grade (
  id INT PRIMARY KEY auto_increment,
  score INT NOT NULL,
  stu_id INT,
  index( id ),
  CONSTRAINT yueshu1 FOREIGN KEY ( id ) REFERENCES student ( id ) ON DELETE RESTRICT ON UPDATE CASCADE
  )ENGINE = INNODB ;