Mysql Practice Book

25
Bài tập MySQL Sách bài tập MySQL AiTi-Aptech “Kiến tạo tương lai” Tài liệu lưu hành nội bộ Trung tâm đào tạo Lập trình viên Quốc tế AiTi-Aptech Page 1 of 25 35/115 Phố Định Công – Hoàng Mai

Transcript of Mysql Practice Book

Bài tập MySQL

Sách bài tập MySQL AiTi-Aptech “Kiến tạo tương lai” Tài liệu lưu hành nội bộ

Trung tâm đào tạo Lập trình viên Quốc tế AiTi-Aptech Page 1 of 25

35/115 Phố Định Công – Hoàng Mai

Sách bài tập MySQL AiTi-Aptech “Kiến tạo tương lai” Tài liệu lưu hành nội bộ

Lời giới thiệu

Sách bài tập do tập thể giáo viên AiTi-Aptech thiết kế và được sử dụng như một phần không thể

tách rời khỏi giáo trình đang học của Aptech Ấn Độ với các học viên đang theo học tại Trung tâm.

Tập sách bài tập này là tài liệu lưu hành nội bộ, chỉ dành cho các học viên theo học tại Trung tâm

đào tạo Lập trình viên Quốc tế AiTi-Aptech. Mọi hình thức sao chép lại nội dung của sách là vi phạm

bản quyền và không tuân thủ Luật Sở hữu trí tuệ của Nhà nước Việt Nam.

AiTi-Aptech luôn mong mỏi tạo dựng một môi trường học tập tốt cho các bạn học viên theo học tại

trung tâm. Mọi ý kiến đóng góp về xây dựng Sách bài tập, cải tiến hệ thống xin gửi mail về

[email protected] hoặc đường dây nóng (04) 6 64 8848. Chúng tôi sẽ ghi nhận và cải

tiến để có thể cung cấp cho các bạn một môi trường học tập ngày một tốt hơn.

“Sự nghiệp tương lai của các bạn là thành công của chúng tôi”

Đội thiết kế Sách bài tập

Việt Nam luôn thiếu Lập trình viên đẳng cấp Quốc tế

Trung tâm đào tạo Lập trình viên Quốc tế AiTi-Aptech Page 3 of 25

35/115 Phố Định Công – Hoàng Mai

ContentsL i gi i thi uờ ớ ệ ............................................................................................................................................................. 3

Ch ng 1 : Gi i thi u, cài đ t và c u hình MySQLươ ớ ệ ặ ấ ................................................................................................... 3

Ch ng 2 : S d ng MySQLươ ử ụ ...................................................................................................................................... 4

Ch ng 3 : Th c hi n Các câu h i v i C S d li uươ ự ệ ỏ ớ ơ ở ữ ệ ................................................................................................ 8

Ch ng 4 : Th c hi n Các câu h i v i C S d li uươ ự ệ ỏ ớ ơ ở ữ ệ .............................................................................................. 13

Ch ng 5 : S d ng Joinươ ử ụ ......................................................................................................................................... 17

Ch ng 6 : S d ng các hàm c b n trong MySQL ươ ử ụ ơ ả ............................................................................................... 18

Ch ng 7 : Qu n lý CSDL MySQLươ ả ............................................................................................................................ 20

Ch ng 8 : Gi i thi u Triggerươ ớ ệ ................................................................................................................................. 22

Sách bài tập MySQL AiTi-Aptech “Kiến tạo tương lai” Tài liệu lưu hành nội bộ

Chương 1 : Giới thiệu, cài đặt và cấu hình MySQL

Khái niệm

1. MySQL là một RDBMS - relational database management system. Vậy RDBMS là gì? Ưu điểm

của MySQL so với các RDBMS khác?

2. Nêu các lợi ích của phần mềm mã nguồn mở.

3. Trang web nào cung cấp bộ cài đặt MySQL?

4. AppServ là phần mềm tự động cài đặt ________________ một cách nhanh chóng và dễ dàng.

5. Những hệ điều hành nào hỗ trợ MySQL?

6. Làm thế nào để khởi động MySQL cùng với hệ điều hành?

Thực hành

1. Cài đặt MySQL trên hệ điều hành Ubuntu.

2. Cài đặt AppServ trên hệ điều hành Windows.

3. Xem thông tin về phiên bản (version) MySQL đã được cài đặt.

4. Trên Windows, cấu hình thư mục chứa các cơ sở dữ liệu của MySQL là C:\MyDatabases.

5. Cài đặt các công cụ có giao diện đồ họa trực quan (GUI Tools) hỗ trợ MySQL.

Gợi ý: tới địa chỉ http://www.mysql.com, nhấn vào link Downloads ở menu đầu trang, tiếp đó tìm

mục tải về GUI Tools.

6. Đổi mật khẩu của tài khoản root thành “hcetpa”. Tạo mới 3 tài khoản với tên truy cập là audience,

james, fantasy.

7. Đặt bảng mã mặc định (default character set) là utf8.

8. Tải về tài liệu tra cứu toàn tập MySQL Reference Manual.

Lưu ý: - Chọn tài liệu phù hợp với phiên bản MySQL đang sử dụng.

- Dùng định dạng CHM là tiện lợi nhất.

Trung tâm đào tạo Lập trình viên Quốc tế AiTi-Aptech Page 5 of 25

35/115 Phố Định Công – Hoàng Mai

Chương 2 : Sử dụng MySQL

Một cơ sở dữ liệu là tập hợp các dữ liệu có tổ chức, quan hệ với nhau và được quản lý bởi một phần mềm gọi là hệ thống quản trị cơ sở dữ liệu.

1. Các khái niệm trong MySQL:

1. Qui định đặt tên:

• Chấp nhận các ký tự sau:

o Các ký tự từ a-z và A-Z

o Số từ 0 -9

o Và các ký tự ‘_’ và ‘$’

• Không chấp nhận những ký tự sau:

o Ký tự ‘.’, ‘/’, ‘\’

• Một tên không thể bắt đầu bằng một số.

• Độ dài tên nhỏ hơn 256 ký tự.

2. Chữ hoa và chữ thường:

• Các từ khóa không phân biệt chữ hoa và chữ thường.

• Tên ( như tên csdl, bảng… ) thì tùy thuộc vào hệ điều hành mà Mysql server được cài . Trên window thì không phân biệt chữ hoa chữ thường , còn trên Unix thì phân biệt chữ hoa, chữ thường.

3. Kiểu dữ liệu:

• Numberic: BIGINT, DOUBLE, DECIMAL, INT, MEDIUMINT, SMALLINT, TINYINT

• String: CHAR, MEDIUMTEXT, LONGTEXT, TEXT

• Date: DATE, DATETIME, TIME, YEAR, TIMESTAMP

Sách bài tập MySQL AiTi-Aptech “Kiến tạo tương lai” Tài liệu lưu hành nội bộ

• Complex: ENUM, SET.

4. Tạo cơ sở dữ liệu:

Cú pháp:

CREATE DATABASE [IF NOT EXISTS] db_name [CHARACTER SET charset] [COLLATE collation];

Ví dụ:

+ CREATE DATABASE db_name;+ CREATE DATABASE IF NOT EXISTS db_name;+ CREATE DATABASE mydb CHARACTER SET utf8 COLLATE tf8_icelandic_ci;

Để xóa Csdl ta dùng cú pháp:DROP DATABASE db_name;

5. Tạo bảng:

Có hai kiểu table: Transaction-safe. Non-Transaction-safe.

Cú pháp:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_option ...]

Table option: là storage engine chọn, mặc định là MyISAM

Ví dụ: CREATE TABLE mytbl

( name CHAR(20), age INT NOT NULL, weight INT, sex ENUM('F','M'));Để xem cấu trúc bảng ta sử dụng cú pháp:

DESCRIBE table [column]

6. Các loại Khóa:• Primary key: Là một trường trong bảng mà được định nghĩa duy nhất• Composite key: là primary key mà có nhiều hơn một trường dùng làm khóa.• Foreign key: Là khóa trong một bảng liên kết với Primary key trong bảng khác.

Trung tâm đào tạo Lập trình viên Quốc tế AiTi-Aptech Page 7 of 25

35/115 Phố Định Công – Hoàng Mai

Bài tập:

Bài 1: Tạo csdl Product_Sales để lưu trữ thông tin sản phẩm gồm hai bảng:

Stock_Details:Field Name Data typeProduct_Code INT(4)Product_Name CHAR(15)Description TEXTCost Price DECIMAL(8,2)Date of Manufacure Date

Sale_Details:Field Name Data typeProduct_Code INT(4)Selling Price Decimal(8,2)Qty Int(4)Units Sold Int(4)Month SET(‘Jan’,’Feb’,’Mar’,’Apr’,’May’,’Jun’,’Jul’,

’Aug’,’Sep’,’Oct’,’Nov’,’Dec’)Location Text

Chương 3 : Thực hiện Các câu hỏi với Cơ Sở dữ liệu

Các câu lệnh SQL được sử dụng để sử lý cơ sở dữ liệu. Bài này giới thiệu các bạn các câu lệnh cho phép xem và thay đổi cấu trúc cơ sở dữ liệu, nhận dữ liệu từ bảng, thay đổi cấu trúc bảng, xóa bảng.

1. Xem và thay đổi cấu trúc Cơ sở dữ liệu trên hệ thống files:1. Xem danh sách các csdl:

Show Databases;2. Xem các csdl mà có tên csdl chứa một số ký tự xác định:

Show Databases [like clause]3. Xem danh sách các bảng trong csdl:

Show Table [From database_name] [like clause]4. Xem danh sách các trường trong một bảng:

Show Column From table_name [From database_name] [like clause]5. Xem list các index trong bảng:

Show Index From table_name [From database_name]6. Xem trang thái Server:

Show Status;7. Xem các biến hệ thống:

Show Variables [Like clause];

Sách bài tập MySQL AiTi-Aptech “Kiến tạo tương lai” Tài liệu lưu hành nội bộ

8. Xem danh sách các thread đang chạy:Show [Full] ProcessList;

9. Xem các quyền được gán cho một người sử dụng:Show Grants For user;

2. Thay đổi cấu trúc CSDL:1. Thay đổi cấu trúc của CSDL:

ALTER {DATABASE | SCHEMA} [db_name] alter_specification [, alter_specification] ...

Ví dụ: thay đổi bộ ký tự của CSDL:ALTER DATABASE TEST DEFAULT CHARACTER SET swe7;

2. Lấy dữ liệu thông qua sử dụng SELECT, FROM, DISTINCT và mệnh đề WHERE:• Đưa dữ liệu vào trong bảng:

INSERT INTO table_name VALUES(value1,value2…);• Lấy dữ liệu trong csdl ra:

Select [*] FROM table_name;• Lấy dữ liệu trong csdl ra và loại các dữ liệu trùng lắp:

SELECT DISTINCT column_name FROM table_name;• Có thể sử dụng câu lệnh SELECT để xem dữ liệu của một số trường trong bảng:

SELECT column_name1, column_name2 FROM table_name;• Có thể kết hợp các phép tính toán trong quá trình lấy dữ liệu:

Ví dụ:Select 1+1;Select GROSS_SAL +1000 FROM salary_details;

• Kết hợp mệnh đề WHERE để lấy lấy ra dữ liệu theo điều kiện:SELECT * FROM table_name WHERE condition;VD: SELECT * FROM emp_salary WHERE basic_salary >2500;

3. Thay đổi cấu trúc của bảng sử dụng lệnh ALTER:

ALTER [IGNORE] TABLE tbl_name alter_spec[, alter_spec…]• Thêm một cột vào trong bảng:

ALTER TABLE table_name ADD [COLUMN] create_definition [FIRST ALTER column_name]

• Thêm index vào bảng:ALTER TABLE table_name ADD INDEX [index_name](index_column_name…)

• Thêm khóa chính vào trong bảng:ALTER TABLE table_name ADD PRIMARY KEY(index_column_name…)

• Thay đổi trường sử dụng cú pháp:ALTER TABLE table_name MODIFY [COLUMN] create_defination

• Xóa một cột trong bảng:ALTER TABLE table_name DROP [COLUMN] column_name;

Trung tâm đào tạo Lập trình viên Quốc tế AiTi-Aptech Page 9 of 25

35/115 Phố Định Công – Hoàng Mai

• Xóa khóa chính trong bảng:ALTER TABLE table_name DROP PRIMARY KEY;

• Thay đổi tên bảng:ALTER TABLE table_name RENAME [as] new_table_name;

4. Xóa bảng trong CSDL:

DROP TABLE [IF EXIST] table_name[table_name1,…] RESTRICT | CASCADE;

Bài tập:Bài 1: tạo cơ sở dữ liệu tên Computer_Course.Tạo bảng Course_Table với câu trúc như sau:

Field Name Data TypeCourse_name Varchar(20)Duration Int(5)Start_Date DateFees Decimal(5,2)

• Xem danh sách các bộ ký tự hỗ trợ• Sửa character set của cơ sở dữ liệu

Bài 2: Tạo csdl ten Product_Sales. Tạo bảng Stock có cấu trúc:

Field Name Data TypeProduct_Code Int(4)Product_Name Char(15)Description TextCost_Price Decimal(8,2)

Thêm các bản ghi sau vào bảng trên:Product_Code Product_Name Description Cost_Price101 Bags Leather Bags 150102 Books Notepads 10103 Pens Fine Tip Pens 20

• Hiển thị tất cả các bản ghi của bảng Product_Sales.• Hiển thi Product_Code, Product_Name, và Description trong bảng.• Hiển thị các bản ghi có cost_price nhỏ hơn 25.• Hiển thị các bản ghi có Product_Name = “Books”• Thêm một trường Quantity vào bảng.• Thêm Primary key là trường Product_Code.• Thay tên bảng thành Product_Details• Xóa trường Description trong bảng.

Sách bài tập MySQL AiTi-Aptech “Kiến tạo tương lai” Tài liệu lưu hành nội bộ

Chương 4 : Thực hiện Các câu hỏi với Cơ Sở dữ liệu

Trong bài này chúng ta tiếp tục thực hiện các câu lệnh thay đổi cấu trúc database, table và các thao tác với bảng như thêm, sửa, xóa, cập nhật… dữ liệu trên bảng.

I. Định nghĩa một khóa: Khóa là những trường xác định duy nhất giúp ta phân biệt bản ghi này với bản ghi khác:

• Primary key:o Luôn luôn có giá trị và không nên chứa giá trị null.o Là duy nhất cho mỗi bản ghi.

Cú pháp: PRIMARY KEY(fieldname)Để thay đổi kháo chính như không được null và auto_increment thì sử dụng câu lệnh alter:

Ví dụ: ALTER TABLE EMP_DETAILS MODIFY E_ID INT(3) NOT NULL PRIMARY KEY AUTO_INCREMENT

• Foreign key:ALTER TABLE tbl_name ADD [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col_name, ...) [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}] [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]

• Tạo chỉ mục (index);Chỉ mục giúp ta truy xuất dữ liệu trong csdl nhanh hơn, Mysql cho phép tạo tới 32 chỉ mục trên một bảng:

CREATE INDEX index_name ON table_name (column1,column2, …);

II. Thao tác với bảng:• Thêm dữ liệu vào bảng:

INSERT INTO table_name VALUES(value1,value2,…);• Thay đổi dữ liệu trong bảng:

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]

• Thay thế dữ liệu trong bảng:REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] VALUES ({expr | DEFAULT},...),(...),...

Trung tâm đào tạo Lập trình viên Quốc tế AiTi-Aptech Page 11 of 25

35/115 Phố Định Công – Hoàng Mai

• Xóa dữ liệu trong bảng:DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]

• Sử dụng ORDER BY:o Mệnh đề ORDER BY giúp chúng ta sắp xếp lại dữ liệu trả về theo một số trường nào đó:

ORDER BY column[ASC|DESC] [, column2[ASC|DESC],…]o Mệnh đề GROUP BY: Trong quá trình tính toán dữ liệu , người sử dụng muốn tính toán trên

từng nhóm dữ liệu giống nhau thì ta sử dụng GROUP BY:GROUP BY column [,column2…]

Bài tập:

Bài 1: Sử dụng tiếp Cơ sở dữ liệu ở bài 3.• Tạo khóa chính là trường Product_Code trong bảng Sales_Detail.• Tạo index tên là IND1 trên trường Date_Of_Manufacture trong bảng Stock_Details.• Thêm các bản ghi sau vào bảng Sales_Details:

Product_Code Selling Price Qty Unit_Soil Month Location101 200 1500 1450 Jan California102 100 5000 3000 Jan New York103 20 2900 2000 Jan Los Angeles104 56 120 9 Jan Sydney105 200 1000 500 Jan New York

• Thêm các bản ghi sau vào bảng Stock_Details:Product_Code Product_Na

meDescription Cost_Price Date_Of_Manufacture

101 Bags Leatther Bags 150 2003-10-05102 Books Notepads 10 2003-12-05103 Pens Fine Tip Pens 20 2003-01-09104 Staplers Staplers 40 2003-10-05105 Clips Paper Clips 100 2003-10-05

• Thay thế bản ghi sau trong bảng Sales_Details:Product_Code Selling Price Qty Unit_Soil Month Location103 20 2900 2000 Jan Los Angeles

• Sửa bản ghi trong Sales_Details:Product_Code Selling Price Qty Unit_Soil Month Location103 20 2900 2000 Jan Los Angeles

Sách bài tập MySQL AiTi-Aptech “Kiến tạo tương lai” Tài liệu lưu hành nội bộ

• Xóa bản ghi trong bảng Sales_Details;

Product_Code Selling Price Qty Unit_Soil Month Location104 56 120 9 Jan Sydney

• Hiển thị bản ghi trong bảng Stock_Details được nhóm theo trường Date_Of_Manufactore.

• Sắp xếp dữ liệu trong bảng Stock_Details theo trương Date_Of_Manufactore.

Chương 5 : Sử dụng Join

- Việc join các bảng là quá trình kết hợp 2 hoặc nhiều bản ghi của các bảng khác nhau trong cùng một CSDL thành một kết quả hỗn hợp

- Lợi thế của việc sử dụng join :

o Dễ dàng thao tác với dữ liệu

o Tăng tốc độ truy xuất

o Giảm thiểu dữ liệu thừa

- Có thể Join các bảng với nhau bằng điều kiện WHERE sử dụng với câu SELECT hoặc sử dụng từ khóa JOIN

- Các kiểu JOIN như sau :

o Equi-Join: So sánh giữa hai trường có cùng giá trị

o Inner Join: Tạo ra một bảng ảo bằng cách kết hợp các trường thỏa mãn câu truy vấn cho cả hai bảng

o Outer- Join : Sẽ hiển thị cả những bản ghi không trùng giá trị giữa hai bảng

Left Outer Join : Hiển thị tất cả các bản ghi trong bảng được chỉ ra ở bên trái toán tử Outer Join, bất chấp việc các giá trị có trùng với bảng ở bên phải hay không

Right Outer Join : Hiển thị tất cả các bản ghi trong bảng được chỉ ra ở bên phải toán tử Outer Join, bất chấp việc các giá trị có trùng với bảng ở bên trái hay không

Trung tâm đào tạo Lập trình viên Quốc tế AiTi-Aptech Page 13 of 25

35/115 Phố Định Công – Hoàng Mai

Full Outer Join : Hiển thị tất cả các bản ghi trong tất cả các bảng được lấy sau từ khóa FROM

o Self-Join : Dùng để join hoặc so sánh một bảng với chính nó

Chương 6 : Sử dụng các hàm cơ bản trong MySQL

- Có 2 cách để sử dụng hàm trong các câu truy vấn SQL :

o Sử dụng tại tên trường

o Sử dụng trong câu điều kiện WHERE

- Từ khóa GROUP BY được sử dụng với các hàm nhằm tập hợp các dự liễu theo các điều kiện nhất định

- Các hàm toán học được dùng để tính toán trên các kiểu dữ liệu là số.

o Vd : COS, SIN, TAN

- Các hàm toán học sẽ trả về giá trị NULL nếu có lỗi xảy ra trong quá trình truy vấn

- Các hàm xử lý chuỗi được thực hiện trên các kiểu dữ liệu là ký tự.

o Vd : ASCII, LOWER

- Các hàm xử lý ngày tháng được dùng để tính tóan trên các kiểu dữ liệu về ngày tháng

o Vd: ADDDATE,YEAR, DATEDIFF

- Các hàm hệ thống dùng để lấy thông tin về hệ thống :

o Vd : BENCHMARK, VERSION

Bài tập thực hành cho 2 chương 10, 11:

1.Tạo cơ sở dữ liệu HumanResources gồm các bảng sau :

a.Bảng Employee

Sách bài tập MySQL AiTi-Aptech “Kiến tạo tương lai” Tài liệu lưu hành nội bộ

Tên trường Mô tả

Emp_Id (int, auto increment) Id Nhân viên

First_Name (varchar 20) Tên nhân viên

Last_Name (varchar 30) Họ nhân viên

Age (int) Tuổi nhân viên

Dept_Id (int, references Department(Dept_Id )) Id Phòng ban

BasicSal (int) Lương cơ bản

b. Bảng Department

Tên trường Mô tả

Dept_Id (int, auto increment) Id Phòng ban

Name (varchar 20) Tên Phòng ban

DeptHeadId (int) Id Trưởng phòng

c. Bảng Project

Tên trường Mô tả

Pro_id (int, auto increment ) Id dự án

Dept_Id (int, references Department(Dept_Id )) Tên phòng làm dự án

Pro_Name (varchar 50) Tên dự án

Start_Date (datetime) Ngày bắt đầu

End_Date (datetime) Ngày kết thúc

2. Tạo quan hệ và nhập dữ liệu cho các bảng, mỗi bảng 10 bản ghi

3. Sử dụng join và các hàm cơ bản để thực hiện các truy vấn sau

a. Hiển thị tên nhân viên trong mỗi phòng

b. Hiển thị tên nhân viên cho mỗi dự án

Trung tâm đào tạo Lập trình viên Quốc tế AiTi-Aptech Page 15 of 25

35/115 Phố Định Công – Hoàng Mai

c. Tìm xem phòng nào có nhân viên hưởng lương cao nhất

d. Tìm tên các dự án nào có nhiều nhân viên thực hiện nhất

e. Tìm tên các dự án nào có mức trung bình lương của các nhân viên thấp nhất

f. Hiển thị tất cả các trưởng phòng và tên phòng tương ứng

g. Đếm số ngày thực thi của mỗi dự án

h.Hiển thị số tuổi trung bình của tất cả các nhân viên

i. Hiển thị số tuổi trung bình của nhân viên mỗi phòng

k. Ghép họ và tên mỗi nhân viên để hiển thị tên hoàn chỉnh

l. Tìm xem phòng nào đã thực hiện nhiều dự án nhất

m. Thống kê số ngày thực thi dự án của mỗi nhân viên

n. Thống kê mức lương trung bình của các trưởng phòng

Chương 7 : Quản lý CSDL MySQL

- Các tài khoản và quyền của người sử dụng được lưu trữ dưới dạng bảng trong một cơ sở dữ liệu tên là mysql thuộc MySQL RDBMS

- Một người dùng mới có thể được tạo bằng 2 cách :

o Dùng lệnh GRANT

o Dùng câu INSERT

- Người dùng gốc phải có quyền INSERT và RELOAD để tạo người dùng mới

- Người dùng gốc nên có mật khẩu để tránh các truy xuất không mong muốn tới nó

- Các cấp phân quyền đối với tài khoản trong MySQL gồm có :

o Mức toàn cục – Global level

o Mức cơ sở dữ liệu – Database level

o Mức bảng – Table level

o Mức trường – Column level

Sách bài tập MySQL AiTi-Aptech “Kiến tạo tương lai” Tài liệu lưu hành nội bộ

- Từ khóa GRANT OPTION dùng để trao quyền cho người dùng

- Quản trị hệ thống sử dụng các lệnh GRANT và REVOKE để quản lý các tài khoản người dùng.

- Để thay đổi quyền hạn, sử dụng lệnh GRANT với các quyền tương ứng.

- Để xóamột người dùng cần làm các bước sau

o Kiểm tra các quyền của người dùng

o Xóa các quyền của người dùng bằng lệnh REVOKE

o Xóa người dùng

-

Bài tập thực hành chương 12

// Sử dụng cơ sở dữ liệu trong bài tập chương 10, 11

1. Tạo mới người dùng có tên là director để sử dụng với localhost

Cấp tất cả các quyền có thể cho người dùng này

2. Tạo mới người dùng có tên là manager

Cấp cho người dùng các quyền cần thiết để có thể truy vấn và thêm mới dữ liệu nhưng không thể xóa dữ liệu và chạy các stored procedures

Cấp cho người dùng này quyền cần thiết để chỉ có thể thêm mới, sửa và xóa dữ liệu thuộc các trường Start_Date, End_Date trong bảng Project

3. Tạo mới người dùng có tên là employee

Cấp cho người dùng các quyền cần thiết để chỉ có thể thêm mới, sửa và xóa dữ liệu trên bảng Employee, các bảng khác chỉ có quyền xem

4. Hiển thị các quyền của người dùng employee

Thay đổi quyền của người dùng này để không thể tiếp tục xóa dữ liệu trên bảng Employee

5. Thực hiện các bước để xóa tài khoản người dùng manager trong CSDL mysql

Trung tâm đào tạo Lập trình viên Quốc tế AiTi-Aptech Page 17 of 25

35/115 Phố Định Công – Hoàng Mai

Chương 8 : Giới thiệu Trigger

WHAT IS TRIGGER?

In a database, a trigger is a set of SQL Statements that is executed automatically when a specific operation occurs (for example, an Update, Delete or Insert events). A trigger consists of an event and an action, and can be executed before or after an event.

A trigger usually created on one table, but can access other tables.

WHY USE TRIGGERS?

Because triggers can automate a lot of stuff that you may have been doing by hand before, it can be used to:

• Enfoce more complex checks on data.

• Perform multiple actions in response to one data modification event and in turn we can also create a single trigger for multiple data modification events. Eg : Backup and replication

• Preserve data integrity by checking on or changing data in a consistent manner.

• Maintain the integrity of one table that might rely on another table. For example, if TableA references TableB and a value from TableB gets deleted, you could have a trigger setup to handle the data in TableA…

HOW TO USE TRIGGER?

Before create a new trigger, we need to understand something as rules:

• A trigger is a named database object.

• A trigger must be associated with a table

• A trigger will be activated when a particular event occurs for the table, and it can only be executed AFTER or BEFORE a insert, update or delete query.

• A trigger is a set of SQL Statements.

Now it's time to start building a trigger.

Notes that, because a trigger is a “SQL” statement in MySQL, thus you can execute these “SQL” in any MySQL admin environment such as PHPMyAdmin, or you can executed them by using PHP function mysql_query().

a . Creating new trigger

Sách bài tập MySQL AiTi-Aptech “Kiến tạo tương lai” Tài liệu lưu hành nội bộ

To create a new trigger, we use CREATE TRIGGER statements:

CREATE

[DEFINER = { user | CURRENT_USER }]

TRIGGER trigger_name trigger_time trigger_event

ON table_name FOR EACH ROW trigger_statement

Where:

• DEFINER clause determines the security context to be used when checking access privileges at trigger activation time. This clause is optional and we can ignore it.

• trigger_name: name of a trigger.

• trigger_time: the trigger action time. It can be BEFORE or AFTER to indicate that the trigger activates before or after each row to be modified.

• trigger_event: indicates the kind of statement that activates the trigger. It can be one of the following:

o INSERT: The trigger is activated whenever a new row is inserted into the table; for example, through INSERT, LOAD DATA, and REPLACE statements.

o UPDATE: The trigger is activated whenever a row is modified; for example, through UPDATE statements.

o DELETE: The trigger is activated whenever a row is deleted from the table; for example, through DELETE and REPLACE statements. However, DROP TABLE and TRUNCATE statements on the table do not activate this trigger, because they do not use DELETE.

• table_name: Name of the table that associated with the trigger.

• trigger_statement is the statement to execute when the trigger activates. If you want to execute multiple statements, use the BEGIN ... END compound statement construct.

To demonstrate how MySQL triggers work, we’ll give an example. Firstly, we should create new database with 2 or 3 tables:

CREATE DATABASE `cms` ;

CREATE TABLE `cms`.`category` (

`cat_id` INT NOT NULL AUTO_INCREMENT ,

`cat_name` VARCHAR( 200 ) NOT NULL ,

`items` INT NOT NULL ,

Trung tâm đào tạo Lập trình viên Quốc tế AiTi-Aptech Page 19 of 25

35/115 Phố Định Công – Hoàng Mai

PRIMARY KEY ( `cat_id` )

) ENGINE = MYISAM

CREATE TABLE `cms`.`news` (

`news_id` INT NOT NULL AUTO_INCREMENT ,

`cat_id` INT NOT NULL ,

`title` VARCHAR( 200 ) NOT NULL ,

`content` TEXT NOT NULL ,

PRIMARY KEY ( `news_id` )

) ENGINE = MYISAM

Now we can create new trigger names AutoDelete associated with table category. This trigger will listening for the deletion from category table, and then delete all rows in the table news that have the same cat_id with the deleted row in the table category.

CREATE TRIGGER AutoDelete AFTER DELETE ON category FOR EACH ROW

DELETE FROM news where cat_id= Old.cat_id

Now you can insert some record into 2 tables above. If you delete a row on table category by using SQL Delete, it also delete all records in the table news that related with deleted rows in table category.

In the example above, we use a reference variable, Old (Old.cat_id), to refer to a old record that was deleted in the user DELETE statement.

b. Listing, deleting and changing a trigger

Getting a list of triggers

To get a list of triggers on your database, you can use SQL Statement SHOW TRIGGERS. This will return a list of triggers with all of their attributes, including the statement and timing.

Deleting a trigger

To delete a trigger, you can use DROP TRIGGER statement.

Syntax:

DROP TRIGGER trigger name;

It seems the DROP IF EXISTS statement doesn't work for triggers, like it does for stored procedures and tables. You also can't use the ALTER statement on triggers like you can in Microsoft SQL.

Sách bài tập MySQL AiTi-Aptech “Kiến tạo tương lai” Tài liệu lưu hành nội bộ

Changing a trigger

If you want to modify a trigger, you must delete it first, and then, re-create it. For example,

DROP TRIGGER AutoDelete;

CREATE TRIGGER AutoDelete BEFORE DELETE ON category FOR EACH ROW

DELETE FROM news where cat_id= Old.cat_id

c. TRIGGER STATEMENTS

In this section, we will discuss something about statements in a trigger. As you known the syntax of create trigger statement:

CREATE

[DEFINER = { user | CURRENT_USER }]

TRIGGER trigger_name trigger_time trigger_event

ON table_name FOR EACH ROW trigger_statement

In this statement, trigger_statement is the statement to execute when the trigger activates.

Before MySQL 5.0.10, triggers cannot contain direct references to tables by name. But now, we can use the aliases OLD and NEW to refer a column in the table. In this situation, OLD.col_name refers to a column of an existing row before it is updated or deleted, and NEW.col_name refers to the column of a new row to be inserted or an existing row after it is updated. The example above demonstrates how to use the OLD alias:

CREATE TRIGGER AutoDelete BEFORE DELETE ON category FOR EACH ROW

DELETE FROM news where cat_id= Old.cat_id

If you want to execute multiple statements, we can put them into BEGIN… END statement. Each statement in the list must be terminated by a semicolon (;). This method gives a way to send statement strings from the client.

The follow example demonstrates how to create a trigger with complex trigger statement:

CREATE TRIGGER UpdateSalary BEFORE UPDATE ON Employee

FOR EACH ROW

BEGIN

IF NEW.Salary<=500 THEN

SET NEW.Salary=1000;

ELSEIF NEW.Salary>500 THEN

Trung tâm đào tạo Lập trình viên Quốc tế AiTi-Aptech Page 21 of 25

35/115 Phố Định Công – Hoàng Mai

SET NEW.Salary=1500;

END IF;

END.

Sách bài tập MySQL AiTi-Aptech “Kiến tạo tương lai” Tài liệu lưu hành nội bộ

SUMMARY

Trigger is a set of SQL Statements that is executed automatically when a specific operation occurs.

To create a new trigger, we use CREATE TRIGGER statements:

CREATE

[DEFINER = { user | CURRENT_USER }]

TRIGGER trigger_name trigger_time trigger_event

ON table_name FOR EACH ROW trigger_statement

Some other task with triggers:

- To view a list of triggers in the database, use syntax:

SHOW TRIGGERS

- To delete a trigger, use syntax

DROP TRIGGER trigger name;

- To update or modify a trigger, delete a trigger, then re-create a trigger with the same name.

Trung tâm đào tạo Lập trình viên Quốc tế AiTi-Aptech Page 23 of 25

35/115 Phố Định Công – Hoàng Mai

MYSQL INFROMATION SCHEMA

Introduction

My SQL Information Schema is a special database in MySQL named information_schema. This database stores all of information about all the other databases in a MySQL server. Inside INFORMATION_SCHEMA database, there are several read-only tables so that you can read the contents of these tables, but you can not insert, update or modify them.

If you use PHP My Admin, you can open this database, and view a list of tables:

We can retrieves information from this database using

SQL Statements. For example, to list all information about tables, we can use this SQL:

SELECT * from information_schema.tables

Sách bài tập MySQL AiTi-Aptech “Kiến tạo tương lai” Tài liệu lưu hành nội bộ

Trung tâm đào tạo Lập trình viên Quốc tế AiTi-Aptech Page 25 of 25

35/115 Phố Định Công – Hoàng Mai