Cách thêm ràng buộc không null vào cột hiện có trong MySQL


164

Tôi có tên bảng là "Người" với các tên cột sau

P_Id(int),
LastName(varchar),
FirstName (varchar).

Tôi quên đưa ra NOT NULLràng buộc cho P_Id.

Bây giờ tôi đã thử với truy vấn sau để thêm NOT NULLràng buộc vào cột hiện có được gọi là P_Id,

1. ALTER TABLE  Person MODIFY  (P_Id NOT  NULL);
2. ALTER TABLE Person ADD CONSTRAINT NOT  NULL NOT NULL (P_Id);

Tôi đang nhận được lỗi cú pháp ....

Câu trả lời:


261

Chỉ cần sử dụng một ALTER TABLE... MODIFY...truy vấn và thêm NOT NULLvào định nghĩa cột hiện có của bạn. Ví dụ:

ALTER TABLE Person MODIFY P_Id INT(11) NOT NULL;

Lưu ý: bạn cần xác định lại định nghĩa cột đầy đủ khi sử dụng MODIFYtruy vấn. Nếu cột của bạn có, ví dụ, một DEFAULTgiá trị hoặc một nhận xét cột, bạn cần chỉ định nó trong MODIFYcâu lệnh cùng với kiểu dữ liệu và NOT NULL, hoặc nó sẽ bị mất. Cách thực hành an toàn nhất để bảo vệ chống lại các rủi ro đó là sao chép định nghĩa cột từ đầu ra của SHOW CREATE TABLE YourTabletruy vấn, sửa đổi nó để bao gồm các NOT NULLràng buộc và dán nó vào ALTER TABLE... MODIFY...truy vấn của bạn .


4
@Positive tại sao bạn viết INT(11)và không chỉ INT? Tác dụng của là 11gì?
Suzanne Dupéron

2
11 chỉ là một ví dụ, nó đặt độ dài của P_Id. tôi không chắc có cần phải thêm lại hay không mặc dù bạn có thể không muốn thay đổi nó.
Gerard

2
@Pacerier cùng changebạn sửa đổi tên của cột
Javier P

1
@Victor MODIFYcũng được hỗ trợ bởi Oracle. Và PostgreSQL không hỗ trợ CHANGEthay vào đó nó cung cấp một ALTER [COLUMN]tuyên bố.
Ông Deathless

1
lưu ý đến bản thân: ngôn ngữ truy vấn có cấu trúc không phải là ngôn ngữ truy vấn tiêu chuẩn ...
Dmitry

20

Hãy thử điều này, bạn sẽ biết sự khác biệt giữa thay đổi và sửa đổi,

ALTER TABLE table_name CHANGE curr_column_name new_column_name new_column_datatype [constraints]

ALTER TABLE table_name MODIFY column_name new_column_datatype [constraints]
  • Bạn có thể thay đổi tên và kiểu dữ liệu của cột cụ thể bằng cách sử dụng CHANGE .
  • Bạn có thể sửa đổi kiểu dữ liệu cột cụ thể bằng cách sử dụng MODIFY. Bạn không thể thay đổi tên của cột bằng cách sử dụng câu lệnh này.

Hy vọng, tôi giải thích chi tiết.


5
Bạn thực hiện thao tác MODIFY để thay đổi nhưng ngược lại là không thể?
Navrattan Yadav

1
Điều kỳ lạ là tôi đã gặp lỗi (MySQL 5.6, Workbench 6.3) thay đổi / sửa đổi một cột mà tôi đặt tên là null_love_rate_count, lỗi là # 1138, Sử dụng giá trị NULL không hợp lệ. Tôi đã phải thả và thêm cột thay thế.
William T. Mallard

@NavrattanYadav Tôi nghĩ rằng anh ấy muốn nói đổi tên, không đảo ngược
shaahiin
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.