Để chèn dữ liệu vào một bảng có các cột với các ràng buộc mặc định, chúng ta có thể sử dụng ràng buộc DEFAULT cho một giá trị mặc định trong một bảng. Bài viết này sẽ đề cập đến các khía cạnh sau:
- Ràng buộc DEFAULT và quyền cần thiết để tạo chúng.
- Thêm ràng buộc DEFAULT trong khi tạo bảng mới.
- Thêm ràng buộc DEFAULT vào bảng hiện có.
- Sửa đổi và xem định nghĩa ràng buộc bằng tập lệnh T-SQL và SSMS.
DEFAULT CONSTRAINT trong SQL Server là gì?
Ràng buộc mặc định chỉ định giá trị mặc định cho cột.
Khi chúng tôi thực thi câu lệnh INSERT nhưng không chỉ định bất kỳ giá trị nào cho cột có ràng buộc mặc định được tạo, SQL Server sẽ chèn giá trị mặc định được chỉ định trong định nghĩa ràng buộc DEFAULT.
Để tạo ràng buộc mặc định, bạn cần quyền ALTER TABLE và CREATE TABLE.
Thêm Ràng buộc DEFAULT trong khi tạo bảng mới
Có một bảng có tên SalesDetails . Khi chúng tôi chèn dữ liệu vào bảng mà không chỉ định Sale_Qty giá trị cột, truy vấn phải chèn số không. Để làm điều đó, tôi đang tạo một ràng buộc mặc định có tên DF_SalesDetails_SaleQty trên Sale_Qty cột.
USE demodatabase
go
CREATE TABLE salesdetails
(
id INT IDENTITY (1, 1),
product_code VARCHAR(10),
sale_qty INT CONSTRAINT df_salesdetails_saleqty DEFAULT 0
)
Bây giờ, chúng ta hãy kiểm tra hành vi ràng buộc bằng cách chèn một số bản ghi giả vào nó. Thực hiện truy vấn sau:
INSERT INTO salesdetails
(product_code)
VALUES ('PROD0001')
Sử dụng truy vấn sau để xem dữ liệu từ bảng:
INSERT INTO salesdetails
(product_code)
VALUES ('PROD0001')
Đầu ra
Như bạn có thể thấy, không đã được chèn vào Sale_Qty cột.
Trong khi tạo bảng, chúng tôi không chỉ định tên của ràng buộc DEFAULT. SQL Server tạo một ràng buộc bằng tên duy nhất do hệ thống tạo.
Tạo bảng bằng truy vấn dưới đây:
USE demodatabase
go
CREATE TABLE salesdetails
(
id INT IDENTITY (1, 1),
product_code VARCHAR(10),
sale_qty INT DEFAULT 0
)
Chạy tập lệnh sau để xem tên ràng buộc:
SELECT NAME [Constraint name],
parent_object_id [Table Name],
type_desc [Object Type],
definition [Constraint Definition]
FROM sys.default_constraints
Đầu ra
SQL Server đã tạo một ràng buộc với tên do hệ thống tạo.
Thêm ràng buộc DEFAULT vào bảng hiện có
Để thêm một ràng buộc trên một cột hiện có của bảng, chúng tôi sử dụng CÔNG TÁC THÊM BẢNG ALTER TAB tuyên bố:
ALTER TABLE [tbl_name]
ADD CONSTRAINT [constraint_name] DEFAULT [default_value] FOR [Column_name]
Trong cú pháp,
- tbl_name :chỉ định tên của bảng mà bạn muốn thêm ràng buộc mặc định.
- tên_khoản_kéo :chỉ định tên ràng buộc mong muốn.
- column_name: chỉ định tên của cột mà bạn muốn tạo ràng buộc mặc định.
- default_value: chỉ định giá trị mà bạn muốn chèn - một số nguyên, ký tự hoặc chuỗi ký tự.
Khi chúng tôi không chỉ định giá trị của column_name trong câu lệnh INSERT, nó sẽ chèn giá trị được chỉ định trong default_value tham số.
Trước tiên, hãy để chúng tôi thêm Product_name cột thành Chi tiết bán hàng :
ALTER TABLE salesdetails
ADD product_name VARCHAR(500)
Chúng tôi chèn dữ liệu vào bảng mà không chỉ định giá trị cột Product_name. Truy vấn phải chèn N / A .
Để làm điều đó, tôi đang tạo một ràng buộc mặc định có tên DF_SalesDetails_ProductName trên Product_name cột. Truy vấn sau đây tạo ra một ràng buộc mặc định:
ALTER TABLE dbo.salesdetails
ADD CONSTRAINT df_salesdetails_productname DEFAULT 'N/A' FOR product_name
Bây giờ, chúng ta hãy quan sát hành vi ràng buộc. Chèn bản ghi mà không chỉ định tên sản phẩm:
INSERT INTO salesdetails
(product_code,
product_name,
sale_qty)
VALUES ('PROD0002',
'Dell Optiplex 7080',
20)
INSERT INTO salesdetails
(product_code,
sale_qty)
VALUES ('PROD0003',
50)
Sau khi bản ghi được chèn, hãy chạy truy vấn CHỌN để xem dữ liệu:
USE demodatabase
go
SELECT *
FROM salesdetails
go
Đầu ra
Như bạn có thể thấy trong hình ảnh trên, giá trị của Tên_sản_phẩm cột cho PROD0003 là N / A .
Sửa đổi Ràng buộc DEFAULT bằng Tập lệnh T-SQL
Chúng tôi có thể thay đổi định nghĩa của ràng buộc mặc định:trước tiên, hãy loại bỏ ràng buộc hiện có và sau đó tạo ràng buộc bằng một định nghĩa khác.
Giả sử, thay vì chèn N / A , chúng tôi muốn chèn Không áp dụng . Đầu tiên, chúng ta phải thả DF_SalesDetails_ProductName hạn chế. Thực hiện truy vấn sau:
ALTER TABLE dbo.salesdetails
DROP CONSTRAINT df_salesdetails_productname
Khi ràng buộc bị loại bỏ, hãy chạy truy vấn để tạo ràng buộc:
ALTER TABLE dbo.salesdetails
ADD CONSTRAINT df_salesdetails_productname DEFAULT 'Not Applicable' FOR
product_name
Bây giờ, hãy để chúng tôi chèn một bản ghi mà không chỉ định tên sản phẩm:
INSERT INTO salesdetails
(product_code,
sale_qty)
VALUES ('PROD0004',
10)
Chạy câu lệnh SELECT để xem dữ liệu từ Chi tiết bán hàng bảng:
USE demodatabase
go
SELECT *
FROM salesdetails
go
Đầu ra
Như bạn có thể thấy, giá trị của Tên_sản_phẩm cột Không áp dụng.
Xem Ràng buộc DEFAULT bằng SSMS
Chúng ta có thể xem danh sách ràng buộc DEFAULT bằng cách sử dụng SQL Server Management Studio và truy vấn các chế độ xem quản lý động.
Mở SSMS và mở rộng Cơ sở dữ liệu > DemoDatabase > Chi tiết bán hàng > Ràng buộc :
Bạn có thể thấy hai ràng buộc có tên DF_SalesDetails_SaleQty và DF_SalesDetails_ProductName đã tạo.
Một cách khác để xem các ràng buộc bằng cách truy vấn sys.default_constraints . Truy vấn sau đây điền danh sách các ràng buộc mặc định và định nghĩa của chúng:
SELECT NAME [Constraint name],
Object_name(parent_object_id)[Table Name],
type_desc [Consrtaint Type],
definition [Constraint Definition]
FROM sys.default_constraints
Đầu ra
Chúng tôi có thể sử dụng sp_helpconstraint thủ tục được lưu trữ để xem danh sách các ràng buộc được tạo trên bảng:
EXEC Sp_helpconstraint 'SalesDetails'
Đầu ra
constraint_keys cột hiển thị định nghĩa ràng buộc mặc định.
Bỏ Ràng buộc
Chúng ta có thể loại bỏ một hạn chế theo một số cách. Chúng tôi có thể làm điều đó bằng cách sử dụng bất kỳ phương pháp nào sau đây:
- Câu lệnh ALTER TABLE DROP CONSTRAINT.
- Câu lệnh DROP DEFAULT.
Bỏ Ràng buộc bằng Lệnh ALTER TABLE DROP CONSTRAINT
Để loại bỏ ràng buộc, chúng tôi có thể sử dụng CÔNG CỤ DROP BẢNG ALTER yêu cầu. Cú pháp như sau:
Alter table [tbl_name] drop constraint [constraint_name]
Trong cú pháp,
- tbl_name: chỉ định tên bảng có một cột với ràng buộc mặc định.
- tên_chỉ_làm: chỉ định tên ràng buộc mà bạn muốn bỏ.
Giả sử chúng ta muốn bỏ DF_SalesDetails_SaleQty hạn chế từ Chi tiết bán hàng bàn. Chạy truy vấn:
ALTER TABLE dbo.salesdetails
DROP CONSTRAINT [DF_SalesDetails_SaleQty]
Thực thi truy vấn dưới đây để xác minh rằng ràng buộc đã bị loại bỏ:
SELECT NAME [Constraint name],
Object_name(parent_object_id)[Table Name],
type_desc [Consrtaint Type],
definition [Constraint Definition]
FROM sys.default_constraints
Đầu ra
Ràng buộc đã được bỏ.
Xóa Ràng buộc DEFAULT bằng Tuyên bố DROP DEFAULT
Bây giờ, hãy để chúng tôi hiểu cách chúng tôi có thể xóa ràng buộc mặc định bằng cách sử dụng DROP DEFAULT tuyên bố. Cú pháp của DROP DEFAULT như sau:
DROP DEFAULT [constraint_name]
- tên_chỉ_làm: chỉ định tên ràng buộc mà bạn muốn bỏ.
Để loại bỏ ràng buộc bằng cách sử dụng DROP DEFAULT , chạy truy vấn sau:
IF EXISTS (SELECT NAME
FROM sys.objects
WHERE NAME = 'DF_SalesDetails_ProductName'
AND type = 'D')
DROP DEFAULT [DF_SalesDetails_ProductName];
Tóm tắt
Vì vậy, chúng tôi đã xem xét một số khía cạnh thiết yếu của công việc với các ràng buộc mặc định. Chúng tôi đã học cách tạo ràng buộc mặc định trong khi tạo bảng mới hoặc thêm ràng buộc mặc định trên cột hiện có của bảng.
Ngoài ra, chúng tôi đã khám phá các trường hợp sửa đổi định nghĩa ràng buộc mặc định, xem chi tiết về các ràng buộc mặc định bằng cách sử dụng các phương tiện khác nhau và loại bỏ ràng buộc mặc định.
Chúng tôi hy vọng rằng thông tin này và các ví dụ thực tế mà chúng tôi đã kiểm tra sẽ hữu ích cho công việc của bạn.
Đọc thêm
CHÈN SQL VÀO CHỌN:5 cách dễ dàng để xử lý các bản sao