mysql外來鍵建立不成功/失效
阿新 • • 發佈:2022-03-20
當前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 ;