2009-10-09 33 views
43

Trong mysql, tôi có thể thêm một cột và khóa ngoài trong cùng một câu lệnh không? Và cú pháp thích hợp để thêm fk là gì?Làm thế nào để thêm một cột và làm cho nó một khóa nước ngoài trong tuyên bố MySQL đơn?

Đây là SQL của tôi:

ALTER TABLE database.table 
ADD COLUMN columnname INT DEFAULT(1), 
FOREIGN KEY (fk_name) REFERENCES reftable(refcolumn) ON DELETE CASCADE; 

... và các thông báo lỗi kèm theo:

Bạn có một lỗi trong cú pháp SQL của bạn; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn cho đúng cú pháp để sử dụng gần 'KEY NƯỚC NGOÀI (fk_name) Tài liệu tham khảo reftable (refcolumn) ON CASCADE DELETE' tại dòng 4

Trả lời

58

Hãy thử điều này:

ALTER TABLE database.table 
    ADD COLUMN columnname INT DEFAULT(1), 
    ADD FOREIGN KEY fk_name(fk_column) REFERENCES reftable(refcolumn) ON DELETE CASCADE; 
+2

Và đối với 'fk_name' và' fk_column' tôi phải chèn whaat ...? – C4u

+4

@ C4ud3x 'fk_name' sẽ là tên bạn muốn đưa ra ràng buộc cụ thể này cho mục đích nhận dạng (tùy chọn trong truy vấn) mysql tự động phát hiện nó, và' fk_column' là cột tham chiếu bạn muốn làm việc như khóa ngoài. –

+0

Được rồi, cảm ơn vì đã giải thích. – C4u

12

Truy vấn sau thêm một cột bằng cách thay đổi truy vấn và truy vấn ràng buộc biến nó thành một FK trong một truy vấn mysql đơn lẻ. Bạn có thể làm điều đó như thế này,

CÚ PHÁP:

ALTER TABLE `SCHEMANAME`.`TABLE1` 
ADD COLUMN `FK_COLUMN` BIGINT(20) NOT NULL, 
ADD CONSTRAINT `FK_TABLE2_COLUMN` FOREIGN KEY (`FK_COLUMN`) 
REFERENCES `SCHEMANAME`.`TABLE2`(`PK_COLUMN`); 

VÍ DỤ:

ALTER TABLE `USERDB`.`ADDRESS_TABLE` 
ADD COLUMN `USER_ID` BIGINT(20) NOT NULL AFTER `PHONE_NUMBER`, 
ADD CONSTRAINT `FK_CUSTOMER_TABLE_CUSTOMER_ID` FOREIGN KEY (`USER_ID`) 
REFERENCES `USERDB`.`CUSTOMER_TABLE`(`CUSTOMER_ID`); 
-1

Bạn có thể sử dụng nó.

ALTER TABLE database.table 
ADD COLUMN columnname INT DEFAULT(1); 
ALTER TABLE database.table add FOREIGN KEY (fk_name) REFERENCES reftable(refcolumn) ON DELETE CASCADE; 
Các vấn đề liên quan