Table (bảng) trong SQL Server
- 21-05-2022
- Toanngo92
- 0 Comments
Table trong SQL Server chứa dữa liệu được sắp xếp theo dạng hàng và cột. Mỗi cột có thể chứa dữ liệu với kiểu dữ liệu và kích thước nhất định
Mục lục
Các data type nâng cao
Ngoài các kiểu dữ liệu cơ bản như int,float nvarchar… SQL Server cũng hỗ trợ một vài kiểu dữ liệu nâng cao như sau:
Tên | Mô tả |
hiearachyid | Là một kiểu dữ liệu hệ thống với độ dài biến thiên, sử dụng để biểu diễn vị trí của phân cấp (phân tầng) |
geometry | Là một dạng dữ liệu không gian kiểu hình học, được sử dụng để biểu diễn đối tượng trên hệ tọa độ phẳng |
geograpghy | Là một dạng dữ liệu không gian kiểu địa lý, mô phỏng tọa độ latitude và longtitude ( hay gọi là latlong). SQL Server hỗ trợ một tập hợp các phương thức để làm việc với kiểu dữ liệu geography. |
xml | Kiểu đữ liệu lưu được dữ liệu dạng XML ( bao gồm các thẻ và text nodes, có phân tầng) |
cursor | Là kiểu dữ liệu sử dụng cho biến hoặc stored procedure output, chứa một tham chiếu tới một con trỏ |
table | Là kiểu dữ liệu đặc biệt hữu dụng cho việc lưu trữ một bảng giá trị tạm. Có thể sử dụng dữ liệu này để xử lý về sau, nó có thể sử dụng trong functions, stored procedures, batches |
rowversion | Kiểu dữ liệu này được tự động tạo, tạo ra một số nhị phân duy nhất bên trong dataabase |
Khởi tạo, chỉnh sửa, xóa bảng
Tạo bảng (Create table)
Cú pháp tạo bảng:
-- Simple CREATE TABLE Syntax (common if not using options)
CREATE TABLE
{ database_name.schema_name.table_name | schema_name.table_name | table_name }
( { <column_definition> } [ ,...n ] )
[ ; ]
Giải thích:
- database_name: tên database muốn tạo table
- table_name: tên của bảng muốn tạo, tối đa 128 ký tự
- column_name: tên của cột trong bảng. Tối đa 128 ký tự. Lưu ý: column name không cần đặt tên khi kiểu dữ liệu của column là timestamp. Column name mặc định của cột có kiểu dữ liệu timestamp là ‘timestamp’.
- data_type: xác định data type (kiểu dữ liệu) cho column
Ví dụ:
USE AdventureWorks2019
CREATE TABLE dbo.CustomerInfo(
CustomerID int NOT NULL,
CustomerName nvarchar (40) NOT NULL
)
GO
Cú pháp ngắn gọn:
USE AdventureWorks2019
CREATE TABLE CusInfo(
CusID int identity NOT NULL,
CusName varchar(40) NOT NULL
)
Lưu ý, nếu mặc định khởi tạo, không định nghĩa lược đồ (schema), SQL Server sẽ ngầm hiểu schema là dbo.
Chỉnh sửa bảng (alter table)
Cú pháp:
Docs: https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-table-transact-sql?view=sql-server-ver15
ALTER TABLE [[dabase_name.[schema_name].|schema_name.]table_name
ALTER COLUMN ([<column_name>] [data_type] NULL/ NOT NULL);
| ADD ([<column_name>] [data_type] NULL/NOT NULL);
| DROP COLUMN ([<column_name>]);
Giải thích:
- ALTER TABLE: sửa bảng
- MODIFY COLUMN: xác định cột sẽ được sửa
- ADD: Thêm một hoặc nhiều cột vào bảng
- DROP COLUMN (<column_name>): xác định tên cột có tên là <column_name> sẽ được xóa khỏi bảng
Ví dụ câu lệnh thêm cột:
ALTER TABLE [dbo].[CustomerInfo]
ADD [ContactNumber] [numberic](12,0) NOT NULL;
Ví dụ câu lệnh sửa cột:
ALTER TABLE [dbo].[CustomerInfo]
ALTER COLUMN [CustomerID] numberic[12,0] NOTNULL
Ví dụ câu lệnh xóa cột:
ALTER TABLE [dbo].[CustomerInfo]
DROP COLUMN [ContactNumber];
Lưu ý: trước khi xóa cột, cần đảm bảo rằng các cột không có ràng buộc gì và có thể xóa. Trong một số ràng buộc, cột không thể được xóa, ví dụ: nếu cột sử dụng các ràng buộc CHECK,FOREIGN KEY, UNIQUE, PRIMARY KEY, hay cột được xác định giá trị mặc định (DEFAULT) ( sẽ được đề cập ở phần sau).
Xóa bảng (Drop table)
Câu lệnh DROP TABLE sẽ xóa toàn bộ định nghĩa bảng, dữ liệu bên trong nó, tất cả các đối tượng liên kết với bảng như indexes, triggers, contrainst, permission specifications cho bảng.
Cú pháp:
DROP TABLE <table_name>
Ví dụ xóa bảng:
DROP TABLE dbo.CustomerInfo
Các câu lệnh sửa đổi dữ liệu
Để sửa đổi dữ liệu trong bảng, có các câu lệnh INSERT,UPDATE, DELETE thực hiện công việc này.
Xem bài viết về INSERT trong SQL Server: https://hocvietcode.com/lenh-insert-trong-sql-server/
Xem bài viết về UPDATE trong SQL Server: https://hocvietcode.com/lenh-update-trong-sql-server/
Xem bài viết về DELETE trong SQL Server: https://hocvietcode.com/lenh-delete-trong-sql-server/
DEFAULT Definition
Xét một tình huống trong đó thông tin chi tiết về sản phẩm phải được lưu trữ trong bảng SQL Server 2019, nhưng tất cả các giá trị cho chi tiết sản phẩm có thể không được biết ngay cả tại thời điểm chèn dữ liệu. Tuy nhiên, theo quy tắc nhất quán và toàn vẹn dữ liệu, các cột trong bản ghi thường phải chứa một giá trị. Việc lưu trữ các giá trị null vào các cột như vậy mà giá trị chính xác của dữ liệu không được biết có thể xảy ra một số vấn đề không được như mong muốn.
Trong những trường hợp như vậy, một định nghĩa DEFAULT có thể được cung cấp cho cột để gán nó làm giá trị mặc định nếu không có giá trị nào được đưa ra tại thời điểm tạo. Ví dụ: thường chỉ định số 0 làm mặc định cho cột số.
Định nghĩa DEFAULT cho một cột có thể được tạo tại thời điểm tạo bảng hoặc được thêm ở giai đoạn sau vào bảng hiện thời. Khi định nghĩa DEFAULT được thêm vào cột hiện có trong bảng, SQL Server chỉ áp dụng các giá trị mặc định mới cho những hàng dữ liệu mới được thêm vào bảng.
Ví dụ, câu lệnh CREATE TABLE sử dụng từ khóa DEFAULT để định nghĩa giá trị default cho cột Price
CREATE TABLE StoreProduct (ProductID int NOT NULL, Name varchar(40) NOT NULL, Price money NOT NULL DEFAULT(100))
Khi row được thêm vào bằng dòng lệnh phía dưới, cột Price sẽ có giá trị mặc định là 100 trong trường hợp không nhập giá trị.
INSERT INTO dbo.StoreProduct (ProductID,Name) VALUES (111,'Laptop Dell 5450')
SELECT * FROM dbo.StoreProduct
GO
Một số dạng cột không thể định nghĩa DEFAULT definitions:
- A timestamp data type
- Cột có thuộc tính IDENTITY hoặc ROWGUIDCOL
IDENTITY Property (thuộc tính IDENTITY)
Thuộc tính IDENTITY của SQL Server được sử dụng để tạo các cột định danh có thể chứa các giá trị tuần tự được tạo tự động để xác định duy nhất từng hàng trong bảng. Ví dụ, một cột định danh có thể được tạo để tự động tạo các số đăng ký sinh viên duy nhất bất cứ khi nào các hàng mới được chèn vào bảng Sinh viên. Số nhận dạng cho hàng đầu tiên được chèn vào bảng được gọi là giá trị hạt giống (seed). Phần gia tăng (increment), còn được gọi là thuộc tính Gia tăng danh tính, được cộng thêm vào hạt giống (seed) để tạo thêm giá trị nhận dạng được SQL Server tự động tạo bằng cách thêm phần gia tăng vào hạt giống. Một cột nhận dạng thường được sử dụng cho các giá trị khóa chính.
Các cột sử dụng thuộc tính IDENTITY phải là cột mang dữ liệu số nguyên:
- decimal
- int
- numeric
- smallint
- bigint
- tinyint
Cột có thuộc tính IDENTITY không cần thiết phải cso gái trị SEED (hạt giống) và xác định giá trị gia tăng (increment), nếu không xác định thì mặc định giá trị SEED và INCREMENT đều bằng 1.
Cú pháp:
CREATE TABLE <table_name> (column_name data_type IDENTITY(seed_value,increment_value) NOT NULL)
Giải thích:
- seed_value: giá trị seed bắt đầu khởi tạo giá trị cho identity
- increment_value: giá trị tăng lên sau mỗi lần cơ sở dữ liệu có bản ghi mới
Ví dụ:
CREATE TABLE HRContactPhone (Person_ID int IDENTITY(500,1) NOT NULL, MobileNumber bigint NOT NULL)
Khi insert dữ liệu vào bảng và select ra:
INSERT INTO HRContactPhone(MobileNumber) VALUES (0911222334)
INSERT INTO HRContactPhone(MobileNumber) VALUES (0934333123)
SELECT * FROM HRContactPhone
GO
Globally Unique Identifier (định danh duy nhất toàn cục)
Ngoài thuộc tính identity, SQL Server cũng hỗ trợ các số nhận dạng duy nhất trên toàn cầu. Thông thường, trong môi trường được nối mạng, nhiều bảng có thể yêu cầu phải có một cột bao gồm một giá trị duy nhất chung trên toàn cầu. Hãy xem xét một tình huống trong đó dữ liệu từ nhiều hệ thống cơ sở dữ liệu như cơ sở dữ liệu ngân hàng phải được hợp nhất tại một vị trí duy nhất. Khi dữ liệu từ khắp nơi trên thế giới được đối chiếu tại cơ quan trung tâm để tổng hợp và báo cáo, việc sử dụng các giá trị duy nhất trên toàn cầu sẽ ngăn khách hàng ở các quốc gia khác nhau có cùng số tài khoản ngân hàng hoặc ID khách hàng. Để giải quyết vấn đề này, máy chủ SQL cung cấp các cột định danh duy nhất trên toàn cầu. Chúng có thể được tạo cho mỗi bảng chứa các giá trị duy nhất trên tất cả các máy tính trong mạng. Chỉ trên cột định danh và một cột định danh duy nhất trên toàn cầu mới có thể được tạo cho mỗi bảng. Để tạo và làm việc với các số nhận dạng duy nhất trên toàn cầu, sự kết hợp của ROWGUIDCOL, uniqueidentifier và các hàm NEWID() được sử dụng để tạo ra định danh.
Ví dụ:
CREATE TABLE Emp_CellularPhone(Person_ID uniqueidentifier DEFAULT NEWID() NOT NULL, PersonName varchar(60) NOT NULL)
Sau đó, đưa dữ liệu vào bảng:
INSERT INTO Emp_CellularPhone(PersonName) VALUES ('William Smith')
SELECT * FROM Emp_CellularPhone
GO