Làm thế nào để thay đổi bảng hiện có trong MySQL, đặt khóa ngoài cho bảng khác, bằng cách sử dụng dòng lệnh?Làm thế nào để thay đổi khóa ngoài của bảng MySQL bằng cách sử dụng dòng lệnh
Trả lời
Bạn phải hủy hiện tại foreign key
và tạo một số khác. Ví dụ như thế này:
ALTER TABLE my_table DROP FOREIGN KEY my_key;
ALTER TABLE my_table ADD CONSTRAINT my_key FOREIGN KEY ('some_id')
REFERENCES some_new_table ('some_other_id') ON UPDATE CASCADE ON DELETE CASCADE;
Mã của bạn hoạt động, nhưng tôi có một câu hỏi liên quan. Khi tôi cố gắng kết hợp hai truy vấn đó thành một truy vấn, 'ALTER TABLE my_table DROP ..., ADD ...' Tôi gặp lỗi, _errno: 121 "Khóa trùng lặp trên ghi hoặc cập nhật" _. Tôi có thiếu một cái gì đó, hoặc là nó thực sự không thể kết hợp những truy vấn? – iloo
Execute help alter table
tại mysql
dấu nhắc lệnh và đầu ra là rất nhiều tự giải thích.
Tìm kiếm add constraint
với mệnh đề foreign key
và áp dụng nó trên bàn của bạn.
mysql> help alter table
Name: 'ALTER TABLE'
Description:
Syntax:
ALTER [IGNORE] TABLE tbl_name
alter_specification [, alter_specification] ...
alter_specification:
ADD [COLUMN] column_definition [FIRST | AFTER col_name ]
| ADD [COLUMN] (column_definition,...)
| ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
| ADD [CONSTRAINT [symbol]]
PRIMARY KEY [index_type] (index_col_name,...)
| ADD [CONSTRAINT [symbol]]
UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...)
| ADD [FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (index_col_name,...)
| ADD [CONSTRAINT [symbol]]
FOREIGN KEY [index_name] (index_col_name,...)
[reference_definition]
| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
| CHANGE [COLUMN] old_col_name column_definition
[FIRST|AFTER col_name]
| MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
| DROP [COLUMN] col_name
| DROP PRIMARY KEY
| DROP {INDEX|KEY} index_name
| DROP FOREIGN KEY fk_symbol
| DISABLE KEYS
| ENABLE KEYS
| RENAME [TO] new_tbl_name
| ORDER BY col_name
| CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
| [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name]
| DISCARD TABLESPACE
| IMPORT TABLESPACE
| table_option ...
tôi đã có thể đạt được điều đó bằng cách:
ALTER TABLE the_table_name
ADD CONSTRAINT the_name_of_column_you_want_to_use_as_foreign_key
REFERENCES other_table_primary_id (Column_name)
Nếu bạn đã nhiều phím ngoại xích lại với nhau và bạn nhận được một lỗi kết thúc bằng errorno 15x
nó rất có thể có nghĩa là có bảng khác phụ thuộc vào khóa ngoại mà bạn đang cố gắng bỏ.
Để thả khóa ngoài khi bạn gặp lỗi đó, bạn sẽ cần phải làm SET FOREIGN_KEY_CHECKS = 0;
và sau đó trước tiên bạn phải thả các khóa lạ trên các bảng không có bất kỳ bảng nào khác phụ thuộc vào chúng. Sau đó bạn có thể thả thành công các khóa lạ trên bảng tiếp theo trong chuỗi và cứ tiếp tục như vậy.
Khi bạn hoàn tất, hãy đảm bảo bạn chạy lại SET FOREIGN_KEY_CHECKS = 1;
.
- 1. Tôi làm cách nào để truy vấn bằng cách sử dụng khóa ngoài trong MySQL?
- 2. Làm thế nào để thêm khóa ngoài (MySQL)
- 3. MySQL - Sử dụng khóa ngoài làm khóa chính quá
- 4. Làm cách nào để kiểm tra các thay đổi trong bảng MySQL (sử dụng MySQL 4)?
- 5. Thay đổi bảng để cung cấp ràng buộc khóa ngoài
- 6. MySQL - Cách chèn vào nhiều bảng có khóa ngoài
- 7. Làm thế nào để thay đổi một dòng trong một tệp bằng cách sử dụng NAnt?
- 8. Làm thế nào để hủy bỏ Visual Studio xây dựng bằng cách sử dụng dòng lệnh?
- 9. Làm thế nào để làm một dòng lệnh xây dựng bằng cách sử dụng Delphi 7?
- 10. Thay đổi bảng MySQL để thêm ràng buộc khóa ngoài dẫn đến lỗi
- 11. Làm cách nào để thay đổi giá trị của khóa ngoài trong postgresql?
- 12. Làm cách nào để thay đổi bảng mã mặc định của bảng MySQL?
- 13. Vô hiệu hóa kiểm tra khóa ngoài trên dòng lệnh
- 14. Phân vùng bảng mySQL có khóa ngoài?
- 15. Làm cách nào để bạn tham gia hai bảng trên trường khóa ngoài bằng cách sử dụng django ORM?
- 16. Làm thế nào để thay đổi vĩnh viễn ngôn ngữ của dòng lệnh mercurial trên Windows?
- 17. Làm thế nào để có được thông tin máy chủ mysql bằng cách sử dụng dòng lệnh?
- 18. Làm cách nào để thay đổi hành động tham chiếu khóa ngoài? (Hành vi)
- 19. Sử dụng di chuyển để xóa bảng có khóa ngoài
- 20. Làm thế nào để có được số dòng trong bảng excel bằng cách sử dụng python?
- 21. Làm cách nào để thay đổi giá trị mặc định của bảng mysql?
- 22. Làm cách nào để thay đổi thư mục trong dòng lệnh bằng Clojure?
- 23. Khóa ngoài của MySQL trên cùng một bảng
- 24. Dòng lệnh Perl nhiều dòng thay thế
- 25. Khung thực thể - Chèn vào nhiều bảng bằng cách sử dụng khóa ngoài
- 26. Sử dụng CSS làm cách nào để chỉ thay đổi cột thứ 2 của bảng
- 27. Làm thế nào để thay thế '/' bằng '\\' bằng cách sử dụng thay thế QString()?
- 28. Khóa ngoài và Lỗi MySQL
- 29. Làm thế nào để thay đổi một Chủ cửa sổ bằng cách sử dụng tay cầm
- 30. PHP tìm kiếm mysql nhiều bảng bằng cách sử dụng từ khóa
Tôi đã cố gắng sử dụng Google và không tìm thấy bất kỳ thứ gì bao gồm trường hợp chính xác này. Tôi biết để làm điều đó trong MySQL Administrator, hoặc để tạo ra bảng với khóa nước ngoài, nhưng tôi không biết điều này trong câu hỏi được đề cập. –
Xin lưu ý rằng bạn có thể tìm thấy tài liệu sản phẩm trong Google với bảng 'mysql 5.7 thay đổi'. –