Trong bài viết ngắn này, chúng ta sẽ tìm hiểu cách thêm một cột có giá trị mặc định vào một bảng hiện có trong SQL Server
Ràng buộc mặc định của máy chủ SQL
Như tên gợi ý, ràng buộc mặc định xác định giá trị mặc định cho một cột cụ thể. Nếu chúng tôi không cung cấp giá trị cho cột, Máy chủ SQL sẽ sử dụng giá trị đã chỉ định thay vì null
Điều này chủ yếu hữu ích khi kết hợp với các ràng buộc khác, chẳng hạn như không null
Trong hầu hết các trường hợp, bạn đặt ràng buộc mặc định khi tạo bảng. Tuy nhiên, bạn có thể thêm cột có giá trị mặc định. Làm điều này ảnh hưởng đến dữ liệu được chèn sau ràng buộc mặc định
Thêm một cột có giá trị mặc định
Giả sử chúng ta có một bảng như trong truy vấn sau
usetemporary_db;
createtablesample_table[
khóa chính idintnotnullidentity[1,1],
namevarchar[50],
];
insertintosample_table[name]
values ['Abigail Henderson'],
['Peter Miller'],
['Harris Gonzales'],
['Anne Jenkins'],
['Katherine Patterson'];
select * fromsample_table;
GETDATE[]
TẠO BẢNG Đơn đặt hàng [
ID int NOT NULL,
OrderNumber int NOT NULL,
OrderDate ngày DEFAULT GetDATE
];
SQL MẶC ĐỊNH trên ALTER TABLE
Để tạo ràng buộc DEFAULT
trên cột "Thành phố" khi bảng đã được tạo, hãy sử dụng SQL sau
Điều này có rất nhiều câu trả lời, nhưng tôi thấy cần phải thêm phương pháp mở rộng này. Điều này có vẻ lâu hơn nhiều, nhưng nó cực kỳ hữu ích nếu bạn đang thêm trường NOT NULL vào bảng có hàng triệu hàng trong cơ sở dữ liệu đang hoạt động
ALTER TABLE {schemaName}.{tableName}
ADD {columnName} {datatype} NULL
CONSTRAINT {constraintName} DEFAULT {DefaultValue}
UPDATE {schemaName}.{tableName}
SET {columnName} = {DefaultValue}
WHERE {columName} IS NULL
ALTER TABLE {schemaName}.{tableName}
ALTER COLUMN {columnName} {datatype} NOT NULL
Điều này sẽ làm là thêm cột dưới dạng trường có thể null và với giá trị mặc định, cập nhật tất cả các trường thành giá trị mặc định [hoặc bạn có thể gán các giá trị có ý nghĩa hơn] và cuối cùng, nó sẽ thay đổi cột thành NOT NULL
Lý do cho điều này là nếu bạn cập nhật một bảng tỷ lệ lớn và thêm một trường không null mới, nó phải ghi vào từng hàng và do đó sẽ khóa toàn bộ bảng khi nó thêm cột và sau đó ghi tất cả các giá trị
Phương pháp này sẽ thêm cột nullable hoạt động nhanh hơn rất nhiều, sau đó điền dữ liệu trước khi đặt trạng thái không null
Tôi nhận thấy rằng thực hiện toàn bộ công việc trong một câu lệnh sẽ khóa một trong các bảng hoạt động nhiều hơn của chúng tôi trong 4-8 phút và khá thường xuyên, tôi đã tắt quy trình. Phương pháp này mỗi bộ phận thường chỉ mất vài giây và ít gây ra hiện tượng khóa
Ngoài ra, nếu bạn có một bảng trong khu vực có hàng tỷ hàng thì có thể đáng để cập nhật hàng loạt như vậy