Câu trả lời:
Là một tùy chọn, ban đầu bạn có thể tạo cột Null-could, sau đó cập nhật cột bảng của bạn với các giá trị không phải null hợp lệ và cuối cùng là cột ALTER để đặt ràng buộc NOT NULL:
ALTER TABLE MY_TABLE ADD STAGE INT NULL
GO
UPDATE MY_TABLE SET <a valid not null values for your column>
GO
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL
GO
Một tùy chọn khác là chỉ định giá trị mặc định chính xác cho cột của bạn:
ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0'
CẬP NHẬT: Xin lưu ý rằng câu trả lời ở trên chứa GO
điều bắt buộc khi bạn chạy mã này trên máy chủ Microsoft SQL. Nếu bạn muốn thực hiện thao tác tương tự trên Oracle hoặc MySQL, bạn cần sử dụng dấu chấm phẩy ;
như sau:
ALTER TABLE MY_TABLE ADD STAGE INT NULL;
UPDATE MY_TABLE SET <a valid not null values for your column>;
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL;
update
Tuyên bố nguy hiểm mà bạn đề cập sẽ gây bất lợi trong bất kỳ truy vấn nào. Nó phải đủ đơn giản để xem liệu bạn có thêm một cột trong update
câu lệnh ở đây hay không. Bạn thường chỉ thêm một hoặc hai cột cùng một lúc. update
Trong ví dụ này, nếu bạn tình cờ thêm một cột bổ sung vào bảng sao kê của mình , thì có lẽ bạn không nên phụ trách dữ liệu ngay từ đầu.
ALTER COLUMN
này KHÔNG được hỗ trợ trong SQLite.
GO
trước đây và nó dường như không phải là một phần của đặc tả SQL , do đó, nó có thể sẽ dẫn đến lỗi cho các tập lệnh không được thực thi bởi một trong những công cụ hỗ trợ nó. Chỉ sử dụng dấu chấm phẩy? Tôi không khuyên bạn nên phổ biến các tiêu chuẩn của Microsoft vì họ hiếm khi quan tâm đến bất kỳ tiêu chuẩn nào đã được thiết lập và hợp lý, mà tự phát minh ra tiêu chuẩn của họ chỉ để phát minh ra riêng họ. Ngoài ra, câu trả lời hữu ích.
Nếu bạn không cho phép cột Null, bạn cần cung cấp giá trị mặc định để điền các hàng hiện có. ví dụ
ALTER TABLE dbo.YourTbl ADD
newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0
Trên phiên bản Enterprise, đây là một thay đổi chỉ về siêu dữ liệu kể từ năm 2012
Các triển khai SQL khác có các hạn chế tương tự. Lý do là việc thêm một cột yêu cầu thêm các giá trị cho cột đó (về mặt logic, ngay cả khi không phải về mặt vật lý), giá trị mặc định là NULL
. Nếu bạn không cho phép NULL
và không có default
, giá trị sẽ là bao nhiêu?
Vì SQL Server hỗ trợ ADD CONSTRAINT
, tôi khuyên bạn nên tiếp cận cách tạo cột nullable của Pavel, sau đó thêm một NOT NULL
ràng buộc sau khi bạn đã điền nó bằng các NULL
giá trị không phải .
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"