Đọc mục lục.
- 1. Trình kích hoạt
- 2. Loại kích hoạt
- 3. Cú pháp kích hoạt
- 4. Chèn trường hợp kích hoạt dữ liệu
- 5. Sửa đổi trường hợp kích hoạt dữ liệu
- 6. Xóa trường hợp kích hoạt dữ liệu
1. Trình kích hoạt
Trình kích hoạt là các đối tượng cơ sở dữ liệu liên quan đến các bảng. Chúng kích hoạt và thực thi tập hợp các câu lệnh SQL được xác định trong trình kích hoạt trước hoặc sau khi chèn/cập nhật/xóa. Tính năng này của trình kích hoạt có thể giúp các ứng dụng đảm bảo tính toàn vẹn của dữ liệu ở phía cơ sở dữ liệu. xác minh dữ liệu và các hoạt động khác.
Sử dụng bí danh cũ và mới để tham chiếu đến nội dung bản ghi đã thay đổi trong trình kích hoạt, tương tự như các cơ sở dữ liệu khác. Hiện tại, trình kích hoạt chỉ hỗ trợ kích hoạt cấp hàng và không hỗ trợ kích hoạt cấp câu lệnh.
。
2. Loại kích hoạt
- Trình kích hoạt loại chèn: mới đại diện cho dữ liệu sẽ được hoặc đã được thêm vào
- Trình kích hoạt loại cập nhật: cũ đại diện cho dữ liệu trước khi sửa đổi, mới đại diện cho dữ liệu sẽ hoặc đã được sửa đổi
- Trình kích hoạt xóa: cũ biểu thị dữ liệu sẽ hoặc đã bị xóa
。
3. Cú pháp kích hoạt
3.1 Tạo ngữ pháp
tạo nên
cò súng
trigger_name trước
/
sau đó
chèn
/
cập nhật
/
delete
TRÊN
tb_tên
vì
mỗi hàng
bắt đầu
lệnh kích hoạt;
kết thúc
;
3.2 Cú pháp xem
3.3 Xóa câu lệnh
làm rơi
cò súng
[
tên_lược_đồ.
]
tên_kích_thích;
--
Nếu không chỉ định tên lược đồ, nó sẽ mặc định là cơ sở dữ liệu hiện tại
。
4. Chèn trường hợp kích hoạt dữ liệu
4.1 Yêu cầu:
Khi ghi dữ liệu chèn vào bảng sinh viên thông qua trigger, hãy chèn nhật ký thay đổi vào bảng nhật ký sinh viên_logs;
4.2 Tạo bảng sinh viên_logs
mysql
>
tạo nên
bàn
Nhật ký sinh viên(
->
nhận dạng
số nguyên
sơ đẳng
chìa khóa
tự động tăng,
->
hoạt động
varchar
(
20
) nhận xét "Loại hoạt động,
chèn
/
cập nhật
/
delete
",
->
thời gian vận hành
ngày giờ
bình luận "thời gian hoạt động",
->
vận hành_id
số nguyên
nhận xét "ID của hoạt động",
->
vận hành_tham số
varchar
(
500
) nhận xét "thông số hoạt động"
->
) nhận xét "bảng nhật ký hoạt động của sinh viên";
0
hàng bị ảnh hưởng (
1.18
giây)
4.3 Tạo trình kích hoạt dữ liệu chèn
mysql
>
dấu phân cách
&
mysql
>
tạo nên
cò súng
sinh viên_chèn_kích_thích
->
sau đó
chèn
TRÊN
học sinh
vì
mỗi hàng
->
bắt đầu
->
chèn
vào trong
student_logs(id,hoạt động,thời gian hoạt động,id hoạt động,tham số hoạt động)
giá trị
(
vô giá trị
,
'
chèn
'
, now(), new.id, concat("Nội dung dữ liệu được chèn vào là: id
=
",new.id,"tên
=
",new.name,"tuổi
=
",new.age,"điểm
=
",điểm.mới));
->
kết thúc
;
->&
Truy vấn OK,
0
hàng bị ảnh hưởng (
0,20
giây)
Lưu ý 1: Dấu phân cách & đã được đề cập trong bài viết trước, nó thay đổi dấu kết thúc câu lệnh trong mysql từ ";" thành "&". Lý do là có một câu lệnh SQL hoàn chỉnh trong trigger, sẽ chứa dấu chấm phẩy. Tôi không thay đổi nó, tại sao tôi không thể viết một câu lệnh kích hoạt hoàn chỉnh trong terminal?
4.4 Xem các trình kích hoạt đã tạo
mysql
>
dấu phân cách; mysql
>
hiển thị các kích hoạt;
+
--
-------------+--------+----------+-------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------------------+--------+------------------- ------+------------------------------------------------------- -------------------------------------------------- -------------------------+----------------------- -------------+-------------+--------------- -------+-----------+
|
Cò súng
|
Sự kiện
|
Bàn
|
Tuyên bố
|
Thời gian
|
Tạo
|
chế độ sql
|
Định nghĩa
|
bộ ký tự_khách hàng
|
kết nối_đối ...
|
Cơ sở dữ liệu
Đối chiếu
|
+
--
-------------+--------+----------+-------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------------------+--------+------------------- ------+------------------------------------------------------- -------------------------------------------------- -------------------------+----------------------- -------------+-------------+--------------- -------+-----------+
|
sinh viên_chèn_kích_thích
|
CHÈN
|
học sinh
|
bắt đầu
chèn
vào trong
student_logs(id,hoạt động,thời gian hoạt động,id hoạt động,tham số hoạt động)
giá trị
(
vô giá trị
,
'
chèn
'
, now(), new.id, concat("Nội dung dữ liệu được chèn vào là: id
=
",new.id,"tên
=
",new.name,"tuổi
=
",new.age,"điểm
=
",điểm.mới));
kết thúc
|
SAU ĐÓ
|
2023
-
08
-
16
00
:
07
:
46,53
|
CHỈ_ĐẦY_NHÓM_ĐỦ_BỞI, BẢNG_CHUYỂN_NGHIÊM_CHẾ, KHÔNG_CÓ_NGÀY_BẰNG_KHÔNG ... LỖI_VÌ_PHÂN_BẰNG_KHÔNG, KHÔNG_CÓ_ĐẠI_CƠ_CÓ
|
nhảy
-
trợ cấp
người sử dụng
@nhảy
-
tài trợ cho máy chủ
|
utf8mb4
|
utf8mb4_0900_ai_ci
|
utf8mb4_0900_ai_ci
|
+
--
-------------+--------+----------+-------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------------------+--------+------------------- ------+------------------------------------------------------- -------------------------------------------------- -------------------------+----------------------- -------------+-------------+--------------- -------+-----------+
1
hàng ngang
TRONG
bộ
(
0,00
giây)
Lưu ý 2: Dấu phân cách thay đổi dấu kết thúc câu lệnh SQL từ "&" thành ";".
4.5 Chèn xác minh
mysql
>
chèn
vào trong
sinh viên(id,tên,tuổi,điểm)
giá trị
(
vô giá trị
"Lý Bạch",
30
,
100
); Truy vấn OK,
1
hàng bị ảnh hưởng (
0,21
giây) mysql
>
lựa chọn
*
từ
nhật ký_sinh_viên;
+
--
-------------+----------------------+-------------+ -------------------------------------------------- ---------+
|
nhận dạng
|
hoạt động
|
thời gian vận hành
|
vận hành_id
|
vận hành_tham số
|
+
--
-------------+----------------------+-------------+ -------------------------------------------------- ---------+
|
1
|
chèn
|
2023
-
08
-
16
00
:
21
:
47
|
5
|
Nội dung dữ liệu được chèn vào là: id
=
5tên
=
tuổi Lý Bạch
=
30điểm
=
100
|
+
--
-------------+----------------------+-------------+ -------------------------------------------------- ---------+
1
hàng ngang
TRONG
bộ
(
0,00
giây)
Lưu ý 3: Thông tin về Lý Bạch đưa vào dữ liệu đã được tự động ghi vào sinh viên_logs.
5. Sửa đổi trường hợp kích hoạt dữ liệu
5.1 Tạo trình kích hoạt dữ liệu sửa đổi
mysql
>
dấu phân cách
&
mysql
>
tạo nên
cò súng
student_update_trigger sau
cập nhật
TRÊN
học sinh
vì
mỗi hàng
bắt đầu
chèn
vào trong
student_logs(id, hoạt động, thời gian hoạt động,operate_id,operate_params)
giá trị
(
vô giá trị
,
'
cập nhật
'
,bây giờ(),id_mới,concat(
'
Dữ liệu trước khi cập nhật: id=
'
,cũ.id,
'
,tên=
'
,tên.cũ,
'
,tuổi=
'
,tuổi già,
'
,điểm=
'
,cũ.điểm,
'
|Dữ liệu được cập nhật: id=
'
,mới.id,
'
,tên=
'
,new.name,
'
,tuổi=
'
,thời đại mới,
'
,điểm=
'
,mới.điểm));
kết thúc
;
&
Truy vấn OK,
0
hàng bị ảnh hưởng (1
.86
giây) mysql
>
dấu phân cách;
5.2 Xem các trình kích hoạt đã tạo
mysql
>
hiển thị các kích hoạt;
+
--
-------------+--------+----------+-------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------+-------+------------------------+---------- -------------------------------------------------- -------------------------------------------------- ---------+-----------------------------------+---- -------------------+----------------------+-------- ------------+
|
Cò súng
|
Sự kiện
|
Bàn
|
Tuyên bố
|
Thời gian
|
Tạo
|
chế độ sql
|
Định nghĩa
|
bộ ký tự_khách hàng
|
kết nối_đối ...
|
Cơ sở dữ liệu
Đối chiếu
|
+
--
-------------+--------+----------+-------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------+-------+------------------------+---------- -------------------------------------------------- -------------------------------------------------- ---------+-----------------------------------+---- -------------------+----------------------+-------- ------------+
|
sinh viên_chèn_kích_thích
|
CHÈN
|
học sinh
|
bắt đầu
chèn
vào trong
student_logs(id,hoạt động,thời gian hoạt động,id hoạt động,tham số hoạt động)
giá trị
(
vô giá trị
,
'
chèn
'
, now(), new.id, concat("Nội dung dữ liệu được chèn vào là: id
=
",new.id,"tên
=
",new.name,"tuổi
=
",new.age,"điểm
=
",điểm.mới));
kết thúc
|
SAU ĐÓ
|
2023
-
08
-
16
00
:
07
:
46,53
|
CHỈ_ĐẦY_NHÓM_ĐỦ_BỞI, BẢNG_CHUYỂN_NGHIÊM_CHẾ, KHÔNG_CÓ_NGÀY_BẰNG_KHÔNG ... LỖI_VÌ_PHÂN_BẰNG_KHÔNG, KHÔNG_CÓ_ĐẠI_CƠ_CÓ
|
nhảy
-
trợ cấp
người sử dụng
@nhảy
-
tài trợ cho máy chủ
|
utf8mb4
|
utf8mb4_0900_ai_ci
|
utf8mb4_0900_ai_ci
|
|
kích hoạt cập nhật sinh viên
|
CẬP NHẬT
|
học sinh
|
bắt đầu
chèn
vào trong
student_logs(id, hoạt động, thời gian hoạt động,operate_id,operate_params)
giá trị
(
vô giá trị
,
'
cập nhật
'
,now(),new.id,concat(
'
Dữ liệu trước khi cập nhật: id=
'
,cũ.id,
'
,tên=
'
,tên.cũ,
'
,tuổi=
'
,tuổi già,
'
,điểm=
'
,cũ.điểm,
'
|Dữ liệu được cập nhật: id=
'
,mới.id,
'
,tên=
'
,new.name,
'
,tuổi=
'
,thời đại mới,
'
,điểm=
'
,mới.điểm));
kết thúc
|
SAU ĐÓ
|
2023
-
08
-
16
23
:
38
:
26,36
|
CHỈ_ĐẦY_NHÓM_ĐỦ_BỞI, BẢNG_CHUYỂN_NGHIÊM_CHẾ, KHÔNG_CÓ_NGÀY_BẰNG_KHÔNG ... LỖI_VÌ_PHÂN_BẰNG_KHÔNG, KHÔNG_CÓ_ĐẠI_CƠ_CÓ
|
nhảy
-
trợ cấp
người sử dụng
@nhảy
-
tài trợ cho máy chủ
|
utf8mb4
|
utf8mb4_0900_ai_ci
|
utf8mb4_0900_ai_ci
|
+
--
-------------+--------+----------+-------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------+-------+------------------------+---------- -------------------------------------------------- -------------------------------------------------- ---------+-----------------------------------+---- -------------------+----------------------+-------- ------------+
2
hàng
TRONG
bộ
(
1.16
giây)
5.3 Xem dữ liệu gốc của bảng sinh viên
mysql
>
lựa chọn
*
từ
học sinh;
+
--
--+-------+------+-------+
|
nhận dạng
|
tên
|
tuổi
|
điểm
|
+
--
--+-------+------+-------+
|
1
|
Trương Tam
|
18
|
88
|
|
2
|
John Doe
|
21
|
83
|
|
3
|
Vương Vũ
|
24
|
76
|
|
4
|
Triệu Lưu
|
19
|
94
|
|
5
|
Lý Bạch
|
30
|
100
|
+
--
--+-------+------+-------+
5
hàng
TRONG
bộ
(
1,30
giây)
5.4 Sửa đổi bảng sinh viên và xác minh trình kích hoạt
mysql
>
cập nhật
học sinh
bộ
tuổi
=
25
Ở đâu
nhận dạng
=
5
; Truy vấn OK,
1
hàng bị ảnh hưởng (
0,38
giây) Các hàng khớp nhau:
1
Đã thay đổi:
1
Cảnh báo:
0
5.5 Xem bảng sinh viên đã sửa đổi và bảng sinh viên_logs và xác minh trình kích hoạt
mysql
>
lựa chọn
*
từ
học sinh;
+
--
--+-------+------+-------+
|
nhận dạng
|
tên
|
tuổi
|
điểm
|
+
--
--+-------+------+-------+
|
1
|
Trương Tam
|
18
|
88
|
|
2
|
John Doe
|
21
|
83
|
|
3
|
Vương Vũ
|
24
|
76
|
|
4
|
Triệu Lưu
|
19
|
94
|
|
5
|
Lý Bạch
|
25
|
100
|
+
--
--+-------+------+-------+
5
hàng
TRONG
bộ
(
0,00
giây) mysql
>
lựa chọn
*
từ
nhật ký_sinh_viên;
+
--
-------------+----------------------+-------------+ -------------------------------------------------- -------------------------------------------------- -------+
|
nhận dạng
|
hoạt động
|
thời gian vận hành
|
vận hành_id
|
vận hành_tham số
|
+
--
-------------+----------------------+-------------+ -------------------------------------------------- -------------------------------------------------- -------+
|
1
|
chèn
|
2023
-
08
-
16
00
:
21
:
47
|
5
|
Nội dung dữ liệu được chèn vào là: id
=
5tên
=
tuổi Lý Bạch
=
30điểm
=
100
|
|
2
|
cập nhật
|
2023
-
08
-
16
23
:
58
:
23
|
5
|
Dữ liệu trước khi cập nhật: id
=
5
,tên
=
tuổi Lý Bạch
=
30
,điểm
=
100
|
Dữ liệu cập nhật: id
=
5
,tên
=
tuổi Lý Bạch
=
25
,điểm
=
100
|
+
--
-------------+----------------------+-------------+ -------------------------------------------------- -------------------------------------------------- -------+
2
hàng
TRONG
bộ
(
0,00
giây)
。
6. Xóa trường hợp kích hoạt dữ liệu
6.1 Tạo trình kích hoạt xóa dữ liệu
mysql
>
dấu phân cách
&
mysql
>
tạo nên
cò súng
student_delete_trigger sau
delete
TRÊN
học sinh
vì
mỗi hàng
bắt đầu
chèn
vào trong
student_logs(id,hoạt động,thời gian hoạt động,id hoạt động,tham số hoạt động)
giá trị
(
vô giá trị
,
'
delete
'
,now(),old.id, concat(
'
Xóa dữ liệu trước đó: id=
'
,cũ.id,
'
,tên=
'
,tên.cũ,
'
,tuổi=
'
,tuổi già,
'
,điểm=
'
,cũ.điểm));
kết thúc
;
&
Truy vấn OK,
0
hàng bị ảnh hưởng (
0,87
giây)
6.2 Xem trình kích hoạt
mysql
>
hiển thị các kích hoạt;
->
&
+
--
-------------+--------+----------+-------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------+-------+------------------------+---------- -------------------------------------------------- -------------------------------------------------- ---------+-----------------------------------+---- -------------------+----------------------+-------- ------------+
|
Cò súng
|
Sự kiện
|
Bàn
|
Tuyên bố
|
Thời gian
|
Tạo
|
chế độ sql
|
Định nghĩa
|
bộ ký tự_khách hàng
|
kết nối_đối ...
|
Cơ sở dữ liệu
Đối chiếu
|
+
--
-------------+--------+----------+-------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------+-------+------------------------+---------- -------------------------------------------------- -------------------------------------------------- ---------+-----------------------------------+---- -------------------+----------------------+-------- ------------+
|
sinh viên_chèn_kích_thích
|
CHÈN
|
học sinh
|
bắt đầu
chèn
vào trong
student_logs(id,hoạt động,thời gian hoạt động,id hoạt động,tham số hoạt động)
giá trị
(
vô giá trị
,
'
chèn
'
, now(), new.id, concat("Nội dung dữ liệu được chèn vào là: id
=
",new.id,"tên
=
",new.name,"tuổi
=
",new.age,"điểm
=
",điểm.mới));
kết thúc
|
SAU ĐÓ
|
2023
-
08
-
16
00
:
07
:
46,53
|
CHỈ_ĐẦY_NHÓM_ĐỦ_BỞI, BẢNG_CHUYỂN_NGHIÊM_CHẾ, KHÔNG_CÓ_NGÀY_BẰNG_KHÔNG ... LỖI_VÌ_PHÂN_BẰNG_KHÔNG, KHÔNG_CÓ_ĐẠI_CƠ_CÓ
|
nhảy
-
trợ cấp
người sử dụng
@nhảy
-
tài trợ cho máy chủ
|
utf8mb4
|
utf8mb4_0900_ai_ci
|
utf8mb4_0900_ai_ci
|
|
kích hoạt cập nhật sinh viên
|
CẬP NHẬT
|
học sinh
|
bắt đầu
chèn
vào trong
student_logs(id, hoạt động, thời gian hoạt động,operate_id,operate_params)
giá trị
(
vô giá trị
,
'
cập nhật
'
,now(),new.id,concat(
'
Dữ liệu trước khi cập nhật: id=
'
,cũ.id,
'
,tên=
'
,tên.cũ,
'
,tuổi=
'
,tuổi già,
'
,điểm=
'
,cũ.điểm,
'
|Dữ liệu được cập nhật: id=
'
,mới.id,
'
,tên=
'
,new.name,
'
,tuổi=
'
,thời đại mới,
'
,điểm=
'
,mới.điểm));
kết thúc
|
SAU ĐÓ
|
2023
-
08
-
16
23
:
57
:
34,20
|
CHỈ_ĐẦY_NHÓM_ĐỦ_BỞI, BẢNG_CHUYỂN_NGHIÊM_CHẾ, KHÔNG_CÓ_NGÀY_BẰNG_KHÔNG ... LỖI_VÌ_PHÂN_BẰNG_KHÔNG, KHÔNG_CÓ_ĐẠI_CƠ_CÓ
|
nhảy
-
trợ cấp
người sử dụng
@nhảy
-
tài trợ cho máy chủ
|
utf8mb4
|
utf8mb4_0900_ai_ci
|
utf8mb4_0900_ai_ci
|
|
sinh viên_xóa_kích_thích
|
XÓA BỎ
|
học sinh
|
bắt đầu
chèn
vào trong
student_logs(id,hoạt động,thời gian hoạt động,id hoạt động,tham số hoạt động)
giá trị
(
vô giá trị
,
'
delete
'
,now(),old.id, concat(
'
Xóa dữ liệu trước đó: id=
'
,cũ.id,
'
,tên=
'
,tên.cũ,
'
,tuổi=
'
,tuổi già,
'
,điểm=
'
,cũ.điểm));
kết thúc
|
SAU ĐÓ
|
2023
-
08
-
17
00
:
15
:
46,44
|
CHỈ_ĐẦY_NHÓM_ĐỦ_BỞI, BẢNG_CHUYỂN_NGHIÊM_CHẾ, KHÔNG_CÓ_NGÀY_BẰNG_KHÔNG ... LỖI_VÌ_PHÂN_BẰNG_KHÔNG, KHÔNG_CÓ_ĐẠI_CƠ_CÓ
|
nhảy
-
trợ cấp
người sử dụng
@nhảy
-
tài trợ cho máy chủ
|
utf8mb4
|
utf8mb4_0900_ai_ci
|
utf8mb4_0900_ai_ci
|
+
--
-------------+--------+----------+-------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------+-------+------------------------+---------- -------------------------------------------------- -------------------------------------------------- ---------+-----------------------------------+---- -------------------+----------------------+-------- ------------+
3
hàng
TRONG
bộ
(
0,00
giây)
6.3 Xóa dữ liệu
mysql
>
dấu phân cách; mysql
>
delete
từ
học sinh
Ở đâu
nhận dạng
=
5
; Truy vấn OK,
1
hàng bị ảnh hưởng (
0,70
giây)
6.4 Xem trình kích hoạt xác minh bảng sinh viên và bảng sinh viên_logs
mysql
>
lựa chọn
*
từ
học sinh;
+
--
--+-------+------+-------+
|
nhận dạng
|
tên
|
tuổi
|
điểm
|
+
--
--+-------+------+-------+
|
1
|
Trương Tam
|
18
|
88
|
|
2
|
John Doe
|
21
|
83
|
|
3
|
Vương Vũ
|
24
|
76
|
|
4
|
Triệu Lưu
|
19
|
94
|
+
--
--+-------+------+-------+
4
hàng
TRONG
bộ
(
0,00
giây) mysql
>
lựa chọn
*
từ
nhật ký_sinh_viên;
+
--
-------------+----------------------+-------------+ -------------------------------------------------- -------------------------------------------------- -------+
|
nhận dạng
|
hoạt động
|
thời gian vận hành
|
vận hành_id
|
vận hành_tham số
|
+
--
-------------+----------------------+-------------+ -------------------------------------------------- -------------------------------------------------- -------+
|
1
|
chèn
|
2023
-
08
-
16
00
:
21
:
47
|
5
|
Nội dung dữ liệu được chèn vào là: id
=
5tên
=
tuổi Lý Bạch
=
30điểm
=
100
|
|
2
|
cập nhật
|
2023
-
08
-
16
23
:
58
:
23
|
5
|
Dữ liệu trước khi cập nhật: id
=
5
,tên
=
tuổi Lý Bạch
=
30
,điểm
=
100
|
Dữ liệu cập nhật: id
=
5
,tên
=
tuổi Lý Bạch
=
25
,điểm
=
100
|
|
3
|
delete
|
2023
-
08
-
17
00
:
18
:
06
|
5
|
Xóa dữ liệu trước đó: id
=
5
,tên
=
tuổi Lý Bạch
=
25
,điểm
=
100
|
+
--
-------------+----------------------+-------------+ -------------------------------------------------- -------------------------------------------------- -------+
3
hàng
TRONG
bộ
(
0,00
giây)
。
Cuối cùng, bài viết về Mysql Advanced 8 trigger kết thúc tại đây. Nếu bạn muốn biết thêm về Mysql Advanced 8 trigger, vui lòng tìm kiếm các bài viết về CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ tôi trong tương lai. .
Tôi là một lập trình viên xuất sắc, rất giỏi!