gpt4 book ai didi

mysql 使用外键将 int 列更改为 bigint

转载 作者:IT老高 更新时间:2023-10-29 00:17:07 24 4
gpt4 key购买 nike

我想将数据库中某些主键列的数据类型从 INT 更改为 BIGINT。以下定义是一个用来说明问题的玩具示例:

CREATE TABLE IF NOT EXISTS `owner` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`thing_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `thing_id` (`thing_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

DROP TABLE IF EXISTS `thing`;
CREATE TABLE IF NOT EXISTS `thing` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

ALTER TABLE `owner`
ADD CONSTRAINT `owner_ibfk_1` FOREIGN KEY (`thing_id`) REFERENCES `thing` (`id`);

现在,当我尝试执行以下命令之一时:

ALTER TABLE `thing` CHANGE `id` `id` BIGINT NOT NULL AUTO_INCREMENT;
ALTER TABLE `owner` CHANGE `thing_id` `thing_id` BIGINT NOT NULL;

我遇到了一个错误

#1025 - Error on rename of './debug/#[temp-name]' to './debug/[tablename]' (errno: 150)

显示 INODB 状态输出:

LATEST FOREIGN KEY ERROR
------------------------
120126 13:34:03 Error in foreign key constraint of table debug/owner:
there is no index in the table which would contain
the columns as the first columns, or the data types in the
table do not match the ones in the referenced table
or one of the ON ... SET NULL columns is declared NOT NULL. Constraint:
,
CONSTRAINT "owner_ibfk_1" FOREIGN KEY ("thing_id") REFERENCES "thing" ("id")

我猜测外键定义会阻止更改任一侧的列类型。解决这个问题的简单方法是删除外键定义,更改列并重新定义外键。有更好的解决方案吗?

最佳答案

即使使用 SET foreign_key_checks = 0,您也无法更改约束列的类型。来自 MySQL 文档:http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

但是,即使 foreign_key_checks = 0,InnoDB 也不允许在列引用不匹配列类型的情况下创建外键约束。

所以,我同意德瓦特的评论。只需放下它并重新创建它。

关于mysql 使用外键将 int 列更改为 bigint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9018286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com