繁体   English   中英

设置foreign_key_checks = 0不起作用MySQL 5.0

[英]set foreign_key_checks=0 does not work MySQL 5.0

我们不支持InnoDB数据库。 因此,在从5.0迁移到MySQL 5.5之前,我希望将所有InnoDB表更改为MyISAM,但很多都有外键约束。

因此我想在执行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文档显示变量确实存在。

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 |

关于外键约束的 MySQL文档说(突出显示是我的):

此外,如果表具有外键约束,则不能使用ALTER TABLE来更改表以使用其他存储引擎。 要更改存储引擎,必须先删除任何外键约束。

文档来自v5.5,但我认为这个限制也适用于v5.0。

UPDATE

是的,我在Oracle网站上找到了v5.0手册, 相关部分也说了同样的话:

此外,如果InnoDB表具有外键约束,则ALTER TABLE不能用于更改表以使用其他存储引擎。 要更改存储引擎,必须先删除任何外键约束。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM