Tạo khóa chính trong SQL Server | How Kteam

Dẫn nhập

Trong những bài trước, chúng ta đã học cách
KHỞI TẠO, XÓA, SỬA TABLE, cũng như cách
THÊM, XÓA, CẬP NHẬP DỮ LIỆU. Tuy nhiên, việc quản lý một Table không dừng lại ở đó, trong bài này Kteam sẽ giới thiệu đến bạn một yếu tố rất quan trọng của Table là
KHÓA CHÍNH!

Chúng ta hãy cùng khám phá khóa chính là gì ? Và tại sao cần có khóa chính nhé !

Nội dung chính

Để theo dõi tốt nhất bài này, bạn nên xem qua bài:

Trong bài này, tất cả chúng ta sẽ cùng nhau khám phá 1 số ít yếu tố sau :

  • Khóa chính là gì? Tại sao phải sử dụng khóa chính
  • Thao tác với khóa chính bằng giao diện.
  • Thao tác với khóa chính bằng code.

Database mẫu

Để thao tác tốt với bài này chúng ta sử dụng database TRƯỜNG HỌC
sau. Hoặc bạn có thể tự khởi tạo Database và các Table tương tự để nhớ bài tốt hơn.

--khởi tạo database TRUONGHOC
CREATE DATABASE TRUONGHOC
GO
-- Sử dụng database
USE TRUONGHOC
GO 
-- Tạo bảng HOCSINH
CREATE TABLE HOCSINH
(
	MAHS CHAR(5),
	TEN NVARCHAR(30),
	NAM BIT, -- Column giới tính Nam: 1 - đúng, 0 - sai
	NGAYSINH DATETIME,
	DIACHI VARCHAR(20),
	DIEMTB FLOAT,
)
GO
-- Tạo bảng GIAOVIEN
CREATE TABLE GIAOVIEN
(
	MAGV CHAR(5),
	TEN NVARCHAR(30),
	Nam BIT, -- Column giới tính Nam: 1 - đúng, 0 - sai
	NGAYSINH DATETIME,
	DIACHI VARCHAR(20),
	LUONG MONEY
)
GO
-- Tạo bảng LOPHOC
CREATE TABLE LOPHOC
(
	MALOP CHAR(5),
	TENLOP NVARCHAR(30),
	SOLUONG INT
)
GO

Khóa chính là gì? Tại sao phải tạo khóa chính?

Như chúng ta đã tìm hiểu trong bài
KHỞI TẠO, XÓA, SỬA TABLE, bạn có thể thấy chúng ta hoàn toàn có thể tạo một Table không có yếu tố gọi là
KHÓA CHÍNH.

Tuy nhiên, sẽ gặp yếu tố là hoàn toàn có thể sống sót hai hoặc nhiều Record chứa tài liệu giống nhau ở toàn bộ những trường thuộc tính > trùng lặp tài liệu > không xác lập được một đối tượng người tiêu dùng có sống sót hay chưa, có là duy nhất trong một Table không .

Vậy ta thấy rõ cần tồn tại một/ một nhóm trường thuộc tính định danh cho Table gọi là
KHÓA CHÍNH (primary key):

  • Chứa các giá trị không rỗng (NULL)
  • Chỉ tồn tại dữ liệu duy nhất, không trùng lặp.

Ngoài ra, trải qua khóa chính của Table, mà những Table khác hoàn toàn có thể tham chiếu tới bằng Khóa ngoại ( sẽ được ra mắt cụ thể trong bài KHÓA NGOẠI TRONG SQL )

Thao tác với khóa chính bằng giao diện Table

Tạo khóa chính từ Table có sẵn/Table mới

Thao tác phần này dựa trên Database TRUONGHOC ở đầu bài

Bước 1: Mở Table cần tạo khóa ở giao diện thiết kế > nhấp chuột phải >
Design

Kteam, howkteam, free education, sql server, primary key, table, constraint sql, delete primary key,

Bước 2: Nhập
chuột phải vào mũi tên hiện hành trước column chỉ định làm khóa chính >
Set Primary key

Kteam, howkteam, free education, sql server, primary key, table, constraint sql, delete primary key,

Để chọn nhiều hơn một column cùng định danh cho Table bạn giữ phím Ctrl > chọn những column làm khóa chính > chuột phải > Set Primary key .

Kteam, howkteam, free education, sql server, primary key, table, constraint sql, delete primary key,

Kết quả: Sau khi tạo khóa chính thành công. Phía trước Column định danh có
biểu tượng chìa khóa. Ở cột
Allow Nulls tương ứng không có dấu tick > không cho nhận giá trị NULL ở khóa chính.

Kteam, howkteam, free education, sql server, primary key, table, constraint sql, delete primary key,

  • Nếu bạn cố tình chọn để giá trị NULL, SQL Manager sẽ hiện thông báo lỗi như trên.

Lưu ý:

  • Khi Table đã tồn tại khóa chính, việc tạo một khóa chính mới đồng nghĩa với ngầm gỡ khóa chính cũ đã có > đưa column về trạng thái bình thường. 
  • Một Table chỉ tồn tại duy nhất một khóa chính, mỗi khóa chính có thể được xác định từ một hay nhiều Column trong Table.

Xóa khóa chính trong giao diện Table

Để xóa một khóa chính đã tạo, bạn chọn chuột phải vào hình tượng khóa chính trước column cần xóa > Remove Primary key

Kteam, howkteam, free education, sql server, primary key, table, constraint sql, delete primary key,

Sau khi xóa khóa chính, column trở về trạng thái thông thường, hình tượng khóa chính biến mất. Ở cột Allow Nulls vẫn không có dấu tick .

  • Tick vào ô trống tương ứng để column nhận giá trị NULL nếu muốn.

Kteam, howkteam, free education, sql server, primary key, table, constraint sql, delete primary key,

Tạo khóa chính bằng code

Các ràng buộc (constraint) thường dùng trong SQL

Để bảo vệ tính đúng mực và đáng đáng tin cậy của tài liệu khi nhập vào Table, người ta cần có những quy tắc cho tài liệu đó. Trong SQL gọi những quy tắc này là những ràng buộc toàn vẹn, hoàn toàn có thể đi kèm Table hoặc column, và tùy theo mức độ của ràng buộc mà pháp luật số lượng giới hạn tài liệu cho toàn Table hay chỉ ở column xác lập .
Sau đây là 1 số ít ràng buộc thường gặp trong SQL :

Kteam, howkteam, free education, sql server, primary key, table, constraint sql, delete primary key,

Lưu ý:

Cặp ràng buộc UNIQUE
DEFAULT không thể đi kèm với nhau.

Ví dụ 1:

CREATE TABLE TestPrimaryKey1
(
	ID INT UNIQUE NOT NULL,
	Name NVARCHAR(100) DEFAULT 'HowKteam.com'
)
GO

INSERT dbo.TestPrimaryKey1 (ID)
VALUES  ( 0)
GO
INSERT dbo.TestPrimaryKey1 (ID)
VALUES  ( 1)
GO
INSERT dbo.TestPrimaryKey1 (ID)
VALUES  ( 2)
GO

Kteam, howkteam, free education, sql server, primary key, table, constraint sql, delete primary key,

Ví dụ 2:

CREATE TABLE TestPrimaryKey2
(
	ID INT UNIQUE NOT NULL IDENTITY(1,1),
	Name NVARCHAR(100) CHECK (Name <> 'howkteam')
)
GO
INSERT dbo.TestPrimaryKey2( Name )
VALUES  ( 
			N'KIM LONG'  -- Name - nvarchar(100)
          )
GO
INSERT dbo.TestPrimaryKey2( Name )
VALUES  ( 
			N'NGOC GIAU'  -- Name - nvarchar(100)
          )
GO
INSERT dbo.TestPrimaryKey2( Name )
VALUES  ( 
			N'VI THANH'  -- Name - nvarchar(100)
          )
GO

INSERT dbo.TestPrimaryKey2( Name )
VALUES  ( 
			N'HOWKTEAM'  -- Name - nvarchar(100)
          )
GO

Kteam, howkteam, free education, sql server, primary key, table, constraint sql, delete primary key,

Kteam khuyến khích những bạn thực hành thực tế những thao tác trong hai ví dụ trên để nhận ra tác dụng và hiểu bài một cách tốt nhất .

Tạo khóa chính trong lúc khởi tạo Table

Tạo khóa chính trong quá trình khai báo column

CREATE
TABLE

(

           1

>
PRIMARY
KEY,

            2

>
,

   n

>

)

Ví dụ:

CREATE TABLE HOCSINH
(
	MAHS CHAR(5) PRIMARY KEY,
	TEN NVARCHAR(30),
	NAM BIT, -- Column giới tính Nam: 1 - đúng, 0 - sai
	NGAYSINH DATETIME,
	DIACHI VARCHAR(20),
	DIEMTB FLOAT
)
GO

Tạo khóa chính sau khi khai báo tất cả column

CREATE
TABLE

(

            1

>
,

            2

>
,

            n

>

            PRIMARY
KEY (columnKey1, columnKey2…, columnKeyn)

)

Ví dụ:

CREATE TABLE GIAOVIEN
(
	TEN NVARCHAR(30) NOT NULL,
	Nam BIT, -- Column giới tính Nam: 1 - đúng, 0 - sai
	NGAYSINH DATETIME NOT NULL,
	DIACHI VARCHAR(20),
	LUONG MONEY,
	PRIMARY KEY (TEN, NGAYSINH)
	)
GO

Kết quả: Khóa chính được thiết lập ở hai ví dụ trên

Kteam, howkteam, free education, sql server, primary key, table, constraint sql, delete primary key,

Tạo khóa chính cho Table sẵn có

Khóa chính có một column

ALTER
TABLE ADD
PRIMARY KEY(column)

Khóa chính có nhiều column

ALTER
TABLE ADD
PRIMARY KEY(column1,column2,…columnn)

Lưu ý:

  • Khuyến khích tạo khóa chính trước khi bạn nhập dữ liệu cho Table.
  • Khi thiết lập khóa chính cho một hoặc nhiều column đã tồn tại sẵn, cần đảm bảo tất cả column có ràng buộc không rỗng (NOT NULL) và không đồng thời trùng lặp dữ liệu (UNIQUE) ở tất cả các column tạo thành khóa chính.

Ví dụ:

CREATE TABLE DETAI
	(
		MADT NCHAR(4) NOT NULL UNIQUE,
		TENDT NVARCHAR(50),
		CAPQL NCHAR(20),
		KINHPHI FLOAT,
		NGAYBD DATE,
		NGAYKT DATE,
		MACD NCHAR(4),
		GVCNDT NCHAR(3),
	)
GO

-- thêm khóa chính vào bảng 
ALTER TABLE dbo.DETAI ADD PRIMARY KEY(MADT)
GO

Đặt tên cho khóa chính với CONSTRAINT

Để việc quản trị khóa chính được thuận tiện hơn và có mạng lưới hệ thống hơn trong quy trình thao tác thêm, xóa, sửa tài liệu của khóa chính. Chúng ta sử dụng từ khóa CONSTRAINT để đặt tên cho khóa chính .

Nguyên tắc đặt tên cho khóa chính: PK_

Cú pháp:

CONSTRAINT PK_
PRIMARY KEY (ColumnKey1, ColumnKey2,…, ColumnKeyn)

Lưu ý:

Khai báo những column sống sót trong Table trước khi khai báo khóa chính có đặt tên .

Ví dụ 1: Thiết lập khóa chính có đặt tên ngay trong quá trình khởi tạo Table

CREATE TABLE LOPHOC
(
	MALOP CHAR(5) NOT NULL UNIQUE,
	TENLOP NVARCHAR(30),
	SOLUONG INT,
	CONSTRAINT PK_LOPHOC PRIMARY KEY (MALOP)
)
GO

Ví dụ 2: Thêm khóa chính có đặt tên cho Table sẵn có

CREATE TABLE DIEM
(
	MAHS INT NOT NULL,
	MALOP CHAR NOT NULL,
	DIEMTB FLOAT CHECK(DIEMTB <=10 AND DIEMTB >=0)
	)
GO
	ALTER TABLE dbo.DIEM ADD CONSTRAINT PK_DIEM PRIMARY KEY(MAHS,MALOP)

Xóa khóa chính có đặt tên

Cú pháp:

ALTER TABLE
DROP CONSTRAINT

Ví dụ:

ALTER TABLE dbo.DIEM DROP CONSTRAINT PK_DIEM
GO 

Kết

Trong bài này, tất cả chúng ta đã biết cách KHỞI TẠO KHÓA CHÍNH trong SQL Server .
Bài sau tất cả chúng ta sẽ khởi đầu khám phá về cách KHỞI TẠO KHÓA NGOẠI TRONG SQL .

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của bạn để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó” 

Tải xuống

Project

Nếu việc thực hành theo hướng dẫn không diễn ra suôn sẻ như mong muốn. Bạn cũng có thể tải xuống PROJECT THAM KHẢO ở link bên dưới!

Thảo luận

Nếu bạn có bất kể khó khăn vất vả hay vướng mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI và ĐÁP trên thư viện Howkteam. com để nhận được sự tương hỗ từ hội đồng .