Sau khi học xong bài học này, các bạn sẽ biết cách:
- - Nhập dữ liệu vào bảng.
- - Thay đổi dữ liệu trong bảng.
- - Xóa 1 dòng trong bảng.
- - Điều khiển phiên làm việc
Thêm một dòng mới vào bảng
Có 2 loại câu lệnh SQL:
- - Data Manupulation Language: Đây là câu lệnh dùng để tao tác với dữ liệu như INSERT, UPDATE, DELETE.
- - Data Definition Language: Đây là những câu lệnh để tạo ra các đối tượng như bảng, view, chỉ mục (index). Ví dụ: CREATE TABLE, CREATE INDEX, ALTER TABLE.
Note: Một giao dịch (transaction)
là một tập hợp các câu lệnh DML, được bắt đầu khi người dùng chạy một câu lệnh
DML bất kỳ và kết thúc khi người dùng gõ câu lệnh COMMIT hoặc ROLL BACK. Giải
thích một cách hình tượng hơn: Bạn ra chợ mua một con cá giá 30.000 Đ, thì tiền
trong túi bạn sẽ chuyển vào túi người bán hàng, đó gọi là một giao dịch. Vậy
giao dịch này bao gồm 2 câu lệnh DML: 1. Update tài khoản của bạn trừ 30.000Đ.
2.Update tài khoản của người bán hàng thêm 30.000 Đ.
Cách thêm một dòng mới vào bảng có
cú pháp như sau:
INSERT INTO table
[(column [, column...])]
VALUES (value
[, value...]);
|
Trong đó:
Table: tên bảng cần chèn dữ liệu
Column: Danh sách các cột sẽ chứa
giá trị mới chèn vào
Value: Giá trị tương ứng cho các cột
vừa được liệt kê bên trên
Ví dụ 1: Insert dữ liệu vào tất cả các cột
INSERT INTO departments
VALUES (70, 'Public Relations', 100, 1700);
|
Ví dụ 2: Insert dữ liệu vào một số
cột được chỉ định
INSERT INTO departments(department_id,
department_name, location_id)
VALUES (70, 'Public Relations',1700);
|
Ví dụ 3: Insert dữ liệu kết hợp sử
dụng hàm
INSERT INTO employees (employee_id,
first_name, last_name,
email, phone_number,
hire_date, job_id,
salary,
commission_pct, manager_id,
department_id)
VALUES (113,
'Louis', 'Popp',
'LPOPP', '515.124.4567',
SYSDATE,
'AC_ACCOUNT', 6900,
NULL, 205, 110);
|
Ví dụ 4: Insert dữ liệu ngày tháng
INSERT INTO employees
VALUES
(114,
'Den', 'Raphealy',
'DRAPHEAL', '515.127.4561',
TO_DATE('FEB 3, 1999', 'MON DD, YYYY'),
'SA_REP', 11000, 0.2, 100, 60);
|
Copy dữ
liệu từ một bảng khác
Bạn có thể copy dữ liệu từ một bảng
khác có sẵn bằng câu lệnh INSERT kết hợp với SELECT
INSERT INTO sales_reps(id, name, salary,
commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';
|
Như trong ví dụ bên trên, chúng
ta đã insert dữ liệu từ bảng employees sang bảng sales_reps. Có một số chú ý
khi sử dụng cách copy này:
-
Không sử dụng từ khóa VALUES.
-
Những cột sẽ được INSERT dữ liệu phải khớp với
những cột được liệt kê sau mệnh đề SELECT.
Thay đổi
dữ liệu trong bảng
Bảng Employees
Update 1 dòng có sẵn trong bảng
Ở ví dụ bên trên, chúng ta đã thay đổi 3 Department_ID của 3 người từ 60
sang 80
Cú
pháp của câu lệnh UPDATE
UPDATE table
SET column = value [, column = value, ...]
[WHERE condition];
|
Trong cú pháp này:
Table: Bảng muốn cập nhật dữ liệu
Column: Cột muốn
thay đổi dữ liệu
Condition: Những cột nào thỏa mãn điều kiện này sẽ được cập nhật.
Ví dụ 1: Update những dòng thỏa mãn điều kiện
employee_id = 113
UPDATE employees
SET
department_id = 50
WHERE
employee_id = 113;
|
Ví dụ 2: Update tất cả các dòng
trong bảng
UPDATE copy_emp
SET
department_id = 110;
|
Bạn có thể kết hợp với câu lệnh SELECT với câu lệnh UPDATE như sau
Ví dụ 3: Sửa trường job_id, salary
của nhân viên có employee_id = 113 sao cho giống với job_id và salary của nhân
viên có employee_id=205
UPDATE
employees
SET
job_id = (SELECT job_id
FROM employees
WHERE employee_id = 205),
salary = (SELECT salary
FROM employees
WHERE employee_id = 205)
WHERE
employee_id = 113;
|
Xóa dữ
liệu trên bảng
Có 2 cách để xóa dữ liệu trên bảng:
- - Delete
- - Truncate
Câu lệnh DELETE dùng để xóa 1 hay nhiều row
trên một bảng, còn câu lệnh TRUNCATE chỉ có thể xóa toàn bộ bảng. Bù lại tốc độ
của câu lệnh TRUNCATE nhanh hơn DELETE nhiều .
Ngoài ra, do câu lệnh TRUNCATE là một câu lệnh
DDL (Data Definition Language) nên khi đã thực hiện rồi, bạn rất khó để phục hồi
lại dữ liệu, còn câu lệnh DELETE là câu lệnh DML (Data Manipulation Language)
nên bạn có thể phục hồi lại dữ liệu bằng câu lệnh ROLLBACK ( với điều kiện sau
khi gõ xong câu lệnh DELETE, bạn chưa gõ COMMIT)
Cú pháp của câu lệnh DELETE
DELETE [FROM] table
[WHERE condition];
|
Ví dụ 1: Xóa dòng được chỉ định trong điều kiện
WHERE
DELETE FROM departments
WHERE
department_name = 'Finance';
1 row deleted
|
Ví dụ 2: Xóa tất cả bảng
DELETE FROM
copy_emp;
22 rows deleted
|
Cú pháp của câu lệnh TRUNCATE
TRUNCATE TABLE table_name;
|
Ví dụ:
TRUNCATE TABLE copy_emp;
|
Thế nào là Giao dịch
(Transaction)
Như tôi đã nói ở phần trên, một giao dịch được bắt đầu từ lúc chúng ta chạy
một câu lệnh DML và kết thúc khi chúng ta gõ câu lệnh ROLL BACK hoặc COMMIT. Giao
dịch sinh ra để đảm bảo tính đúng đắn dữ liệu.
Ví dụ: Khi mẹ bạn chuyển tiền cho bạn, tức là đã có 2 thao tác thay đổi
trong CSDL, một là tài khoản của mẹ bạn bị trừ , hai là tài khoản của bạn được
cộng. Nếu trong quá trình thực hiện giao dịch, hệ thống gặp trục trặc, nếu chỉ
có 1 trong 2 thao tác được phục hồi thì tính đúng đắn của dữ liệu sẽ bị mất. Vậy
là mẹ bạn sẽ bị mất tiền hoặc bạn tự nhiên sẽ có tiền mà tài khoản của mẹ bạn
không bị trừ!.Cho nên phải là toàn bộ giao dịch phải bị hủy để đảm bảo tính
đúng đắn của dữ liệu.
Tôi vừa đề cập đến 2 câu lệnh COMMIT và ROLLBACK, vậy chúng là gì?
Đầu tiên, chúng được sử dụng để kết thúc một giao dịch. Sử dụng COMMIT
khi chúng ta đã chắc chắn những thay đổi chúng ta thực hiện trong giao dịch là
chính xác, còn sử dụng ROLLBACK khi chúng ta lỡ tay thay đổi nhầm dữ liệu và muốn
loại bỏ giao dịch vừa tiến hành sai.
ROLLBACK và SAVEPOINT
Các bạn có thể tạo ra nhiều điểm SAVEPOINT
trong giao dịch để có thể quay lại điểm SAVEPOINT đó khi cần bằng câu lệnh
ROLLBACK. Trong ví dụ trên, bạn tạo ra 2 điểm check point A và B. Nếu bạn chỉ gõ câu lệnh ROLLBACK không, thì tất
cả các câu lệnh trong giao dịch sẽ bị hủy bỏ. Nếu bạn gõ câu lệnh ROLLBACK to
SAVEPOINT B thì câu lệnh INSERT sẽ bị loại bỏ. Còn nếu bạn gõ câu lệnh ROLLBACK
to SAVEPOINT A thì 2 câu lệnh INSERT và
1 câu lệnh UPDATE sẽ bị hủy.
Nói chung, một giao dịch có những điểm lưu
ý sau:
-
Trạng thái trước của dữ liệu trước khi giao dịch
thực hiện có thể phục hồi được (bằng câu lệnh ROLLBACK)
-
Người dùng hiện tại trên giao dịch có thể nhìn
thấy dữ liệu mình vừa thay đổi, nhưng những người dùng khác không thể nhìn thấy
dữ liệu của một giao dịch chưa COMMIT được.
-
Khi một người dùng cập nhật vào dữ liệu trong một
giao dịch, thì người dùng khác khi cố gắng thay đổi dữ liệu đó sẽ phải chờ cho
đến khi người dùng trước kết thúc giao dịch.
-
Sau khi kết thúc giao dịch, dữ liệu sẽ được ghi
vào Database, trạng thái trước của dữ liệu sẽ bị ghi đè vào.
-
Sau khi kết thúc giao dịch, tất cả người dùng sẽ
nhìn thấy dữ liệu mới được cập nhật trong giao dịch, và các SAVEPOINT cũng bị
xóa bỏ
Chào thân ái và hẹn các bạn ở các bài học tiếp theo
Duydx
( Chuyên gia cao cấp Orafocus Group
http://orafocus.com.vn
( Chuyên gia cao cấp Orafocus Group
http://orafocus.com.vn
Hay quá, bài viết rất dễ hiểu, cảm ơn bạn!
Trả lờiXóaCảm ơn anh nhiều
Trả lờiXóaAnh có thể giúp em 1 xíu được không ạ?
Trả lờiXóaAmazing good Job Anh.!
Trả lờiXóa