Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Geodjango和Innodb,混合Innodb和myisam模型_Mysql_Django_Innodb_Myisam_Geodjango - Fatal编程技术网

Mysql Geodjango和Innodb,混合Innodb和myisam模型

Mysql Geodjango和Innodb,混合Innodb和myisam模型,mysql,django,innodb,myisam,geodjango,Mysql,Django,Innodb,Myisam,Geodjango,我一直听说InnoDB在数据完整性方面更好,不幸的是,MySQL 5.6还没有支持空间索引。一个快速的空间索引对我的应用程序来说非常关键,尽管我的模型的优点是,它几乎可以生成一个相当静态(写一次,读多次)的(ID,POINT)表,所以我可以使用MyISAM,而不必太在意 我希望将MyISAM的使用限制在该表上,并在InnoDB对SPATIAL的支持就绪时将其迁移。问题是,如果在迁移模型后(通过使用app/sql/app_model.sql)更改表以将表切换到MyISAM,MySQL会抱怨: ER

我一直听说InnoDB在数据完整性方面更好,不幸的是,MySQL 5.6还没有支持空间索引。一个快速的空间索引对我的应用程序来说非常关键,尽管我的模型的优点是,它几乎可以生成一个相当静态(写一次,读多次)的(ID,POINT)表,所以我可以使用MyISAM,而不必太在意

我希望将MyISAM的使用限制在该表上,并在InnoDB对SPATIAL的支持就绪时将其迁移。问题是,如果在迁移模型后(通过使用app/sql/app_model.sql)更改表以将表切换到MyISAM,MySQL会抱怨:

ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
这是有道理的,我的其他模型引用了这个模型,Django自动在这些模型和这个模型之间进行外键约束

这里最好的策略是什么?我应该放弃InnoDB,把一切都换回MyISAM吗?我可以删除所有外键约束吗


我试图通过查找信息\u SCHEMA.TABLE\u约束来自动删除外键,但这只列出了具有约束的表,而没有列出这些约束引用的表。我将不得不做一些模糊的列名匹配,这感觉非常脆弱

为了解决这个问题,我默认放弃使用InnoDB。因为Amazon RDS将Inno设置为默认设置,所以我通过在my settings.py中添加init_命令来实现这一点:

'default': {
    'OPTIONS': {
        'init_command' : 'SET storage_engine=MYISAM', # Can't make SPATIAL keys on InnoDB
    },
}
然后,对于除了具有空间索引的表之外的所有表,我在$appname/sql目录下创建了一个$modelname.sql文件,该文件在创建引擎后会更改引擎

-- Alter to InnoDB so we can make concurrent insertions w/o full table lock.
ALTER TABLE <modeltable> ENGINE=INNODB;
——更改为InnoDB,这样我们就可以进行不带全表锁的并发插入。
ALTER TABLE ENGINE=INNODB;
切换到MYISAM默认值意味着Django不会自动为Inno表创建外键约束,这并不理想。我希望有办法让Django在事后创造它们