Cơ sở dữ liệu SQL
1. Tạo CSDL (Câu lệnh CREATE DATABASE).........................................................2
2. Câu lệnh SQL DROP DATABASE..........................................................................2
3. Câu lệnh BACKUP DATABASE cho SQL Server...................................................2
4. Câu lệnh CREATE TABLE......................................................................................3
5. Câu lệnh SQL: DROP TABLE.................................................................................5
6. Câu lệnh ALTER TABLE.........................................................................................5
7. Các ràng buộc trong SQL.........................................................................................8
8. Ràng buộc NOT NULL............................................................................................9
9. Ràng buộc UNIQUE trong SQL............................................................................10
10. Ràng buộc chính: PRIMARY KEY........................................................................11
11. Ràng buộc FOREIGN KEY...................................................................................13
12. Ràng buộc CHECK................................................................................................16
13. Ràng buộc SQL: DEFAULT..................................................................................18
14. Câu lệnh SQL: CREATE INDEX..........................................................................20
15. Trường SQL AUTO INCREMENT.......................................................................21
16. Câu lệnh với DATE................................................................................................24
17. SQL Views.............................................................................................................26
18. SQL INJECTION...................................................................................................28
1
Cơ sở dữ liệu SQL
1. Tạo CSDL (Câu lệnh CREATE DATABASE)
Câu CREATE DATABASElệnh được sử dụng để tạo cơ sở dữ liệu SQL mới.
Cú pháp:
CREATE DATABASE databasename;
o Ví dụ: về tạo cơ sở dữ liệu
CREATE DATABASE testDB;
Mẹo: Đảm bảo bạn có đặc quyền quản trị viên trước khi tạo bất kỳ cơ sở dữ liệu nào. Sau
khi cơ sở dữ liệu được tạo, bạn có thể kiểm tra nó trong danh sách cơ sở dữ liệu bằng
lệnh SQL sau SHOW DATABASES
2. Câu lệnh SQL DROP DATABASE
Câu DROP DATABASElệnh được sử dụng để loại bỏ cơ sở dữ liệu SQL hiện có.
Cú pháp:
DROP DATABASE databasename;
Lưu ý: Hãy cẩn thận trước khi đánh rơi cơ sở dữ liệu. Xóa cơ sở dữ liệu sẽ làm mất
thông tin đầy đủ được lưu trữ trong cơ sở dữ liệu!
o Ví dụ về DROP DATABASE
DROP DATABASE testDB;
Mẹo: Đảm bảo rằng bạn có đặc quyền quản trị viên trước khi bỏ bất kỳ cơ sở dữ liệu
nào. Sau khi cơ sở dữ liệu bị loại bỏ, bạn có thể kiểm tra nó trong danh sách cơ sở dữ liệu
bằng lệnh SQL sau SHOW DATABASES:;
3. Câu lệnh BACKUP DATABASE cho SQL Server
Câu lệnh BACKUP DATABASE được sử dụng trong SQL Server để tạo bản sao lưu
đầy đủ của cơ sở dữ liệu SQL hiện có.
Câu lệnh BACKUP DATABASE với DIFFERENTIAL
Một sao lưu khác biệt chỉ sao lưu các phần của cơ sở dữ liệu đã thay đổi kể từ lần sao
lưu cơ sở dữ liệu đầy đủ cuối cùng.
2
Cú pháp:
BACKUP DATABASE databasename
TO DISK = 'filepath'
WITH DIFFERENTIAL;
o Ví dụ về BACKUP DATABASE
Câu lệnh SQL sau tạo một bản sao lưu đầy đủ của cơ sở dữ liệu hiện có "testDB" vào
đĩa D:
BACKUP DATABASE testDB
TO DISK = 'D:\backups\testDB.bak';
Mẹo: Luôn sao lưu cơ sở dữ liệu vào ổ đĩa khác với cơ sở dữ liệu thực. Sau đó, nếu bạn
gặp sự cố đĩa, bạn sẽ không bị mất tệp sao lưu cùng với cơ sở dữ liệu.
o Ví dụ về BACKUP DATABASE và DIFFERENTIAL
Câu lệnh SQL sau tạo một bản sao lưu khác biệt của cơ sở dữ liệu "testDB":
BACKUP DATABASE testDB
TO DISK = 'D:\backups\testDB.bak'
WITH DIFFERENTIAL;
Mẹo: Sao lưu chênh lệch làm giảm thời gian sao lưu (vì chỉ những thay đổi mới được sao
lưu).
4. Câu lệnh CREATE TABLE
Câu CREATE TABLE lệnh được sử dụng để tạo một bảng mới trong cơ sở dữ liệu.
Cú pháp:
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
....
);
Các tham số cột chỉ định tên của các cột trong bảng.
Tham số kiểu dữ liệu chỉ định kiểu dữ liệu mà cột có thể giữ (ví dụ: varchar, số ngun,
ngày tháng, v.v.).
Mẹo: Để có cái nhìn tổng quan về các kiểu dữ liệu có sẵn, hãy chuyển đến phần Tham
khảo đầy đủ về kiểu dữ liệu của chúng tôi .
3
o Ví dụ về SQL CREATE TABLE
o Ví dụ sau tạo một bảng có tên "Người" chứa năm cột: PersonID, LastName,
FirstName, Address và City:
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
Cột PersonID có kiểu int và sẽ chứa một số nguyên.
Các cột LastName, FirstName, Address và City thuộc loại varchar và sẽ chứa các ký tự
và độ dài tối đa cho các trường này là 255 ký tự.
Bảng " Persons" trống bây giờ sẽ trông như thế này:
Mẹo: Bảng " Persons" trống hiện có thể được lấp đầy bằng dữ liệu bằng câu lệnh
SQL INSERT INTO .
Tạo bảng bằng bảng khác
Bản sao của một bảng hiện có cũng có thể được tạo bằng cách sử dụng CREATE TABLE.
Bảng mới có các định nghĩa cột giống nhau. Tất cả các cột hoặc các cột cụ thể có thể
được chọn.
Nếu bạn tạo một bảng mới bằng cách sử dụng bảng hiện có, bảng mới sẽ được lấp đầy
bởi các giá trị hiện có từ bảng cũ.
Cú pháp:
CREATE TABLE new_table_name AS
SELECT column1, column2,...
FROM existing_table_name
WHERE ....;
4
SQL sau tạo một bảng mới có tên "TestTables" (là bản sao của bảng "Khách hàng"):
o Ví dụ:
CREATE TABLE TestTable AS
SELECT customername, contactname
FROM customers;
5. Câu lệnh SQL: DROP TABLE
Câu lệnh DROP TABLE được sử dụng để loại bỏ một bảng hiện có trong cơ sở dữ liệu.
Cú pháp:
DROP TABLE table_name;
Lưu ý : Hãy cẩn thận trước khi xóa bàng. Xóa bảng sẽ làm mất thông tin đầy đủ được
lưu trữ trong bảng!
o Ví dụ về SQL DROP TABLE
Câu lệnh SQL sau loại bỏ bảng hiện có " Shippers":
DROP TABLE Shippers;
BẢNG TRUNCATE SQL
Câu lệnh TRUNCATE TABLE được sử dụng để xóa dữ liệu bên trong bảng, nhưng
khơng xóa chính bảng đó.
Cú pháp:
TRUNCATE TABLE table_name;
6. Câu lệnh ALTER TABLE
Câu ALTER TABLElệnh được sử dụng để thêm, xóa hoặc sửa đổi các cột trong
bảng hiện có.
Câu ALTER TABLElệnh cũng được sử dụng để thêm và bỏ các ràng buộc khác
nhau trên một bảng hiện có.
ALTER TABLE - THÊM cột
Để thêm một cột trong bảng, hãy sử dụng cú pháp sau:
ALTER TABLE table_name
ADD column_name datatype;
SQL sau thêm cột "Email" vào bảng "Khách hàng":
5
ALTER TABLE Customers
ADD Email varchar(255);
ALTER TABLE - DROP COLUMN
Để xóa một cột trong bảng, hãy sử dụng cú pháp sau (lưu ý rằng một số hệ thống cơ sở
dữ liệu khơng cho phép xóa một cột):
ALTER TABLE table_name
DROP COLUMN column_name;
SQL sau xóa cột "Email" khỏi bảng "Khách hàng":
o Ví dụ
ALTER TABLE Customers
DROP COLUMN Email;
ALTER TABLE - ALTER / MODIFY COLUMN
Để thay đổi kiểu dữ liệu của một cột trong bảng, hãy sử dụng cú pháp sau:
SQL Server / MS Access:
ALTER TABLE table_name
ALTER COLUMN column_name datatype;
SQL / Oracle của tôi (phiên bản trước 10G):
ALTER TABLE table_name
MODIFY COLUMN column_name datatype;
Oracle 10G trở lên:
ALTER TABLE table_name
MODIFY column_name datatype;
o Ví dụ về ALTER TABLE -SQL
Nhìn vào bảng " Persons ":
6
Bây giờ chúng ta muốn thêm một cột có tên "DateOfBirth" trong bảng " Persons".
Chúng tôi sử dụng câu lệnh SQL sau:
ALTER TABLE Persons
ADD DateOfBirth date;
Lưu ý rằng cột mới, "DateOfBirth", thuộc loại ngày tháng và sẽ chứa một ngày
tháng. Kiểu dữ liệu chỉ định loại dữ liệu mà cột có thể chứa. Để có tài liệu tham khảo đầy
đủ về tất cả các kiểu dữ liệu có sẵn trong MS Access, MySQL và SQL Server, hãy truy
cập tài liệu tham khảo Kiểu dữ liệu đầy đủ của chúng tôi .
Bảng " Persons " bây giờ sẽ trông như thế này:
o Ví dụ về thay đổi kiểu dữ liệu
Bây giờ chúng ta muốn thay đổi kiểu dữ liệu của cột có tên "DateOfBirth" trong bảng "
Persons ".
Chúng tơi sử dụng câu lệnh SQL sau:
ALTER TABLE Persons
ALTER COLUMN DateOfBirth year;
Lưu ý: rằng cột "DateOfBirth" bây giờ thuộc loại năm và sẽ chứa một năm ở định dạng
hai hoặc bốn chữ số.
7
o Ví dụ về DROP COLUMN
Tiếp theo, chúng tơi muốn xóa cột có tên "DateOfBirth" trong bảng "Người".
Chúng tơi sử dụng câu lệnh SQL sau:
ALTER TABLE Persons
DROP COLUMN DateOfBirth;
Bảng " Persons " bây giờ sẽ trông như thế này:
7. Các ràng buộc trong SQL
Các ràng buộc SQL được sử dụng để chỉ định các quy tắc cho dữ liệu trong bảng.
SQL tạo ràng buộc
Các ràng buộc có thể được chỉ định khi bảng được tạo bằng CREATE TABLEcâu lệnh
hoặc sau khi bảng được tạo bằng ALTER TABLEcâu lệnh.
Cú pháp
CREATE TABLE table_name (
column1 datatype constraint,
column2 datatype constraint,
column3 datatype constraint,
....
);
Các ràng buộc SQL
Các ràng buộc SQL được sử dụng để chỉ định các quy tắc cho dữ liệu trong bảng.
8
Các ràng buộc được sử dụng để giới hạn loại dữ liệu có thể đi vào bảng. Điều này đảm
bảo tính chính xác và độ tin cậy của dữ liệu trong bảng. Nếu có bất kỳ vi phạm nào giữa
ràng buộc và hành động dữ liệu, hành động đó sẽ bị hủy bỏ.
Ràng buộc có thể là cấp cột hoặc cấp bảng. Các ràng buộc mức cột áp dụng cho một cột
và các ràng buộc mức bảng áp dụng cho toàn bộ bảng.
Các ràng buộc sau thường được sử dụng trong SQL:
NOT NULL- Đảm bảo rằng một cột không được có giá trị NULL
UNIQUE- Đảm bảo rằng tất cả các giá trị trong một cột là khác nhau
PRIMARY KEY- Sự kết hợp của a NOT NULLvà UNIQUE. Xác định duy nhất
từng hàng trong bảng
FOREIGN KEY - Ngăn chặn các hành động phá hủy liên kết giữa các bảng
CHECK- Đảm bảo rằng các giá trị trong một cột thỏa mãn một điều kiện cụ thể
DEFAULT- Đặt giá trị mặc định cho một cột nếu không có giá trị nào được chỉ
định
CREATE INDEX- Dùng để tạo và lấy dữ liệu từ cơ sở dữ liệu rất nhanh chóng
8. Ràng buộc NOT NULL
Theo mặc định, một cột có thể chứa các giá trị NULL.
Ràng NOT NULLbuộc buộc một cột KHÔNG chấp nhận giá trị NULL.
Điều này buộc một trường phải ln chứa giá trị, có nghĩa là bạn không thể chèn bản ghi
mới hoặc cập nhật bản ghi mà không thêm giá trị vào trường này.
SQL NOT NULL trên CREATE TABLE
SQL sau đảm bảo rằng các cột "ID", "LastName" và "FirstName" sẽ KHÔNG chấp nhận
giá trị NULL khi bảng " Persons " được tạo:
o Ví dụ
CREATE TABLE Persons (
ID int NOT NULL,
9
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Age int
);
SQL NOT NULL trên ALTER TABLE
Để tạo NOT NULL ràng buộc trên cột "Tuổi" khi bảng "Người" đã được tạo, hãy
sử dụng SQL sau:
ALTER TABLE Persons
MODIFY Age int NOT NULL;
9. Ràng buộc UNIQUE trong SQL
Ràng buộc UNIQUE đảm bảo rằng tất cả các giá trị trong một cột là khác nhau.
Cả ràng buộc UNIQUEvà PRIMARY KEYràng buộc đều đảm bảo tính duy nhất cho một
cột hoặc tập hợp các cột.
Một PRIMARY KEYràng buộc tự động có một UNIQUEràng buộc.
Tuy nhiên, bạn có thể có nhiều UNIQUEràng buộc trên mỗi bảng, nhưng chỉ có
một PRIMARY KEYràng buộc cho mỗi bảng.
Ràng buộc DUY NHẤT của SQL trên TẠO BẢNG
SQL sau tạo ra một UNIQUEràng buộc đối với cột "ID" khi bảng "Người" được tạo:
SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
MySQL:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
10
FirstName varchar(255),
Age int,
UNIQUE (ID)
);
Để đặt tên cho một UNIQUEràng buộc và xác định một UNIQUEràng buộc trên nhiều
cột, hãy sử dụng cú pháp SQL sau:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT UC_Person UNIQUE (ID,LastName)
);
Ràng buộc DUY NHẤT của SQL trên ALTER TABLE
Để tạo UNIQUEràng buộc trên cột "ID" khi bảng đã được tạo, hãy sử dụng SQL sau:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD UNIQUE (ID);
Để đặt tên cho một UNIQUEràng buộc và xác định một UNIQUEràng buộc trên nhiều
cột, hãy sử dụng cú pháp SQL sau:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT UC_Person UNIQUE (ID,LastName);
XÓA Ràng buộc DUY NHẤT
Để loại bỏ một UNIQUEràng buộc, hãy sử dụng SQL sau:
MySQL:
ALTER TABLE Persons
DROP INDEX UC_Person;
11
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT UC_Person;
10. Ràng buộc chính: PRIMARY KEY
Ràng buộc xác định duy nhất mỗi bản PRIMARY KEYghi trong một bảng.
Khóa chính phải chứa giá trị DUY NHẤT và không được chứa giá trị NULL.
Một bảng chỉ có thể có MỘT khóa chính; và trong bảng, khóa chính này có thể bao gồm
một hoặc nhiều cột (trường).
PRIMARY KEY SQL trên CREATE TABLE
SQL sau tạo một PRIMARY KEY trên cột "ID" khi bảng "Người" được tạo:
MySQL:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);
SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
ID int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
Để cho phép đặt tên cho một PRIMARY KEYràng buộc và để xác định một PRIMARY
KEY ràng buộc trên nhiều cột, hãy sử dụng cú pháp SQL sau:
MySQL / SQL Server / Oracle / MS Access:
12
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT PK_Person PRIMARY KEY (ID,LastName)
);
Lưu ý: Trong ví dụ trên chỉ có MỘT PRIMARY KEY(PK_Person). Tuy nhiên, GIÁ TRỊ
của khóa chính được tạo thành từ HAI CỘT (ID + LastName).
PRIMARY KEY TRÊN ALTER TABLE
Để tạo PRIMARY KEYràng buộc trên cột "ID" khi bảng đã được tạo, hãy sử dụng SQL
sau:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD PRIMARY KEY (ID);
Để cho phép đặt tên cho một PRIMARY KEYràng buộc và để xác định một PRIMARY
KEYràng buộc trên nhiều cột, hãy sử dụng cú pháp SQL sau:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);
Lưu ý: Nếu bạn sử dụng ALTER TABLEđể thêm khóa chính, (các) cột khóa chính phải
được khai báo là không chứa giá trị NULL (khi bảng được tạo lần đầu tiên).
BỎ QUA Ràng buộc PRIMARY KEY
Để loại bỏ một PRIMARY KEY ràng buộc, hãy sử dụng SQL sau:
MySQL:
ALTER TABLE Persons
DROP PRIMARY KEY;
SQL Server / Oracle / MS Access:
13
ALTER TABLE Persons
DROP CONSTRAINT PK_Person;
11. Ràng buộc FOREIGN KEY
Ràng buộc FOREIGN KEY được sử dụng để ngăn chặn các hành động phá hủy liên kết
giữa các bảng.
A FOREIGN KEY là một trường (hoặc tập hợp các trường) trong một bảng, tham chiếu
đến PRIMARY KEY trong một bảng khác.
Bảng có khóa ngoại được gọi là bảng con và bảng có khóa chính được gọi là bảng tham
chiếu hoặc bảng cha.
Nhìn vào hai bảng sau:
Bảng Person
Bảng đơn hàng
Lưu ý rằng cột "PersonID" trong bảng "Order" trỏ đến cột "PersonID" trong bảng
"Person".
14
Cột "ID Người" trong bảng "Người" là PRIMARY KEYtrong bảng "Người".
Cột "PersonID" trong bảng "Đơn đặt hàng" là một FOREIGN KEYtrong bảng "Đơn đặt
hàng".
Ràng FOREIGN KEYbuộc ngăn không cho dữ liệu khơng hợp lệ được chèn vào cột khóa
ngoại, vì nó phải là một trong các giá trị có trong bảng mẹ.
SQL FOREIGN KEY trên CREATE TABLE
SQL sau tạo một FOREIGN KEYtrên cột "PersonID" khi bảng "Đơn hàng" được tạo:
MySQL:
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
SQL Server / Oracle / MS Access:
CREATE TABLE Orders (
OrderID int NOT NULL PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);
Để cho phép đặt tên cho một FOREIGN KEYràng buộc và để xác định một FOREIGN
KEY ràng buộc trên nhiều cột, hãy sử dụng cú pháp SQL sau:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
15
REFERENCES Persons(PersonID)
);
SQL FOREIGN KEY trên ALTER TABLE
Để tạo ràng buộc FOREIGN KEY trên cột "PersonID" khi bảng "Đơn hàng" đã được tạo,
hãy sử dụng SQL sau:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
Để cho phép đặt tên cho một ràng buộc FOREIGN KEY và để xác định một ràng
buộc FOREIGN KEY trên nhiều cột, hãy sử dụng cú pháp SQL sau:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
XÓA Ràng buộc FOREIGN KEY
Để loại bỏ một ràng buộc FOREIGN KEY, hãy sử dụng SQL sau:
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;
12. Ràng buộc CHECK
Ràng CHECKbuộc được sử dụng để giới hạn phạm vi giá trị có thể được đặt trong một
cột.
Nếu bạn xác định một CHECKràng buộc trên một cột, nó sẽ chỉ cho phép một số giá trị
nhất định cho cột này.
16
Nếu bạn xác định một CHECKràng buộc trên một bảng, nó có thể giới hạn các giá trị
trong các cột nhất định dựa trên các giá trị trong các cột khác trong hàng.
SQL CHECK on CREATE TABLE
SQL sau đây tạo ra một CHECKràng buộc đối với cột "Tuổi" khi bảng "Người" được
tạo. Ràng CHECKbuộc đảm bảo rằng tuổi của một người phải từ 18 tuổi trở lên:
MySQL:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CHECK (Age>=18)
);
SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int CHECK (Age>=18)
);
Để cho phép đặt tên cho một CHECKràng buộc và để xác định một CHECKràng buộc
trên nhiều cột, hãy sử dụng cú pháp SQL sau:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255),
CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes')
);
SQL CHECK on ALTER TABLE
Để tạo ràng buộc CHECK trên cột "Tuổi" khi bảng đã được tạo, hãy sử dụng SQL sau:
17
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CHECK (Age>=18);
Để cho phép đặt tên cho một CHECKràng buộc và để xác định một CHECKràng buộc
trên nhiều cột, hãy sử dụng cú pháp SQL sau:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City='Sa
ndnes');
XÓA Ràng buộc CHECK
Để loại bỏ một ràng buộc CHECK, hãy sử dụng SQL sau:
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT CHK_PersonAge;
MySQL:
ALTER TABLE Persons
DROP CHECK CHK_PersonAge;
13. Ràng buộc SQL: DEFAULT
Ràng DEFAULTbuộc được sử dụng để đặt giá trị mặc định cho một cột.
Giá trị mặc định sẽ được thêm vào tất cả các bản ghi mới, nếu khơng có giá trị nào khác
được chỉ định.
SQL DEFAULT trên ALTER TABLE
SQL sau đặt DEFAULT giá trị cho cột "Thành phố" khi bảng "Người" được tạo:
SQL / SQL Server / Oracle / MS Access của tôi:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
18
FirstName varchar(255),
Age int,
City varchar(255) DEFAULT 'Sandnes'
);
Ràng DEFAULTbuộc cũng có thể được sử dụng để chèn các giá trị hệ thống, bằng cách
sử dụng các chức năng như : GETDATE()
CREATE TABLE Orders (
ID int NOT NULL,
OrderNumber int NOT NULL,
OrderDate date DEFAULT GETDATE()
);
SQL DEFAULT trên ALTER TABLE
Để tạo DEFAULTràng buộc trên cột "Thành phố" khi bảng đã được tạo, hãy sử dụng
SQL sau:
MySQL:
ALTER TABLE Persons
ALTER City SET DEFAULT 'Sandnes';
Máy chủ SQL:
ALTER TABLE Persons
ADD CONSTRAINT df_City
DEFAULT 'Sandnes' FOR City;
Truy cập MS:
ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'Sandnes';
Oracle:
ALTER TABLE Persons
MODIFY City DEFAULT 'Sandnes';
XÓA Ràng buộc DROP
19
Để loại bỏ một ràng buộc DEFAULT, hãy sử dụng SQL sau:
MySQL:
ALTER TABLE Persons
ALTER City DROP DEFAULT;
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;
14. Câu lệnh SQL: CREATE INDEX
Câu lệnh CREATE INDEX được sử dụng để tạo chỉ mục trong bảng.
Các chỉ mục được sử dụng để lấy dữ liệu từ cơ sở dữ liệu nhanh hơn so với các chỉ mục
khác. Người dùng không thể nhìn thấy các chỉ mục, chúng chỉ được sử dụng để tăng tốc
độ tìm kiếm / truy vấn.
Lưu ý: Cập nhật bảng có chỉ mục mất nhiều thời gian hơn cập nhật bảng khơng có chỉ
mục (vì chỉ mục cũng cần cập nhật). Vì vậy, chỉ tạo chỉ mục trên các cột sẽ thường xuyên
được tìm kiếm.
Cú pháp CREATE INDEX
Tạo chỉ mục trên bảng. Các giá trị trùng lặp được phép:
CREATE INDEX index_name
ON table_name (column1, column2, ...);
TẠO Cú pháp INDEX DUY NHẤT
Tạo một chỉ mục duy nhất trên một bảng. Các giá trị trùng lặp không được phép:
CREATE UNIQUE INDEX index_name
ON table_name (column1, column2, ...);
Lưu ý: Cú pháp để tạo chỉ mục khác nhau giữa các cơ sở dữ liệu khác nhau. Do đó:
Kiểm tra cú pháp để tạo chỉ mục trong cơ sở dữ liệu của bạn.
o Ví dụ về CREATE INDEX
20
Câu lệnh SQL bên dưới tạo một chỉ mục có tên "idx_lastname" trên cột "LastName"
trong bảng "Người":
CREATE INDEX idx_lastname
ON Persons (LastName);
Nếu bạn muốn tạo chỉ mục trên một tổ hợp các cột, bạn có thể liệt kê tên cột trong dấu
ngoặc đơn, được phân tách bằng dấu phẩy:
CREATE INDEX idx_pname
ON Persons (LastName, FirstName);
DROP INDEX
Câu lệnh DROP INDEX được sử dụng để xóa một chỉ mục trong một bảng.
Truy cập MS:
DROP INDEX index_name ON table_name;
Máy chủ SQL:
DROP INDEX table_name.index_name;
DB2 / Oracle:
DROP INDEX index_name;
MySQL:
ALTER TABLE table_name
DROP INDEX index_name;
15. Trường SQL AUTO INCREMENT
Tự động tăng cho phép một số duy nhất được tạo tự động khi một bản ghi mới được chèn
vào bảng.
Thường thì đây là trường khóa chính mà chúng tơi muốn được tạo tự động mỗi khi một
bản ghi mới được chèn vào.
Cú pháp cho MySQL
21
Câu lệnh SQL sau xác định cột "Personid" là trường khóa chính tự động tăng trong bảng
"Người":
CREATE TABLE Persons (
Personid int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (Personid)
);
MySQL sử dụng từ khóa AUTO_INCREMENT để thực hiện tính năng tự động tăng.
Theo mặc định, giá trị bắt đầu cho AUTO_INCREMENT là 1 và nó sẽ tăng lên 1 cho mỗi
bản ghi mới.
Để cho phép AUTO_INCREMENT chuỗi bắt đầu bằng một giá trị khác, hãy sử dụng câu
lệnh SQL sau:
ALTER TABLE Persons AUTO_INCREMENT=100;
Để chèn một bản ghi mới vào bảng "Người", chúng tơi sẽ KHƠNG phải chỉ định một giá
trị cho cột "Personid" (một giá trị duy nhất sẽ được thêm tự động):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen');
Câu lệnh SQL ở trên sẽ chèn một bản ghi mới vào bảng "Người". Cột "Personid" sẽ được
chỉ định một giá trị duy nhất. Cột "FirstName" sẽ được đặt thành "Lars" và cột
"LastName" sẽ được đặt thành "Monsen".
Cú pháp cho SQL Server
Câu lệnh SQL sau xác định cột "Personid" là trường khóa chính tự động tăng trong bảng
"Người":
CREATE TABLE Persons (
Personid int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
22
MS SQL Server sử dụng IDENTITYtừ khóa để thực hiện tính năng tự động tăng.
Trong ví dụ trên, giá trị bắt đầu cho IDENTITYlà 1 và nó sẽ tăng lên 1 cho mỗi bản ghi
mới.
Mẹo: Để chỉ định rằng cột "Personid" phải bắt đầu ở giá trị 10 và tăng lên 5, hãy thay đổi
nó thành IDENTITY(10,5).
Để chèn một bản ghi mới vào bảng "Người", chúng tơi sẽ KHƠNG phải chỉ định một giá
trị cho cột "Personid" (một giá trị duy nhất sẽ được thêm tự động):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen');
Câu lệnh SQL ở trên sẽ chèn một bản ghi mới vào bảng "Người". Cột "Personid" sẽ được
chỉ định một giá trị duy nhất. Cột "FirstName" sẽ được đặt thành "Lars" và cột
"LastName" sẽ được đặt thành "Monsen".
Cú pháp truy cập
Câu lệnh SQL sau xác định cột "Personid" là trường khóa chính tự động tăng trong bảng
"Người":
CREATE TABLE Persons (
Personid AUTOINCREMENT PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
MS Access sử dụng AUTOINCREMENTtừ khóa để thực hiện tính năng tự động tăng.
Theo mặc định, giá trị bắt đầu cho AUTOINCREMENTlà 1 và nó sẽ tăng lên 1 cho mỗi
bản ghi mới.
Mẹo: Để chỉ định rằng cột "Personid" phải bắt đầu ở giá trị 10 và tăng lên 5, hãy thay đổi
tự động tăng thành AUTOINCREMENT(10,5).
Để chèn một bản ghi mới vào bảng "Người", chúng tơi sẽ KHƠNG phải chỉ định một giá
trị cho cột "Personid" (một giá trị duy nhất sẽ được thêm tự động):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen');
23
Câu lệnh SQL ở trên sẽ chèn một bản ghi mới vào bảng "Người". Cột "Personid" sẽ được
chỉ định một giá trị duy nhất. Cột "FirstName" sẽ được đặt thành "Lars" và cột
"LastName" sẽ được đặt thành "Monsen".
Cú pháp cho Oracle
Trong Oracle, mã phức tạp hơn một chút.
Bạn sẽ phải tạo một trường tăng tự động với đối tượng chuỗi (đối tượng này tạo ra một
chuỗi số).
Sử dụng CREATE SEQUENCE cú pháp sau:
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10;
Đoạn mã trên tạo một đối tượng trình tự được gọi là seq_woman, bắt đầu bằng 1 và sẽ
tăng lên 1. Nó cũng sẽ lưu vào bộ đệm tối đa 10 giá trị cho hiệu suất. Tùy chọn bộ đệm
chỉ định số lượng giá trị trình tự sẽ được lưu trữ trong bộ nhớ để truy cập nhanh hơn.
Để chèn một bản ghi mới vào bảng "Người", chúng ta sẽ phải sử dụng hàm tiếp theo
(hàm này lấy giá trị tiếp theo từ chuỗi seq_ person):
INSERT INTO Persons (Personid,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen');
Câu lệnh SQL ở trên sẽ chèn một bản ghi mới vào bảng "Người". Cột "Personid" sẽ được
gán số tiếp theo từ chuỗi seq_ person. Cột "FirstName" sẽ được đặt thành "Lars" và cột
"LastName" sẽ được đặt thành "Monsen".
16. Câu lệnh với DATE
Phần khó nhất khi làm việc với ngày tháng là đảm bảo rằng định dạng của ngày bạn
đang cố gắng chèn khớp với định dạng của cột ngày tháng trong cơ sở dữ liệu.
Miễn là dữ liệu của bạn chỉ chứa phần ngày tháng, các truy vấn của bạn sẽ hoạt
động như mong đợi. Tuy nhiên, nếu liên quan đến một phần thời gian, nó sẽ phức tạp
hơn.
Các kiểu dữ liệu ngày trong SQL
24
MySQL đi kèm với các kiểu dữ liệu sau để lưu trữ ngày hoặc giá trị ngày / giờ trong cơ
sở dữ liệu:
DATE- định dạng YYYY-MM-DD
DATETIME- định dạng: YYYY-MM-DD HH: MI: SS
TIMESTAMP- định dạng: YYYY-MM-DD HH: MI: SS
YEAR- định dạng YYYY hoặc YY
SQL Server đi kèm với các kiểu dữ liệu sau để lưu trữ ngày hoặc giá trị ngày / giờ trong
cơ sở dữ liệu:
DATE- định dạng YYYY-MM-DD
DATETIME- định dạng: YYYY-MM-DD HH: MI: SS
SMALLDATETIME- định dạng: YYYY-MM-DD HH: MI: SS
TIMESTAMP- định dạng: một số duy nhất
Lưu ý: Loại ngày được chọn cho một cột khi bạn tạo một bảng mới trong cơ sở dữ liệu
của mình!
SQL làm việc với DATE
Nhìn vào bảng sau:
Bảng đơn hàng
Bây giờ chúng ta muốn chọn các bản ghi có OrderDate là "2008-11-11" từ bảng trên.
25