# 1025 - Lỗi đổi tên của './database/#sql-2e0f_1254ba7' thành './database/table' (errno: 150)


81

Vì vậy, tôi đang cố gắng thêm khóa chính vào một trong các bảng trong cơ sở dữ liệu của mình. Ngay bây giờ nó có một khóa chính như sau:

PRIMARY KEY (user_id, round_number)

Trường hợp user_id là khóa ngoại.

Tôi đang cố gắng thay đổi nó thành thế này:

PRIMARY KEY (user_id, round_number, created_at)

Tôi đang thực hiện việc này trong phpmyadmin bằng cách nhấp vào biểu tượng khóa chính trong chế độ xem cấu trúc bảng.

Đây là lỗi tôi nhận được:

#1025 - Error on rename of './database/#sql-2e0f_1254ba7' to './database/table' (errno: 150)

Nó là một cơ sở dữ liệu MySQL với công cụ bảng InnoDB.


1
Tìm kiếm nhanh bằng Google cho tôi ý tưởng rằng vấn đề này liên quan đến các ràng buộc. Các liên kết hữu ích có thể có: dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.htmlsimplicidade.org/notes/archives/2008/03/mysql_errno_150.html
Lekensteyn

Câu trả lời:


138

Có thể có một bảng khác có khóa ngoại tham chiếu đến khóa chính mà bạn đang cố gắng thay đổi.

Để tìm ra bảng nào gây ra lỗi, bạn có thể chạy SHOW ENGINE INNODB STATUSvà sau đó xem LATEST FOREIGN KEY ERRORphần.


2
Trong trường hợp của tôi, cơ sở dữ liệu mới được tạo, không có bảng nào cả.
Guilherme Ferreira

33

Như đã nói, bạn cần phải loại bỏ các FK trước đây. Trên Mysql làm như thế này:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;

ALTER TABLE `table_name` DROP INDEX `id_name_fk`;

1
Câu trả lời của bạn thực sự đã giúp tôi. DROP FOREIGN KEY đã giải quyết được vấn đề. Cảm ơn
Ram Babu S

1
Điều này cũng giải quyết được vấn đề của tôi, nhưng cùng một tập lệnh đang hoạt động trên MySQL phát triển của tôi. Đây có phải là điều đã thay đổi trong phiên bản MySQL không?
Bancarel Valentin

24

Đối với những người đang hỏi câu hỏi này qua google ... lỗi này cũng có thể xảy ra nếu bạn cố gắng đổi tên một trường hoạt động như một khóa ngoại.


13

Để bỏ qua điều này trong PHPMyAdmin hoặc với MySQL, trước tiên hãy loại bỏ ràng buộc khóa ngoại trước khi đổi tên thuộc tính.

(Đối với người dùng PHPMyAdmin: Để loại bỏ các ràng buộc FK trong PHPMyAdmin, hãy chọn thuộc tính rồi nhấp vào "dạng xem quan hệ" bên cạnh "dạng xem in" trong thanh công cụ bên dưới cấu trúc bảng)


1
Tôi nghĩ đây là câu trả lời chính xác nhất
MontrealDevOne

4

Nếu bạn đang cố gắng xóa một cột là TỪ KHÓA NGOẠI TỆ, bạn phải tìm đúng tên không phải là tên cột. Ví dụ: Nếu tôi đang cố xóa trường máy chủ trong bảng Báo thức là khóa ngoại của bảng máy chủ.

  1. SHOW CREATE TABLE alarm; Tìm CONSTRAINT `server_id_refs_id_34554433` FORIEGN KEY (`server_id`) REFERENCES `server` (`id`)dòng.
  2. ALTER TABLE `alarm` DROP FOREIGN KEY `server_id_refs_id_34554433`;
  3. ALTER TABLE `alarm` DROP `server_id`

Thao tác này sẽ xóa máy chủ khóa ngoại khỏi bảng Báo thức.


4

Tôi đã gặp sự cố này, nó là đối với khóa ngoại

Nhấp vào Relation View(như hình ảnh bên dưới), sau đó tìm tên của trường mà bạn sẽ xóa nó, và dưới Foreign key constraint (INNODB)cột, chỉ cần đặt lựa chọn không có gì! Có nghĩa là không có khóa ngoại

nhập mô tả hình ảnh ở đây

Hy vọng rằng hiệu quả!


0

Nếu bạn đang thêm khóa ngoại và gặp phải lỗi này, đó có thể là giá trị trong bảng con không có trong bảng mẹ.

Giả sử đối với cột mà khóa ngoại phải được thêm vào có tất cả các giá trị được đặt thành 0 và giá trị này không có sẵn trong bảng mà bạn đang tham chiếu đến nó.

Bạn có thể đặt một số giá trị có trong bảng cha và sau đó thêm khóa ngoại phù hợp với tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.