我需要更改一堆 PK 列类型,并使用 MySQL 的 Workbench 来设计我的数据库。
是否可以更改给定表中的 PK 类型,并使所有 FK 类型自动更改?
最佳答案
我执行此操作是为了检查工作台。我创建了表 employees 和 employees_hobbies。表employees
的PK
是id_employees
,类型为INT(11)
。 employees_hobbies
表具有类型 INT(11)
的 FK
id_employees
。我尝试将employees
表的id_employees
中的字段类型更改为CHAR(5)
,错误如下:
ERROR 1025: Error on rename of './teste/#sql-4aa_10875' to './teste/employees' (errno: 150) SQL Statement: ALTER TABLE
teste
.employees
CHANGE COLUMNid_employees
id_employees
CHAR(5) NOT NULLERROR: Error when running failback script.
错误的意思是(errno: 150)
MySQL error code 150: Foreign key constraint is incorrectly formed
我的表格:
CREATE TABLE `employees` (
`id_employees` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) DEFAULT NULL,
`url_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id_employees`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `employees_hobbies` (
`id_employees_hobbies` int(11) NOT NULL AUTO_INCREMENT,
`id_employees` int(11) NOT NULL,
`id_hobbies` int(11) NOT NULL,
PRIMARY KEY (`id_employees_hobbies`),
KEY `fk_employees_hobbies_1_idx` (`id_employees`),
KEY `fk_employees_hobbies_2_idx` (`id_hobbies`),
CONSTRAINT `fk_employees_hobbies_1` FOREIGN KEY (`id_employees`) REFERENCES `employees` (`id_employees`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_employees_hobbies_2` FOREIGN KEY (`id_hobbies`) REFERENCES `hobbies` (`id_hobbies`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
您无法在工作台中执行此操作。
解决方案是生成脚本并解析所有执行交换类型的FK
。
关于mysql - 使用 MySQL Workbench 更改 PK 和 FK 列类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23717341/