2016-12-14 66 views
2

我們不支持InnoDB數據庫。因此,在從5.0遷移到MySQL 5.5之前,我希望將所有InnoDB表更改爲MyISAM,但其中很多都有外鍵約束。set foreign_key_checks = 0不起作用MySQL 5.0

因此,我想在會話級別上禁用它,執行set foreign_key_checks=0但仍然獲得相同的外鍵錯誤。

任何建議都會有很大的幫助。

mysql> SET foreign_key_checks = 0; 
Query OK, 0 rows affected (0.00 sec) 

mysql> use sn; 
Database changed 
mysql> alter table facility engine='MyISAM'; 
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails 

令人驚訝:

mysql> SHOW Variables WHERE Variable_name='foreign_key_checks'; 
Empty set (0.00 sec) 

mysql> SET foreign_key_checks = 0; 
Query OK, 0 rows affected (0.00 sec) 

mysql> SHOW Variables WHERE Variable_name='foreign_key_checks'; 
Empty set (0.00 sec) 

MySQL 5.0 documentation顯示變量確實存在。

Here is the table structure of `facility` table: 
| facility | CREATE TABLE `facility` (
    `FacilityId` bigint(20) NOT NULL auto_increment, 
    `FacilityName` varchar(45) default NULL, 
    `ViewerId` bigint(20) default NULL, 
    `MessageTemplate` varchar(256) default NULL, 
    `RecApp` varchar(60) default NULL, 
    `RecFacility` varchar(60) default NULL, 
    `SendApp` varchar(60) default NULL, 
    `SendFacility` varchar(60) default NULL, 
    `MirthChannelEnable` int(1) NOT NULL default '0', 
    `CompletenessCriteria` int(2) NOT NULL, 
    `RetryLimit` int(2) NOT NULL default '3', 
    `WatchDelay` int(11) NOT NULL, 
    `RetryDelay` int(11) NOT NULL, 
    `AckTimeOut` int(11) NOT NULL, 
    `KeepConOpen` int(1) NOT NULL default '0', 
    `SendTimeout` int(11) NOT NULL, 
    `EncryptURL` int(1) NOT NULL default '0', 
    `Host` varchar(15) NOT NULL, 
    `Port` int(11) NOT NULL, 
    `CreationDate` timestamp NOT NULL default CURRENT_TIMESTAMP, 
    `Description` varchar(256) default NULL, 
    `EventLogOffset` int(11) NOT NULL default '0', 
    PRIMARY KEY (`FacilityId`), 
    KEY `Fk_Fac_ViewerId_idx` (`ViewerId`), 
    CONSTRAINT `Fk_Fac_ViewerId` FOREIGN KEY (`ViewerId`) REFERENCES `viewer` (`ViewerId`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 | 
+0

顯示錶結構 –

+0

@MuhammadMuazzam感謝您的詢問,補充。不適用於其他表格,因爲有限制,所以可能不是表格特定的問題。 – kingsmasher1

回答

1

正如MySQL文檔foreign key constraint說(高亮是我的):

而且,如果一個表有外鍵約束,ALTER TABLE不能用來改變表使用另一個存儲引擎。 要更改存儲引擎,您必須首先刪除任何外鍵約束。

該文檔來自v5.5,但我認爲這個限制也適用於v5.0。

UPDATE

是的,我發現甲骨文網站上的V5.0手冊和relevant section說的一樣:

而且,如果一個InnoDB表有外鍵約束,ALTER TABLE不能使用將表更改爲使用其他存儲引擎。要更改存儲引擎,您必須首先刪除任何外鍵約束。

+0

由於我們正在移動到不支持外鍵的MyISAM,可以放棄它們而不是重新創建嗎? – kingsmasher1

+0

我想你已經知道這個問題的答案... – Shadow

+0

感謝您的回答。這有幫助。 upvote並接受:) – kingsmasher1