从MySQL移动到MariaDB-外键约束格式不正确

从MySQL移动到MariaDB-外键约束格式不正确,mysql,foreign-keys,mariadb,mysql-error-150,Mysql,Foreign Keys,Mariadb,Mysql Error 150,我刚刚更新了使用XAMPP的本地开发环境,XAMPP的新版本使用了MariaDB,而我使用的旧版本使用的是MySQL,我对此很满意 现在,我认为MariaDB应该与MySQL完全兼容,因为它本质上只是一个“插入式”替换,但是我在导入升级之前直接从MySQL导出的数据库时遇到了问题 我得到以下错误: Query: /*Table structure for table `blm_wc_download_log` */ CREATE TABLE `blm_wc_download_log` ( `

我刚刚更新了使用XAMPP的本地开发环境,XAMPP的新版本使用了MariaDB,而我使用的旧版本使用的是MySQL,我对此很满意

现在,我认为MariaDB应该与MySQL完全兼容,因为它本质上只是一个“插入式”替换,但是我在导入升级之前直接从MySQL导出的数据库时遇到了问题

我得到以下错误:

Query:
/*Table structure for table `blm_wc_download_log` */
CREATE TABLE `blm_wc_download_log` (
  `download_log_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `timestamp` datetime NOT NULL,
  `permission_id` bigint(20) unsigned NOT NULL,
  `user_id` bigint(20) unsigned DEFAULT NULL,
  `user_ip_address` varchar(100) COLLATE utf8mb4_unicode_520_ci DEFAULT '',
  PRIMARY KEY (`download_log_id`),
  KEY `permission_id` (`permission_id`),
  KEY `timestamp` (`timestamp`),
  CONSTRAINT `fk_blm_wc_download_log_permission_id` FOREIGN KEY (`permission_id`) REFERENCES `blm_woocommerce_downloadable_product_permissions` (`permission_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci

Error occured at:2019-02-26 05:30:20
Line no.:9919
Error Code: 1005 - Can't create table `my-db`.`blm_wc_download_log` (errno: 150 "Foreign key constraint is incorrectly formed")
以下是blm商业可下载的产品权限:

CREATE TABLE `blm_woocommerce_downloadable_product_permissions` (
  `permission_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `download_id` varchar(36) COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `product_id` bigint(20) unsigned NOT NULL,
  `order_id` bigint(20) unsigned NOT NULL DEFAULT '0',
  `order_key` varchar(200) COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `user_email` varchar(200) COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `user_id` bigint(20) unsigned DEFAULT NULL,
  `downloads_remaining` varchar(9) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
  `access_granted` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `access_expires` datetime DEFAULT NULL,
  `download_count` bigint(20) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`permission_id`),
  KEY `download_order_key_product` (`product_id`,`order_id`,`order_key`(16),`download_id`),
  KEY `download_order_product` (`download_id`,`order_id`,`product_id`),
  KEY `order_id` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
可能是因为在文件的更下方创建了
blm\u woocommerce\u downloadable\u product\u权限
,所以它出错,因为它认为该表不存在?但是,在这么说的同时,我以前从未遇到过将该数据库的SQL转储导入MySQL的问题


这里的问题是什么?如果出现兼容性问题,不妨使用MySQL…

是的,很可能在应用FK之前您没有创建表,您可以注释约束行,创建表,然后在完全创建约束后应用约束。

是的,很可能在应用FK之前您没有创建表,您可以将约束行注释为“生成表”,然后在完全创建约束后应用约束。

是的,表的创建顺序很重要。您必须先创建引用表,然后才能为其声明外键。这就是说,MariaDB越来越不能替代MySQL。自2010年MySQL分岔以来,它一直在缓慢地与MySQL分道扬镳。我不使用MariaDB。您可能想查看我参与的MySQL外键检查表:谢谢Bill-知道为什么导入可以与MySQL一起工作吗?如果您无序创建表,它也无法在MySQL上工作,除非您将表创建为MyISAM或另一个忽略外键定义的存储引擎。另一种可能是表在导入之前已经存在。是的,表的创建顺序很重要。您必须先创建引用表,然后才能为其声明外键。这就是说,MariaDB越来越不能替代MySQL。自2010年MySQL分岔以来,它一直在缓慢地与MySQL分道扬镳。我不使用MariaDB。您可能想查看我参与的MySQL外键检查表:谢谢Bill-知道为什么导入可以与MySQL一起工作吗?如果您无序创建表,它也无法在MySQL上工作,除非您将表创建为MyISAM或另一个忽略外键定义的存储引擎。另一种可能是在导入之前该表已经存在。