hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Cấu trúc dữ liệu và giải thuật
    • Lập Trình C# Cơ Bản
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Micrsoft SQL Server
Constraint (ràng buộc) table strong SQL Server

Constraint (ràng buộc) table strong SQL Server

  • 23-05-2022
  • Toanngo92
  • 0 Comments

Mục lục

  • Giới thiệu Constraints (ràng buộc)
  • PRIMARY KEY (Khóa chính)
  • UNIQUE (Duy nhất)
  • FOREIGN KEY (Khóa ngoại)
  • CHECK
  • NOT NULL

Giới thiệu Constraints (ràng buộc)

Một trong những chức năng quan trọng trong SQL Server là duy trì và thực thi tính toàn vẹn của dữ liệu. Có một số phương tiện để đạt được điều này, nhưng một trong những phương pháp thường được sử dụng và ưa thích là sử dụng các ràng buộc. Ràng buộc là một thuộc tính được gán cho một cột hoặc tập hợp các cột trong bảng để ngăn một số loại giá trị dữ liệu không nhất quán được nhập vào. Các ràng buộc được sử dụng để áp dụng các quy tắc logic nghiệp vụ và thực thi tính toàn vẹn của dữ liệu.

Ràng buộc (constraint) có thể được tạo khi bảng được tạo, là một phần của định nghĩa bảng, có thể được đưa vào bảng trong khi tạo hoặc đưa vào sau khi tạo.Ràng buộc có thể được phân loại là ràng buộc cột và ràng buộc bảng:

  • Ràng buộc bảng: Có thể áp dụng cho nhiều cột trong bảng và được khai báo độc lập với định nghĩa cột. Ràng buộc bảng phải được sử dụng khi có nhiều hơn một cột trong một ràng buộc
  • Ràng buộc cột: Được phát biểu như một phần của định nghĩa cột và chỉ áp dụng cho cột đó.

Các loại ràng buộc trong SQL Server:

  • PRIMARY KEY
  • UNIQUE
  • FOREIGN KEY
  • CHECK
  • NOT NULL

PRIMARY KEY (Khóa chính)

một bảng thường có khóa chính bao gồm một cột duy nhất hoặc kết hợp các cột để xác định duy nhất từng hàng trong bảng. Ràng buộc PRIMARY KEY được sử dụng để tạo khóa chính nhằm mục đích đảm bảo tính toàn vẹn của thực thể trong bảng.

Lưu ý: Trong 1 bảng, chỉ được tạo một PRIMARY KEY duy nhất.

Hai hàng trong bảng không được có cùng giá trị khóa chính và cột là khóa chính không được phép có giá trị NULL. Do đó, khi một ràng buộc khóa chính được thêm vào các cột hiện có của bảng, SQL Server sẽ kiểm tra xem các quy tắc cho khóa chính có được tuân thủ hay không. Nếu các cột hiện có không tuân thủ các quy tắc của khóa chính thì ràng buộc sẽ không được thêm vào và sẽ báo lỗi trả ra.

Docs: https://docs.microsoft.com/vi-vn/sql/relational-databases/tables/create-primary-keys?view=sql-server-ver15

Cú pháp thêm khóa chính vào cột trong khi thêm bảng:

CREATE TABLE <table_name> (Column_Name datatype PRIMARY KEY [,column_list])

Ví dụ:

create database empDB
GO
use empDB
GO
create table EmpContactPhone (Employee_ID int primary key, MobileNumber bigint, serviceProvider varchar(30), LandlineNumber bigint)

Sau khi chạy lệnh thành công, database empDB được tạo với cột Employee_ID là khóa chính:

Cú pháp thêm khóa chính vào cột khi sửa bảng:

ALTER TABLE <table_name> ADD PRIMARY KEY (<column_name>)

Ví dụ:

create database empDB
GO
use empDB
GO
create table EmpContactPhone (Employee_ID int, MobileNumber bigint, serviceProvider varchar(30), LandlineNumber bigint)
use empDB
GO
alter table EmpContactPhone alter column Employee_ID int not null;
GO
alter table EmpContactPhone  ADD PRIMARY KEY(Employee_ID) ;

UNIQUE (Duy nhất)

Các ràng buộc duy nhất được sử dụng để đảm bảo rằng chỉ các giá trị duy nhất được nhập vào một cột hoặc tập hợp các cột. Nó cho phép các nhà phát triển đảm bảo rằng không có giá trị trùng lặp nào được nhập vào. Các khóa chính luôn luôn là duy nhất (unique). Khóa UNIQUE thực thi tính toàn vẹn của thực thể bởi vì một khi các ràng buộc được áp dụng, không có hai dòng nào trong bảng có thể có cùng giá trị cho các cột. Ràng buộc UNIQUE cho phép giá trị null. Một bảng có thể có nhiều hơn một ràng buộc UNIQUE.

Cú pháp:

create table <table_name> ([column_list,] <column_name> <data_type> UNIQUE [,column_list])

Ví dụ:

create table EmpContactPhoneUnique (Employee_ID int, MobileNumber bigint unique, serviceProvider varchar(30), LandlineNumber bigint)

Với cú pháp trên, khi insert dữ liệu ở cột MobileNumber nếu bị trùng nhau ngooài , SQL sẽ báo lỗi, ví dụ:

insert into EmpContactPhoneUnique values (1,0782222567,'vinaphone','84')
insert into EmpContactPhoneUnique values (2,0782222567,'vinaphone','84')

FOREIGN KEY (Khóa ngoại)

Khóa ngoại trong bảng là cột trỏ đến khóa chính hoặc cột duy nhất trong bảng. Các ràng buộc khóa ngoại được sử dụng để thực thi tính toàn vẹn của tham chiếu. Có thể hiểu khóa ngoại là mối liên kết giữa hai bảng với nhau tạo thành một lược đồ cơ sở dữ liệu quan hệ. 

Lưu ý: khóa ngoại của bảng này cần liên kết với khóa chính của bảng khác, nếu không câu lệnh khởi tạo sẽ báo lỗi

Docs: https://docs.microsoft.com/en-us/sql/relational-databases/tables/create-foreign-key-relationships?view=sql-server-ver15

Cú pháp cho khóa ngoại như sau:

CREATE TABLE <table_name1>([column_list,]) <column_name> <datatype> FOREIGN KEY REFFERENCES <table_name> (<pk_column_name> [,column_list])

Giải thích:

  • table_name: tên của bảng mà có cột primary key được tham chiếu tới
  • <pk_column_name>: tên cột primary key của bảng

Ví dụ:

create database empDB
GO
use empDB
GO
create table EmpContactPhone (Employee_ID int, MobileNumber bigint, serviceProvider varchar(30), LandlineNumber bigint)
use empDB
GO
alter table EmpContactPhone alter column Employee_ID int not null;
GO
alter table EmpContactPhone  ADD PRIMARY KEY(Employee_ID) ;
create table EmpPhoneExpenses (Expense_ID int primary key identity, Employee_ID int FOREIGN KEY REFERENCES EmpContactPhone(Employee_ID),Amount bigint)
Diagram database thể hiện liên hệ foreign key

Ở ví dụ phía trên, chúng ta hiểu cột Employee_ID của bảng EmpPhoneExpenses có khóa ngoại và và liên kết nó với cột Employee_ID là khóa chính của bảng EmpContactPhone.

CHECK

Ràng buộc này sử dụng để kiểm tra giới hạn các giá trị có thể được đặt trong cột. Ràng buộc CHECK thực thi tính toàn vẹn của dữ liệu.

Ví dụ: một ràng buộc kiểm tra có thể được đưa ra nếu giá trị được nhập vào cho cột biểu diễn Độ tuổi cử tri phải lớn hơn hoặc bằng 18.

Nếu dữ liệu được nhập cho cột không phù hợp với điều kiện thì việc chèn sẽ không thành công.
Ràng buộc kiểm tra hoạt động bằng cách chỉ định điều kiện tìm kiếm, điều kiện này có thể đánh giá là TRUE, FALSE hoặc không xác định. Các giá trị đánh giá là FALSE sẽ bị từ chối. Nhiều ràng buộc CHECK có thể được chỉ định cho một cột duy nhất. Một ràng buộc CHECK đơn lẻ cũng có thể được áp dụng cho nhiều cột bằng cách tạo nó ở cấp bảng.

Cú pháp:

Docs: https://docs.microsoft.com/vi-vn/sql/relational-databases/tables/create-check-constraints?view=sql-server-2017

Ví dụ:

create table Employee (ID int primary key identity, Name nvarchar(30), Phone varchar(30), Age int check (Age > 18))

Bước tiếp theo, thử test insert dữ liệu vào bảng employee với dữ liệu vi phạm ràng buộc:

insert into Employee values (N'Toan Ngo Vinh','0911111111',15)
Lỗi trả ra từ SQL Server khi vi phạm ràng buộc

NOT NULL

Ràng buộc not null đảm bảo giá trị trong cột không được phép có giá trị rỗng. Sử dụng để đảm bảo tính toàn vện và logic của dữ liệu, tương tự ràng buộc CHECK

Bài tập

Sử dụng T-SQL để thực hiện các yêu cầu sau:

Tạo database tê n 'studentManagement'
Sử dụng database trên để thực hiện các yêu cầu sau:

Tạo bảng class với các thông tin sau:

Column Datatype Constraint Description
ClassId int not null  
ClassName nvarchar(30)    

Tạo bảng student với thông tin sau:

Column Datatype Constraint Description
StudentId int not null  
StudentName nvarchar(50)    
BirthDate datetime    
ClassId int    

Tạo bảng subject với thông tin sau:

Column Datatype Constraint Description
SubjectId int not null  
SubjectName nvarchar(100)    
SessionCount int    

Tạo bảng result với thông tin sau:

Column Datatype Constraint Description
StudentId int not null  
SubjectId int not null  
Mark int    

Tạo các ràng buộc primary key cho bảng ( sử dụng theo một trong 2 cách alter  hoặc đưa ràng buộc vào khi tạo bảng) :

Constraint Name Table Columns Description
PK_Class Class ClassId  
PK_Student Student StudentId  
PK_Subject Subject SubjectId  
PK_Result Result StudentId,SubjectId  

Tạo ràng buộc foreign key cho bảng ( sử dụng theo một trong 2 cách alter hoặc đưa ràng buộc vào khi tạo bảng):

Constraint Name Refferencing Table Foreign Key Column Referenced Table Referenced Column
FK_Student_Class Student ClassId Class ClassId
FK_Result_Student Result StudentId Student StudentId
FK_Result_Subject Result SubjectId Subject SubjectId

Sửa bảng Result và đổi kiểu dữ liệu cột Mark từ int sang float

Tạo ràng buộc check cho bảng ( sử dụng theo một trong 2 cách alter  hoặc đưa ràng buộc vào khi tạo bảng):

Constraint Name Table Columns Condition
CK_Subject_Check_SessionCount  Subject SessionCount SessionCount > 0

Nhập liệu vào bảng:

Class

ClassId ClassName
1 A1
2 A2
3 A3
4 A4
5 A5

Student

StudentId StudentName BirthDate(dd/mm/yyyy) ClassId
1 Toàn Ngô Vĩnh 01/01/1992 1
2 Nguyễn Văn Test 08/06/1993 3
3 Nguyễn Văn B 10/02/2001 4
4 Nguyễn Văn C 30/06/1998 1
5 Nguyễn Văn D 24/08/1995 2

Subject

SubjectId SubjectName SessionCount
1 C Programming 20
2 HTML/CSS 15
3 Database Management 30

Result

StudentId SubjectId Mark
1 1 8
1 2 7
2 3 5
3 2 7
4 3 8
5 2 4

 

Bài viết liên quan:

PolyBase, Query Store, và Stretch Database trong SQL Server
Dữ liệu JSON trong SQL Server
Các tính năng nâng cao SQL trong SQL Server 2019
Giới thiệu Azure SQL
Xử lý lỗi và TRY CATCH trong SQL Server
Transaction trong SQL Server
FUNCTION (hàm) trong SQL Server
Lập trình và control of flow trong Transact SQL
Trigger trong SQL Server
Index trong SQL Server
Truy vấn metadata và Dynamyic Management Object trong SQL Server
Stored Procedure trong SQL Server

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

2. PHÂN TÍCH VÀ ĐẶC TẢ HỆ THỐNG

1. TỔNG QUAN KIẾN THỨC THỰC HÀNH TRIỂN KHAI DỰ ÁN CÔNG NGHỆ THÔNG TIN

Hướng dẫn tự cài đặt n8n comunity trên CyberPanel, trỏ tên miền

Mẫu prompt tạo mô tả chi tiết bối cảnh

Một số cải tiến trong ASP.NET Core, Razor Page, Model Binding, Gabbage collection

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×