2013-12-13 132 views
0

我試圖建立外鍵約束我的表,使該行會自動上刪除刪除主鍵MySQL的外鍵不能正常工作

主表是

CREATE TABLE IF NOT EXISTS `tbl_users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT, 
`username` varchar(250) NOT NULL, 
`password` varchar(250) NOT NULL, 
`user_role` varchar(100) NOT NULL DEFAULT 'staff', 
`user_name` varchar(250) NOT NULL DEFAULT 'staff name', 
`user_email` varchar(250) NOT NULL, 
`user_phone` varchar(15) NOT NULL, 
`user_login_status` tinyint(1) NOT NULL, 
PRIMARY KEY (`user_id`) 
) ENGINE=MyISAM; 

和外鍵表是

CREATE TABLE IF NOT EXISTS `tbl_user_meta` (
`user_id` int(11) NOT NULL, 
`staff_id` int(11) NOT NULL, 
`dep_id` int(11) NOT NULL, 
`class_id` int(11) NOT NULL, 
`subject_id` int(11) NOT NULL 
) ENGINE=MyISAM 

我用下面的查詢來設置外鍵

alter table tbl_user_meta add foreign key('user_id') references tbl_users('user_id') on  delete cascade; 

查詢是確定,但外鍵約束不工作 請幫我

我使用WAMP服務器上的窗口與MySQL 5.6.12

+0

將您的引擎更改爲支持外鍵的InnoDB。 –

回答

3

外鍵約束不是在MyISAM引擎支持。

Foreign Key Differences
InnoDB存儲引擎支持外鍵約束 ,包括CASCADE,ON DELETE和ON UPDATE檢查。見 14.2.3.4,「InnoDB和FOREIGN KEY約束」。
對於除InnoDB以外的存儲引擎,MySQL服務器會分析CREATE TABLE語句中的FOREIGN KEY語法,但不會使用或存儲它。

爲了能夠使用,你必須使用的InnoDB引擎 FK約束。

可以更改你的表引擎這樣

ALTER TABLE tbl_users ENGINE = InnoDB; 
ALTER TABLE tbl_user_meta ENGINE = InnoDB; 

UPDATE您可以產生與此查詢

SELECT GROUP_CONCAT(CONCAT(
    'ALTER TABLE `', table_name, '` ENGINE=InnoDB') SEPARATOR ';\n') 
    FROM information_schema.tables 
WHERE table_schema = SCHEMA() 
    AND ENGINE = 'MyISAM'; 

,然後只複製所有表ALTER TABLE聲明並執行它們

這裏是SQLFiddle演示

+0

然後我應該使用哪個引擎...它是默認設置的 – Chinthu

+0

您應該使用InnoDB – peterm

+0

所有我的表現在MyISAM.how我可以將它們轉換爲innodb.There有很多表在我的數據庫 – Chinthu