Tôi muốn thay đổi kiểu dữ liệu của một số cột khóa chính trong cơ sở dữ liệu của tôi từ INT thành BIGINT. Định nghĩa sau đây là một món đồ chơi-ví dụ để minh họa cho vấn đề:mysql thay đổi int cột để bigint với các phím nước ngoài
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`);
Bây giờ khi tôi cố gắng để execut một trong các lệnh sau:
ALTER TABLE `thing` CHANGE `id` `id` BIGINT NOT NULL AUTO_INCREMENT;
ALTER TABLE `owner` CHANGE `thing_id` `thing_id` BIGINT NOT NULL;
tôi đang chạy vào một lỗi
#1025 - Error on rename of './debug/#[temp-name]' to './debug/[tablename]' (errno: 150)
SHOW INODB STATUS kết quả đầu ra:
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")
Tôi đoán rằng các khối định nghĩa khóa ngoài thay đổi kiểu cột ở hai bên. Cách tiếp cận ngây thơ để giải quyết vấn đề này là xóa các định nghĩa khóa ngoài, thay đổi các cột và định nghĩa lại các khóa ngoài. là có một giải pháp tốt hơn?
Cách tiếp cận bạn đề cập không phải là ngây thơ, bạn thực sự có thể sử dụng nó. – Devart
Cảm ơn Devart! Tôi đã tìm kiếm một giải pháp ít đau đớn vì tôi phải làm nó trên rất nhiều bảng, nhưng dường như giảm và tái tạo ràng buộc dường như là con đường để đi: - /. – deif