mysql能有alter设置外键吗_使用现有的MYSQL数据库使用Alter Table添加外键时出现问题-无法添加!帮帮我!...

我有一个生产数据库,在其中我已重命名了几个作为外键的列。显然,以我的经验,mysql使这确实很痛苦。

我的解决方案是删除所有索引和外键,重命名id列,然后重新添加索引和外键。

这在用于开发数据库的Windows上的mysql 5.1上很好用。

我去了我的debian服务器上运行迁移脚本,该服务器也使用mysql 5.1,它给出了以下错误:

mysql> ALTER TABLE `company_to_module`

-> ADD CONSTRAINT `FK82977604FE40A062` FOREIGN KEY (`company_id`) REFERENCES `company` (`company_id`) ON DELETE RESTRICT ON UPDATE RESTRICT;

ERROR 1005 (HY000): Can't create table 'jobprep_production.#sql-44a5_76' (errno: 150)

该表中没有与我要添加的外键冲突的值。数据库未更改。外键DID在…之前存在,因此数据很好。更不用说我使用了服务器上拥有的SAME数据库,并且该数据库在Windows上可以正常迁移。但是这些相同的外键迁移并没有取代Debian。

列使用相同的类型-BIGINT(20)

这些名称实际上确实存在于它们各自的表中。

这些表是innodb。他们已经在其他列中保留了外键。这不是一个新的数据库。

我不能删除表,因为这是生产数据库。

表“按原样”在我的数据库中:

CREATE TABLE `company_to_module` (

`company_id` bigint(20) NOT NULL,

`module_id` bigint(20) NOT NULL,

KEY `FK8297760442C8F876` (`module_id`),

KEY `FK82977604FE40A062` (`company_id`) USING BTREE,

CONSTRAINT `FK8297760442C8F876` FOREIGN KEY (`module_id`) REFERENCES `module` (`module_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

Create Table: CREATE TABLE `company` (

`company_id` bigint(20) NOT NULL AUTO_INCREMENT,

`name` varchar(255) DEFAULT NULL,

`address` varchar(255) DEFAULT NULL,

`postal_code` varchar(255) DEFAULT NULL,

`province_id` bigint(20) DEFAULT NULL,

`phone_number` varchar(255) DEFAULT NULL,

`is_enabled` bit(1) DEFAULT NULL,

`director_id` bigint(20) DEFAULT NULL,

`homepage_viewable` bit(1) NOT NULL DEFAULT b'1',

`courses_created` int(10) NOT NULL DEFAULT '0',

`header_background` varchar(25) DEFAULT '#172636',

`display_name` varchar(25) DEFAULT '#ffffff',

`tab_background` varchar(25) DEFAULT '#284767',

`tab_text` varchar(25) DEFAULT '#ffffff',

`hover_tab_background` varchar(25) DEFAULT '#284767',

`hover_tab_text` varchar(25) DEFAULT '#f2e0bd',

`selected_tab_background` varchar(25) DEFAULT '#f5f5f5',

`selected_tab_text` varchar(25) DEFAULT '#172636',

`hover_table_row_background` varchar(25) DEFAULT '#c0d2e4',

`link` varchar(25) DEFAULT '#4e6c92',

PRIMARY KEY (`company_id`),

KEY `FK61AE555A71DF3E03` (`province_id`),

KEY `FK61AE555AAC50C977` (`director_id`),

CONSTRAINT `company_ibfk_1` FOREIGN KEY (`director_id`) REFERENCES `user_account` (`user_account_id`),

CONSTRAINT `FK61AE555A71DF3E03` FOREIGN KEY (`province_id`) REFERENCES `province` (`province_id`)

) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8

这是innodb的状态:

------------------------

LATEST FOREIGN KEY ERROR

------------------------

110415 3:14:34 Error in foreign key constraint of table jobprep_production/#sql-44a5_1bc:

FOREIGN KEY (`company_id`) REFERENCES `company` (`company_id`) ON DELETE RESTRICT ON UPDATE RESTRICT:

Cannot resolve column name close to:

) ON DELETE RESTRICT ON UPDATE RESTRICT

如果我尝试从“ company_to_module”中删除索引,则会出现此错误:

#1025 - Error on rename of './jobprep_production/#sql-44a5_23a' to './jobprep_production/company_to_module' (errno: 150)

这是我的innodb变量:

+---------------------------------+------------------------+

| Variable_name | Value |

+---------------------------------+------------------------+

| innodb_adaptive_hash_index | ON |

| innodb_additional_mem_pool_size | 1048576 |

| innodb_autoextend_increment | 8 |

| innodb_autoinc_lock_mode | 1 |

| innodb_buffer_pool_size | 8388608 |

| innodb_checksums | ON |

| innodb_commit_concurrency | 0 |

| innodb_concurrency_tickets | 500 |

| innodb_data_file_path | ibdata1:10M:autoextend |

| innodb_data_home_dir | |

| innodb_doublewrite | ON |

| innodb_fast_shutdown | 1 |

| innodb_file_io_threads | 4 |

| innodb_file_per_table | OFF |

| innodb_flush_log_at_trx_commit | 1 |

| innodb_flush_method | |

| innodb_force_recovery | 0 |

| innodb_lock_wait_timeout | 50 |

| innodb_locks_unsafe_for_binlog | OFF |

| innodb_log_buffer_size | 1048576 |

| innodb_log_file_size | 5242880 |

| innodb_log_files_in_group | 2 |

| innodb_log_group_home_dir | ./ |

| innodb_max_dirty_pages_pct | 90 |

| innodb_max_purge_lag | 0 |

| innodb_mirrored_log_groups | 1 |

| innodb_open_files | 300 |

| innodb_rollback_on_timeout | OFF |

| innodb_stats_on_metadata | ON |

| innodb_support_xa | ON |

| innodb_sync_spin_loops | 20 |

| innodb_table_locks | ON |

| innodb_thread_concurrency | 8 |

| innodb_thread_sleep_delay | 10000 |

+---------------------------------+------------------------+

我还想补充一点,当我在玩添加外键时,mysql破坏了我的数据库并破坏了它。我必须从备份重新加载才能重试。

帮帮我?:/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值