CÔNG NGHỆ THÔNG TIN >> BÀI VIẾT CHỌN LỌC

Tìm hiểu ngôn ngữ T-SQL(SQL Server) phần Data Definition Language (DDL)

Đăng lúc: 10:09 AM - 15/09/2023 bởi Charles Chung - 674

Trong bài viết này tôi sẽ hướng dẫn các bạn sử dụng một số lệnh Data Definition Language (DDL) trong T-SQL để tạo, xóa, sửa cơ sơ dữ liệu, cấu trúc bảng và ràng buộc

1. Giới thiệu cấu trúc database trong SQL Server

Trong SQL Server, ở dạng vật lý thì database được cấu thành bởi 3 loại tệp tin: 

  • *.mdf là tệp tin dữ liệu chính, 1 database chỉ có duy nhất 1 tệp mdf, mặc định sinh ra khi database được tạo
  • *.log là tệp tin lưu log , 1 database có thể tạo nhiều file .log, tối thiểu phải có 1 tệp khi database được
  • *.ndf là tệp dữ liệu phụ, 1 database có thể tạo nhiều file .ndf, người dùng có thể tạo hoặc không

Ở dạng logic thì database chứa các bảng và rất nhiều các thành phần khác như view, trigger, store procedure....

2. Tạo, xóa database bằng các lệnh T-SQL

  • Cú pháp

CREATE DATABASE DATABASE_NAME

On Primary  ( Name=logical_file_name FileName='os_file_name', Size=size ,

   MaxSize=max_size],  FileGrowth=growth_increment  )

Log On Name= logical_file_name, FileName='os_file_name', Size=size,

  MaxSize=max_size,   FileGrowth= growth_increment  )

COLLATE collation_name:

[;]

  • Ví dụ

--tạo database có tên StoreManagement với các thông số mặc định

Create database StoreManagement

 

--tạo database có tên StoreManagement với các thông số chi tiết

Create database StoreManagement

on primary

(

name='StoreManagement_data',

filename='F:\StorageOnline\Database\StoreManagement.mdf',

size = 10MB,

maxsize = 50MB,

filegrowth = 10%

)

log on

(

name='StoreManagement_log',

filename='F:\StorageOnline\Database\StoreManagement.ldf',

size = 2MB,

maxsize = unlimited,

filegrowth = 10%

)

 

--gọi database StoreManagement để sử dụng--

use StoreManagement

 

--xóa StoreManagement--

drop database StoreManagement

 

3. Tạo bảng bằng các lệnh T-SQL

  • Cú pháp tạo bảng

CREATE TABLE [database_name] . [ schema_name ] table_name

( { <column_definition> | <computed_column_definition> }

 [ <table_constraint> ] [ ,...n ] ) [ ; ]

<column_definition> ::= column_name <data_type>

<data type> ::= [ type_schema_name . ] type_name

<column_constraint> ::= [ CONSTRAINT constraint_name ] {     { PRIMARY KEY | UNIQUE }]  | [ FOREIGN KEY ] REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]

[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] | CHECK ( logical_expression )

  • Ví dụ

/*

VÍ DỤ TẠO BẢNG STORE (KHO LƯU TRỮ)

StoreId: mã kho - khóa chính

StoreName: tên kho

Address:địa chỉ

Phone: điện thoại

Description: mô tả

*/

Create table Store

(

StoreId varchar(8) primary key, -- ràng buộc khóa chính

StoreName nvarchar(128) unique not null, --tạo khóa duy nhất

Address nvarchar(256) not null,

Phone nvarchar(32) unique, --tạo khóa duy nhất

Description nvarchar(512) --mặc định không chỉ ra là null

);

--Thêm dữ liệu mẫu

insert into Store values('KHO1',N'Kho 1 - Lê Thu Trang',N'Đông Lý - Lý Nhân',null,N'Kho đang đóng cửa');

-------Dòng thêm dữ liệu bên dưới sẽ báo lỗi vì giá trị 'Kho 1 - Lê Thu Trang' đã tồn tại rồi

insert into Store values('KHO2',N'Kho 1 - Lê Thu Trang',N'204 Nguyễn Công Thanh - Phủ Lý','02434547654',null);

 

---------Tạo bảng Category với thuộc tính Identity--------

Create table Category

(

CategoryId int identity(1,5) primary key,

CategoryName nvarchar(200),

OrderNo int,

ParentId int foreign key references Category(CategoryId) null,

);

---------Thêm dữ liệu cho bảng Category

insert into Category values(N'Điện thoại',1,null);

insert into Category values(N'Laptop',2,null);

insert into Category values(N'Giầy Dép',3,1);

insert into Category values(N'Quần áo',4,1);

---------Tạo bảng Brand

Create table Brand

(

BrandId int identity primary key,

BrandName nvarchar(100)

);

---------Thêm dữ liệu cho bảng Brand

insert into Brand values(N'Nhà bè');

insert into Brand values(N'May 10');

insert into Brand values(N'Quảng châu');

insert into Brand values(N'Chưa rõ nguồn gốc');

 

--Tạo bảng Product với các ràng buộc check, default, foreign key

Create table Product

(

ProductId varchar(16) primary key,

ProductName nvarchar(128),

CategoryId int foreign key references Category(CategoryId) null,

BrandId int foreign key references Brand(BrandId) null,

Picture nvarchar(512),

Price float check (Price>0),

Unit nvarchar(16) default N'Bộ',

Note nvarchar(max)

);

 

--Thêm dữ liệu cho bảng 

insert into Product values('AN001',N'Áo sơ mi',4,2,'',120000,N'Cái',N'');

insert into Product values('BN002',N'Bộ đồ công sở trắng',4,2,'',140000,N'Bộ',N'');

insert into Product values('BN003',N'Bộ đồ công sở kẻ caro',4,2,'',80000,N'Bộ',N'');

 

insert into Product values('DN334',N'Đầm Bbd Thuỷ Thủ 334',4,3,'',160000,N'Chiếc',N'');

insert into Product values('DN332',N'Đầm Bbd Thuỷ Thủ 332',4,3,'',180000,N'Chiếc',N'');

insert into Product values('QJ119',N'Quần Jean Dài Nữ 13 ( 119)',4,3,'',180000,N'Chiếc',N'');

insert into Product values('AC331',N'Set Caro 331',4,3,'',190000,N'Chiếc',N'');

insert into Product values('QL54',N'Quần Legging Asos Nâng Mông Đen 54',4,3,'',120000,N'Chiếc',N'');

insert into Product values('QD296',N'Quần Dài Đen + Áo Voan 296',4,3,'',145000,N'Chiếc',N'');

insert into Product values('SM449',N'Sơ Mi Chấm Bi Khoét Vai 449',4,3,'',85000,N'Chiếc',N'');

 

insert into Product values('VN009',N'Ví nữ dài họa tiết gấu da mềm đẹp 009',6,3,'',65000,N'Chiếc',N'');

insert into Product values('VN001',N'Ví forever young đa di năng',6,3,'',65000,N'Chiếc',N'');

insert into Product values('TV103',N'Ví Nữ Mini Da Thật Nhiều Ngăn TV103',6,3,'',500000,N'Chiếc',N'');

insert into Product values('VN209',N'Ví Nữ Ngắn Da Bò Thật Cao Cấp Sáp Dầu Bóng Đẹp Có Dây Kéo Khóa An Toàn Nhỏ Gọn Sang Trọng Thương Hiệu Chính Hãng Banyanu',6,3,'',185000,N'Chiếc',N'');

 

--------------Tạo bảng với khóa chính gộp từ nhiều cột và có đặt tên

Create table StoreProduct

(

StoreId varchar(8) foreign key references Store(StoreId),

ProductId varchar(16) foreign key references Product(ProductId),

Quantity float,

Note nvarchar(512),

constraint pk_storeid_productid primary key(StoreId,ProductId)

);

--------Thêm dữ liệu

insert into StoreProduct values('KHO1','P0001',10,N'Sẵn hàng');

insert into StoreProduct values('KHO1','QD296',4,N'Sẵn hàng');

insert into StoreProduct values('KHO1','QJ119',10,N'Sẵn hàng');

insert into StoreProduct values('KHO1','SM449',4,N'Sẵn hàng');

insert into StoreProduct values('KHO1','TV103',2,N'Sẵn hàng');

insert into StoreProduct values('KHO2','VN209',30,N'Sẵn hàng');

insert into StoreProduct values('KHO2','AC331',1,N'Sẵn hàng');

----Dòng bên dưới báo lỗi vì cặp dữ liệu KHO1 và QD296 đã tồn tại----

insert into StoreProduct values('KHO1','QD296',2,N'Sẵn hàng');

--Tạo bảng lịch sử nhập xuất với các ràng buộc foreign key, check, default

Create table HistoryProduct

(

HistoryId int identity primary key,

StoreId varchar(8) foreign key references Store(StoreId),

ProductId varchar(16) foreign key references Product(ProductId),

Quantity float check(Quantity>0),

Price float check(Price>=0),

CreateDate date default getdate(),

HistoryType bit,

Note nvarchar(200)

);

--Thêm dữ liệu cho bảng HistoryProduct

insert into HistoryProduct values('KHO1','SM449',10,1200,getdate(),1,N'Nhập trực tiếp từ hãng');

insert into HistoryProduct values('KHO1','TV103',4,1400,getdate(),1,N'Nhập thông qua trung gian');

insert into HistoryProduct values('KHO1','VN209',2,800,getdate(),1,'');

insert into HistoryProduct values('KHO2','AC331',30,1200,getdate(),1,'');

insert into HistoryProduct values('KHO2','P0001',1,1400,getdate(),1,'');

 

4. Chỉnh sửa bảng bằng các lệnh T-SQL

  • Cú pháp đơn giản

ALTER TABLE TABLE_NAME

Add Column <column_name> <data_type>

ALTER TABLE TABLE_NAME

Alter Column <column_name> <data_type_new>

ALTER TABLE TABLE_NAME

Drop Column <column_name>

ALTER TABLE TABLE_NAME

Add constraint <constraint_name> primary key | foreign key | default | check

ALTER TABLE TABLE_NAME

Drop constraint <constraint_name>

  • Ví dụ

--Thêm ràng buộc unique cho bảng category

Alter table Category

Add constraint uq_category_categoryname unique(CategoryName)

 

--Xóa ràng buộc unique trong bảng category

Alter table Category

drop constraint uq_category_categoryname

 

---Thêm cột CustomerName vào bảng HistoryProduct

Alter table HistoryProduct

Add CustomerName nvarchar(200)

 

---Sửa cột Note trong bảng HistoryProduct

Alter table HistoryProduct

Alter column Note nvarchar(500)

 

---Xóa cột CustomerName trong bảng HistoryProduct

Alter table HistoryProduct

Drop column CustomerName

5. Xóa bảng bằng các lệnh T-SQL

  • Cú pháp

DROP TABLE TABLE_NAME

  • Ví dụ

--Xóa bảng HistoryProduct

Drop table HistoryProduct

 

KẾT QUẢ SAU KHI TẠO XONG DATABASE VÀ CÁC BẢNG

thay lời cảm ơn!

QUẢNG CÁO - TIẾP THỊ