如何使用命令行更改MySQL中的現有表,將外鍵設置爲另一個表?如何使用命令行更改MySQL表的外鍵
8
A
回答
16
您必須刪除現有的foreign key
並創建另一個。例如是這樣的:
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;
+0
您的代碼有效,但我有一個相關的問題。當我試圖將這兩個查詢合併爲一個查詢時,'ALTER TABLE my_table DROP ...,ADD ...'出現錯誤,_errno:121「寫入或更新時出現重複鍵」_。我錯過了什麼,或者確實不可能合併這些查詢? – iloo
2
在mysql
命令提示符執行help alter table
並且輸出是非常自我解釋。
查找add constraint
與foreign key
子句並將其應用於您的表。
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 ...
2
我能夠實現同樣的事情:
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)
2
如果你有多個外鍵鏈接在一起,你會得到與errorno 15x
結束一個錯誤就極有可能意味着有其他表這取決於您要刪除的外鍵。
要在出現該錯誤時刪除外鍵,您需要執行SET FOREIGN_KEY_CHECKS = 0;
,然後必須首先將外鍵刪除到沒有任何其他表依賴它們的表上。然後,您可以成功地將外鍵放在鏈中的下一張表上,等等。
完成後,請確保您再次運行SET FOREIGN_KEY_CHECKS = 1;
。
相關問題
- 1. 使用命令行更改註冊表
- 2. 如何更改neovim命令行中的光標鍵行爲?
- 3. MySQL的:更改表與外鍵
- 4. 如何在MySQL命令行客戶端中更改用戶
- 5. 如何使用MySQL命令行
- 6. MySQL的使用命令行
- 7. 如何更改MySQL中表的主鍵?
- 8. 使用命令行更改鍵盤輸入
- 9. 如何在mysql中將bigint更改爲int,使用帶有外鍵的表
- 10. 如何使用MySQL命令
- 11. 如何使用外鍵更改InnoDB表中的字符集?
- 12. 如何更改Emacs命令行顏色
- 13. 如何使用外鍵更新表格
- 14. 如何在錶行插入MySQL命令
- 15. 如何更改外鍵
- 16. 如何從命令行更改註冊表註冊表?
- 17. 更改在MySQL中具有外鍵約束的表主鍵
- 18. 使用alter table命令創建MySQL外鍵
- 19. 如何使用Java執行Windows命令 - 更改網絡設置
- 20. 如何使用Git命令行推送更改?
- 21. 如何使用Windows命令行更改目錄
- 22. 如何使用Eclipse運行命令更改stdin流?
- 23. 如何使用命令行界面更改nexus存儲庫url?
- 24. 如何使用命令行更改grails版本?
- 25. 如何使用命令行更改DCOM設置
- 26. 如何更改進程列表中的命令行?
- 27. 如何通過命令行轉儲沒有外鍵的MySQL文件?
- 28. 如何在命令行中更改現有更改列表的描述?
- 29. 更改mysql中的外鍵屬性
- 30. 帶有外鍵的MySQL更改引擎
我試圖使用谷歌,它沒有發現任何涵蓋此確切情況。我知道在MySQL Administrator中執行該操作,或者使用外鍵創建表,但在提到的問題中我不知道這一點。 –
請注意,您可以使用'mysql 5.7 alter table'在Google中找到產品文檔。 –