Tạo và xóa bảng dữ liệu: a Tạo bảng dữ liệu: - phpMyAdmin cho phép người dùng tạo các bảng Table trong CSDL như sau: Hình 1.12: Thao tác tạo bảng dữ liệu.. - Các câu lệnh SQL chia làm 2
Trang 1LẬP TRÌNH WEB
Bài giảng
Trang 3LẬP TRÌNH WEB
Đoàn Phan Thái
dpthai@btu.edu.vn
Trang 4CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL
1.1 Giới thiệu:
- MySQL là hệ quản trị cơ sở dữ liệu (Database Management System - DBMS), được xây dựng bởi David Axmark và Michael Monty Widenius năm 1995 MySQL còn được biết đến như là một hệ quản trị cơ sở dữ liệu quan hệ (Relational Database Management System -RDBMS) mã nguồn mở nổi tiếng thế giới
- Hiện nay, MySQL được phát triển, phân phối và hỗ trợ bởi công ty Oracle
- Một số đặc điểm nổi bật của MySQL:
+ Quản trị dữ liệu theo mô hình Client/Server
+ Mã nguồn mở và không cần trả phí sử dụng
+ Hoạt động trên nhiều hệ điều hành và với nhiều ngôn ngữ (PHP, C/C++, Java…) + Hỗ trợ ngôn ngữ truy vấn có cấu trúc (Structured Query Language - SQL)
+ Dễ sử dụng, tốc độ nhanh và có thể làm việc với bộ dữ liệu lớn
+ Đảm bảo an toàn bảo mật với cơ chế phân quyền người dùng
số kiểu dữ liệu là thường xuyên sử dụng và các kiểu còn lại ít thông dụng hơn
Bảng 1: Các kiểu dữ liệu thông dụng
Dữ liệu kiểu số (Numeric Data Types)
TINYINT [(M)]
Kiểu số nguyên có giá trị từ -128 127 hay từ
0 255
Giá trị M chỉ số bit kích thước, mặc định M=1
BOOL Tương tự như kiểu TINYINT(1), số 0 là false
Trang 5INT [(M)] Kiểu số nguyên có giá trị từ -2,147,483,648
2,147,483,647 hay từ 0 4,294,967,295
FLOAT [(M,D)]
Kiểu số thập phân có độ chính xác đơn (khoảng
7 chữ số thập phân) M là tổng số chữ số và D
là số chữ số sau dấu thập phân
DOUBLE [(M,D)] Kiểu số thập phân có độ chính xác kép (khoảng
tự trắng một cách tự động
VARCHAR(M)
Kiểu chuỗi có độ dài thay đổi, tối đa 65,535 ký
tự Nếu giá trị thật kiểu Varchar không bằng với
độ dài khai báo M thì lưu trữ đúng theo độ dài chuỗi thực tế Khai báo M là bắt buộc khi sử dụng kiểu Varchar
TEXT [(M)]
Kiểu chuỗi ký tự (Character Strings), chứa tối
đa 65,535 ký tự, thường dùng khi chứa lượng lớn dữ liệu ký tự
BLOB [(M)]
(Binary Large Objects)
Kiểu chuỗi nhị phân (Binary Strings), chứa tối
đa 65,535 bytes, thường dùng khi chứa lượng lớn dữ liệu nhị phân (hình ảnh, tập tin thực thi, phim ảnh, )
ENUM('value1','value2', ) Kiểu dữ liệu chứa danh sách gồm các giá trị
kiểu chuỗi, danh sách chứa tối đa 65,535 giá trị
Dữ liệu kiểu ngày giờ (Date and Time Types)
DATE
Kiểu ngày theo định dạng YYYY-MM-DD, có giá trị từ 1000-01-01 9999-12-31 Cho phép gán giá trị kiểu số và kiểu chuỗi sang kiểu ngày
YEAR[(M)]
Giá trị thời gian là năm theo dạng 2/4 chữ số Ở định dạng 2 chữ số: 70 69, (nghĩa là 1970
2069), ở định dạng 4 chữ số: 1901 2155
Trang 61.3 Quản lý cơ sở dữ liệu với phpMyAdmin:
a) Kích hoạt máy chủ ảo:
- Khởi động ứng dụng XAMPP, chọn START để kích hoạt dịch vụ Apache và MySQL
Hình 1.1: Thao tác kích hoạt dịch vụ Apache và MySQL
b) Mở trang quản trị phpMyAdmin:
- Nhập vào trình duyệt địa chỉ: http://localhost/phpmyadmin
Hình 1.2: Giao diện phpMyAdmin
Chọn ngôn ngữ
Chọn kích thước phông chữ
1
2
Trang 71.3.1 Thao tác với cơ sở dữ liệu:
1.3.1.1 Tạo và xóa cơ sở dữ liệu:
a) Tạo cơ sở dữ liệu:
- phpMyAdmin là công cụ quản trị MySQL với giao diện đồ họa thân thiện và dễ dùng Các thao tác tạo CSDL như sau:
Hình 1.3: Thao tác tạo cơ sở dữ liệu
- Nếu CSDL được tạo thành công sẽ xuất hiện thông báo cùng với mã SQL
Hình 1.4: Thông báo tạo cơ sở dữ liệu thành công
- CSDL vừa tạo sẽ có các thông số quan trọng để phục vụ kết nối sau này:
Trang 8b) Xóa cơ sở dữ liệu:
- Nếu không cần sử dụng CSDL nữa, người dùng có thể xóa chúng để giảm không gian lưu trữ trên máy chủ
Hình 1.5: Thao tác xóa CSDL
- Người dùng cần xác nhận trước khi xóa CSDL:
Hình 1.6: Thông báo xác nhận xóa CSDL
- Người dùng sẽ nhận được thông báo xóa CSDL thành công
Hình 1.7: Thông báo xóa CSDL thành công
1.3.1.2 Sao lưu và phục hồi cơ sở dữ liệu:
a) Sao lưu cơ sở dữ liệu:
- Trong quá trình làm việc, để bảo vệ CSDL tránh các sự cố không mong muốn, người dùng cần thường xuyên sao lưu CSDL qua chức năng Export
1
2
3
4
Trang 9Hình 1.8: Thao tác sao lưu CSDL theo định dạng SQL
Trang 10b) Phục hồi cơ sở dữ liệu:
- Khi xảy ra sự cố làm hư hỏng dữ liệu, phpMyAdmin cho phép người dùng phục hồi dữ liệu đã sao lưu qua chức năng Import
Trang 11- Nếu phục hồi CSDL thành công thì sẽ xuất hiện thông báo đến người dùng:
Hình 1.11: Thông báo phục hồi CSDL thành công
1.3.2 Thao tác với bảng dữ liệu:
1.3.2.1 Tạo và xóa bảng dữ liệu:
a) Tạo bảng dữ liệu:
- phpMyAdmin cho phép người dùng tạo các bảng (Table) trong CSDL như sau:
Hình 1.12: Thao tác tạo bảng dữ liệu
- Bảng dữ liệu mới tạo chưa có trường dữ liệu Các thao tác tạo trường dữ liệu như sau:
Trang 12Hình 1.13: Thao tác tạo các trường dữ liệu của bảng
- Bảng dữ liệu mới được tạo thành công như sau:
Hình 1.14: Thông tin của bảng dữ liệu được tạo thành công
1
2
3
Tạo khóa chính Tạo khóa ngoại
Trường làm khóa chính
Trường làm khóa ngoại
Trang 13b) Xóa bảng dữ liệu:
- Khi không còn sử dụng các bảng dữ liệu thì người dùng có thể xóa đi
Hình 1.15: Thao tác xóa bảng dữ liệu
- Hộp thoại xác nhận trước khi xóa bảng:
Hình 1.16: Thông báo xác nhận xóa bảng
1.3.2.2 Quan hệ giữa các bảng dữ liệu:
- phpMyAdmin cung cấp chức năng Designer cho phép người dùng tạo quan hệ giữa các bảng dữ liệu Các thao tác tạo quan hệ ràng buộc khóa chính, khóa ngoại giữa các bảng:
Trang 14Hình 1.17: Thao tác tạo quan hệ giữa các bảng
- Ý nghĩa các lựa chọn khi tạo khóa ngoại:
+ CASCADE: Khi Delete/Update dữ liệu ở bảng cha (Parent Table) thì sẽ tự động
Delete/Update dữ liệu ở bảng con (Child Table)
+ SET NULL: Khi Delete/Update dữ liệu ở bảng cha thì sẽ tự động thiết lập NULL cho
bảng con Nếu khai báo trường dữ liệu của bảng con là NOT NULL thì không thể lựa chọn
SET NULL
+ RESTRICT: Không cho phép Delete/Update dữ liệu ở bảng cha nếu bảng con có dữ
liệu tương ứng
+ NO ACTION: Tương tự như RESTRICT
1.3.2.3 Thêm, xóa và sửa dữ liệu:
a) Thêm dữ liệu vào bảng:
- Người dùng cần thêm dữ liệu vào bảng chứa khóa chính rồi mới đến bảng chứa khóa
Trang 15b) Sửa dữ liệu trong bảng:
- Khi cần sửa dữ liệu, người dùng cần kiểm tra khóa ràng buộc dữ liệu
Hình 1.19: Thao tác sửa dữ liệu trong bảng
c) Xóa dữ liệu trong bảng:
- Khi cần xóa dữ liệu, người dùng cần kiểm tra khóa ràng buộc dữ liệu
Trang 16Hình 1.20: Thao tác xóa dữ liệu trong bảng
- Người dùng cần xác nhận trước khi xóa dữ liệu:
Hình 1.21: Thông báo xác nhận xóa dữ liệu
1.3.2.4 Thay đổi cấu trúc bảng dữ liệu:
- Sau khi tạo bảng và các trường dữ liệu, người dùng có thể chỉnh sửa, thêm bớt các trường dữ liệu đã tạo
1
2
3
Trang 17Hình 1.22: Thao tác chỉnh sửa trường dữ liệu
1.3.2.5 Sao chép, di chuyển và đổi tên bảng dữ liệu:
- Thẻ Operations cho phép thực hiện các thao tác sao chép, di chuyển và đổi tên bảng dữ
Trang 18Hình 1.23: Các chức năng trong thẻ Operations
1.4 Câu lệnh SQL trong MySQL:
- SQL (Structured Query Language) là ngôn ngữ truy vấn có cấu trúc, tuân theo chuẩn của ANSI (American National Standards Institute - Viện tiêu chuẩn quốc gia Hoa kỳ) để phục
vụ các hệ quản trị cơ sở dữ liệu quan hệ
- Các câu lệnh SQL chia làm 2 nhóm chính:
+ Ngôn ngữ định nghĩa dữ liệu (Data Definition Language - DDL): Tập hợp các lệnh SQL (Create, Drop, Alter…) để tạo cấu trúc cho cơ sở dữ liệu như Table, Query, View… + Ngôn ngữ thao tác dữ liệu (Data Manipulation Language - DML): Tập hợp các lệnh SQL (Select, Insert, Delete, Update,…) để thao tác dữ liệu
- MySQL là một trong số các sản phẩm cơ sở dữ liệu quan hệ hỗ trợ tốt ngôn ngữ SQL để tương tác với cơ sở dữ liệu
1.4.1 Nhóm lệnh định nghĩa dữ liệu:
1.4.1.1 Lệnh Create:
a) Tạo CSDL:
- Sử dụng lệnh CREATE DATABASE để tạo CSDL Cú pháp như sau:
CREATE DATABASE db_name
Trang 19- Trong giao diện phpMyAdmin, sử dụng thẻ SQL để viết lệnh như sau:
Hình 1.24: Thao tác tạo CSDL
- Trường hợp máy chủ đang tồn tại CSDL qlsv thì xuất hiện lỗi #1007:
Hình 1.25: Lỗi tạo CSDL
- Muốn tránh lỗi trên thì tạo CSDL với cú pháp như sau:
CREATE DATABASE IF NOT EXISTS db_name
Ví dụ: Tạo CSDL Quản lý sinh viên
CREATE DATABASE IF NOT EXISTS qlsv
- CSDL mới được tạo sẽ có thông số Charset2 và Collate3 mặc định (Charset=latin1, Collate=latin1_swedish_ci) Để quy định cụ thể Charset và Collate khi tạo CSDL thì sử dụng cú pháp sau:
CREATE DATABASE db_name
CHARACTER SET charset_name
Trang 20Ví dụ: Tạo CSDL Quản lý sinh viên với Charset=ascii và Collate=ascii_general_ci
CREATE DATABASE qlsv
CHARACTER SET ascii
COLLATE ascii_general_ci
- Trong giao diện phpMyAdmin, kiểm tra Charset và Collate như sau:
Hình 1.26: Câu lệnh kiểm tra Charset và Collate
- Kết quả kiểm tra Charset và Collate của CSDL:
Hình 1.27: Kết quả kiểm tra Charset và Collate
b) Tạo bảng dữ liệu:
- Sử dụng lệnh CREATE TABLE để tạo bảng dữ liệu Cú pháp như sau:
CREATE TABLE [IF NOT EXISTS] table_name (
/* Khai báo các trường dữ liệu */
col_name data_type [col_attribute] ,
[constraint pk_name] primary key (col_name, ),
[constraint fk_name] foreign key (col_name, ) references table_name
(col_name, )
) ENGINE=engine_name
- Tham số:
+ table_name: Tên bảng dữ liệu
+ col_name: Tên cột (trường) dữ liệu
+ data_type: Các kiểu dữ liệu thường sử dụng như: bool, int, float, double, char, varchar, text, date, enum…
+ col_attribute: Các thuộc tính của một cột (trường) dữ liệu:
Trang 21 NOT NULL: Không cho phép giá trị NULL
DEFAULT: Thiết lập giá trị mặc định (tự động hiển thị trong trường dữ liệu)
AUTO_INCREMENT: Tự động tăng giá trị lên 1 đơn vị khi thêm dữ liệu
PRIMARY KEY: Thiết lập khóa chính (cho một hay nhiều trường dữ liệu)
+ pk_name, fk_name: Tên ràng buộc khóa chính/khóa ngoại
+ engine_name: Các kiểu lưu trữ dữ liệu thông dụng: InnoDB, MyISAM, MEMORY…
Ví dụ: Tạo CSDL Quản lý sinh viên như sau:
sinhvien(masv, tensv, ngaysinh, gioitinh, makh)
khoa(makh, tenkh)
hocbong(masv, hocbonghk, xeploai)
monhoc(mamh, tenmh, tinchi)
/* Tao bang sinh vien voi masv la khoa chinh */
CREATE TABLE sinhvien (
masv varchar(10) primary key,
tensv varchar(40) not null,
- Mã SQL trong giao diện phpMyAdmin như sau:
Hình 1.28: Thao tác tạo bảng dữ liệu
2
1
3
4
Trang 22/* Tao bang khoa voi makh la khoa chinh */
CREATE TABLE khoa (
makh varchar(10) primary key,
tenkh varchar(30) not null
) ENGINE=InnoDB
/* Tao bang hocbong voi khoa chinh gom 2 truong la masv va hocbonghk */
CREATE TABLE hocbong (
masv varchar(10),
hocbonghk varchar(3),
xeploai varchar(10),
constraint pk_hocbong primary key (masv, hocbonghk),
constraint fk_hocbong foreign key (masv) references sinhvien(masv)
) ENGINE=InnoDB
/* Tao bang mon hoc voi mamh la khoa chinh */
CREATE TABLE monhoc (
Trang 231.4.1.2 Lệnh Drop:
a) Xóa CSDL:
- Sử dụng lệnh DROP DATABASE để xóa CSDL Cú pháp như sau:
DROP DATABASE db_name
Ví dụ: Xóa CSDL Quản lý sinh viên
DROP DATABASE qlsv
- Trường hợp máy chủ không có CSDL qlsv thì xuất hiện lỗi #1008:
Hình 1.30: Lỗi xóa CSDL
- Muốn tránh lỗi trên thì xóa CSDL với cú pháp như sau:
DROP DATABASE IF EXISTS db_name
Ví dụ: Xóa CSDL Quản lý sinh viên
DROP DATABASE IF EXISTS qlsv
b) Xóa bảng dữ liệu:
- Sử dụng lệnh DROP TABLE để xóa bảng dữ liệu Cú pháp như sau:
DROP TABLE [IF EXISTS] table_name
Ví dụ: Xóa bảng monhoc trong CSDL Quản lý sinh viên
DROP TABLE IF EXISTS monhoc
- Hộp thoại thông báo xuất hiện để xác nhận xóa bảng monhoc:
Hình 1.31: Thông báo xác nhận xóa bảng
Trang 241.4.1.3 Lệnh Alter:
a) Sửa đổi cấu trúc CSDL:
- Sử dụng lệnh ALTER DATABASE để sửa đổi cấu trúc CSDL Cú pháp như sau:
ALTER DATABASE db_name
[ CHARACTER SET charset_name ]
b) Sửa đổi cấu trúc bảng dữ liệu:
- Sử dụng lệnh ALTER TABLE để đổi tên bảng dữ liệu4 Cú pháp như sau:
ALTER TABLE old_table_name
RENAME new_table_name
Ví dụ: Đổi tên bảng monhoc thành tbl_monhoc
ALTER TABLE monhoc
RENAME tbl_monhoc
- Sử dụng lệnh ALTER TABLE để thêm cột dữ liệu của bảng Cú pháp như sau:
ALTER TABLE table_name
ADD COLUMN col_name datatype [col_attribute] [first | after col_name]
Ví dụ: Trong bảng sinh viên, thêm cột stt ở đầu tiên và cột diachi ở cuối cùng
ALTER TABLE sinhvien
ADD COLUMN stt int not null first,
ADD COLUMN diachi varchar(50)
Ví dụ: Thêm cột sdt vào sau cột makh (trước cột diachi) của bảng sinh viên
ALTER TABLE sinhvien
ADD COLUMN sdt varchar(10) after makh
4
Lệnh tương đương: RENAME TABLE old_table TO new_table
Trang 25- Sử dụng lệnh ALTER TABLE để xóa cột dữ liệu của bảng Cú pháp như sau:
ALTER TABLE table_name
DROP COLUMN col_name
Ví dụ: Xóa cột stt của bảng sinhvien
ALTER TABLE sinhvien
DROP COLUMN stt
- Sử dụng lệnh ALTER TABLE để thiết lập khóa chính cho bảng Cú pháp như sau:
ALTER TABLE table_name
ADD [CONSTRAINT pk_name] PRIMARY KEY (col_name,…)
Ví dụ: Thiết lập cột mamh làm khóa chính của bảng monhoc
ALTER TABLE monhoc
ADD PRIMARY KEY (mamh)
- Sử dụng lệnh ALTER TABLE để hủy khóa chính của bảng Cú pháp như sau:
ALTER TABLE table_name
DROP PRIMARY KEY
Ví dụ: Hủy khóa chính của bảng monhoc
ALTER TABLE monhoc
DROP PRIMARY KEY
- Sử dụng lệnh ALTER TABLE để thiết lập khóa ngoại của bảng Cú pháp như sau:
ALTER TABLE fk_table_name
ADD [CONSTRAINT fk_name] FOREIGN KEY (col_name,…)
Ví dụ: Thiết lập cột makh làm khóa ngoại cho bảng sinhvien
ALTER TABLE sinhvien
ADD CONSTRAINT fk_sinhvien FOREIGN KEY (makh)
Trang 26- Kết quả hiển thị trong thẻ Designer:
Hình 1.32: Quan hệ ràng buộc giữa các bảng dữ liệu
- Sử dụng lệnh ALTER TABLE để hủy khóa ngoại của bảng Cú pháp như sau:
ALTER TABLE table_name
DROP FOREIGN KEY fk_name
Ví dụ: Hủy khóa ngoại của bảng sinhvien
ALTER TABLE sinhvien
DROP FOREIGN KEY fk_sinhvien
- MySQL cho phép người dùng xem tên khóa chính/khóa ngoại của bảng dữ liệu với câu lệnh sau:
SHOW KEYS FROM table_name [FROM db_name]
Hoặc:
SHOW KEYS FROM db_name.table_name
- Sử dụng lệnh ALTER TABLE để đổi tên cột dữ liệu của bảng Cú pháp như sau:
ALTER TABLE table_name
CHANGE [COLUMN] old_col_name new_col_name data_type
Ví dụ: Trong bảng sinhvien, đổi tên cột sdt thành sodienthoai, có kiểu varchar(15)
ALTER TABLE sinhvien
CHANGE COLUMN sdt sodienthoai varchar(15)
- Sử dụng lệnh ALTER TABLE để đổi kiểu dữ liệu, thuộc tính, vị trí các cột dữ liệu của bảng Cú pháp như sau:
ALTER TABLE table_name
MODIFY [COLUMN] col_name data_type [col_attribute] [first | after col_name]
Trang 27Ví dụ: Trong bảng sinhvien, đổi cột diachi có kiểu varchar(50) thành kiểu varchar(100) và mặc định giá trị là Bình Thuận
ALTER TABLE sinhvien
MODIFY COLUMN diachi varchar(100) default 'Bình Thuận'
Ví dụ: Trong bảng sinhvien, đổi cột sodienthoai lên trước cột diachi
ALTER TABLE sinhvien
MODIFY COLUMN sodienthoai varchar(15) after makh
- Sử dụng lệnh ALTER TABLE để đổi kiểu lưu trữ dữ liệu Cú pháp như sau:
ALTER TABLE table_name ENGINE = engine_name
Ví dụ: Đổi kiểu lưu trữ của bảng monhoc từ MyISAM sang InnoDB
ALTER TABLE monhoc ENGINE = InnoDB
- MySQL cho phép người dùng xem thông tin bảng dữ liệu với câu lệnh sau:
SHOW TABLE STATUS
[ FROM db_name]
[ LIKE 'table_name' | WHERE expr ]
Ví dụ: Xem thông tin ENGINE của bảng monhoc
SHOW TABLE STATUS
SELECT [ALL | DISTINCT] col_name [, col_name ]
[FROM table_name [AS] alias_name] [, table_name ] ]
[WHERE where_condition]
[GROUP BY {col_name | expression} [ASC | DESC] ]
[HAVING where_condition] ]
[ORDER BY {col_name | expression} [ASC | DESC] ]
[LIMIT [offset,] row_count]
Trang 28- Tham số:
+ col_name: Tên cột (trường) dữ liệu
+ table_name: Tên bảng dữ liệu
+ alias_name: Tên bí danh của bảng dữ liệu
+ where_condition: Điều kiện lọc dữ liệu
+ expression: Biểu thức có thể là hàm, toán tử hoặc kết hợp cả hai
+ offset: Vị trí dòng dữ liệu (dòng đầu tiên có vị trí là 0)
+ row_count: Số lượng dòng dữ liệu tối đa
- Các ví dụ tiếp theo sẽ minh họa với CSDL Northwind như sau:
Hình 1.33: Quan hệ giữa các bảng trong CSDL Northwind
Ví dụ: Cho biết tất cả thông tin của các công ty Vận chuyển
SELECT *
FROM Shippers
Ví dụ: Cho biết danh sách các thành phố là quê hương của nhân viên
SELECT DISTINCT City
FROM Employees
Ví dụ: Cho biết thông tin về họ, tên và ngày sinh của nhân viên ở London
SELECT Firstname, Lastname, BirthDate
FROM Employees
WHERE City = 'London'
5
Trang 29Ví dụ: Cho biết mỗi khách hàng đã đặt hàng bao nhiêu lần
SELECT CustomerID, count(CustomerID) as SOLAN
FROM Orders
GROUP BY CustomerID
Ví dụ: Cho biết khách hàng FRANK đã đặt hàng bao nhiêu lần
SELECT CustomerID, count(CustomerID) as SOLAN
FROM Orders
GROUP BY CustomerID
HAVING CustomerID = 'FRANK'
Ví dụ: Cho biết tất cả thông tin khách hàng với phần tên sắp xếp tăng dần và phần họ sắp xếp giảm dần
SELECT *
FROM Employees
ORDER BY Firstname asc, Lastname desc
Ví dụ: Cho biết 10 khách hàng đầu tiên có số lần đặt hàng nhiều nhất
SELECT CustomerID, count(CustomerID) as SOLAN
- Lệnh INSERT dùng để thêm dữ liệu vào các bảng của CSDL Cú pháp như sau:
INSERT [INTO] table_name [ (col_name, ) ]
VALUES ({expression | DEFAULT}, ) [, ( )]
Hoặc:
INSERT [INTO] table_name [ (col_name, ) ]
SET col_name = {expression | DEFAULT}
Hoặc:
INSERT [INTO] table_name [ (col_name, ) ]
SELECT …
Trang 30- Tham số:
+ table_name: Tên bảng dữ liệu
+ col_name: Tên cột (trường) dữ liệu
+ expression: Biểu thức có thể là hàm, toán tử hoặc kết hợp cả hai
Ví dụ: Thêm vào CSDL một công ty Vận chuyển
INSERT INTO Shippers(CompanyName, Phone)
VALUES('FPT Corporation','(04)73007300')
Hoặc:
INSERT INTO Shippers
SET CompanyName='FPT Corporation', Phone='(04)73007300'
Ví dụ: Thêm vào CSDL cùng lúc 3 công ty Vận chuyển
INSERT INTO Shippers(CompanyName, Phone)
VALUES('FPT Corporation','(04)73007300'), ('TRAN ANH DIGITAL WORLD JSC','(84-4) 3766.7708'), ('Công ty Phong Vũ','(08) 6290 8777')
Ví dụ: Thêm vào CSDL tên các công ty Vận chuyển từ tên các công ty Cung cấp Biết rằng chỉ chọn các công ty Cung cấp có mã số bé hơn 4
INSERT INTO Shippers(CompanyName)
SELECT Suppliers.CompanyName
FROM Suppliers
WHERE SupplierID < 4
1.4.2.3 Lệnh Delete:
- Lệnh DELETE dùng để xóa dữ liệu trong các bảng của CSDL Cú pháp như sau:
DELETE FROM table_name
[WHERE where_condition]
[ORDER BY col_name [ASC | DESC] ]
[LIMIT row_count]
- Tham số:
+ table_name: Tên bảng dữ liệu
+ where_condition: Điều kiện lọc dữ liệu
+ col_name: Tên cột (trường) dữ liệu
+ row_count: Số lượng dòng dữ liệu tối đa
Trang 31Ví dụ: Xóa công ty Vận chuyển DHL Express Biết rằng công ty có mã là 10
DELETE FROM Shippers
WHERE ShipperID = 10
Ví dụ: Xóa công ty Vận chuyển DHL Express Biết rằng chỉ xóa 3 công ty theo thứ tự giảm dần mã số công ty
DELETE FROM Shippers
WHERE CompanyName = 'DHL Express'
ORDER BY ShipperID DESC
+ table_name: Tên bảng dữ liệu
+ col_name: Tên cột (trường) dữ liệu
+ expression: Biểu thức có thể là hàm, toán tử hoặc kết hợp cả hai
+ where_condition: Điều kiện lọc dữ liệu
+ row_count: Số lượng dòng dữ liệu tối đa
Ví dụ: Thay đổi tên công ty Vận chuyển từ 'FPT Corporation' thành 'FPT Express' Biết rằng công ty 'FPT Corporation' có mã là 4
SET CompanyName = 'DHL Express'
WHERE CompanyName = 'DHL Corp'
ORDER BY ShipperID DESC
Trang 321.5 Một số hàm MySQL thông dụng:
1.5.1 Hàm COUNT():
- Hàm COUNT() được dùng để đếm số lượng mẫu tin có trong bảng
Ví dụ: Cho biết số lượng nhân viên
WHERE Country = 'USA'
Ví dụ: Cho biết số lượng nhân viên đến từ các quốc gia USA, UK, Japan Đặt tên cột cho bảng kết quả là SoLuong
SELECT COUNT(*) As SoLuong
FROM Employees
WHERE Country IN ('USA', 'UK', 'Japan')
1.5.2 Hàm MAX():
- Hàm MAX() trả về giá trị lớn nhất của trường dữ liệu
Ví dụ: Cho biết đơn đặt hàng có mức giảm giá cao nhất
SELECT MAX(Discount)
FROM Order_Details
1.5.3 Hàm MIN():
- Hàm MIN() trả về giá trị nhỏ nhất của trường dữ liệu
Ví dụ: Cho biết đơn đặt hàng có mức giảm giá nhỏ nhất
SELECT MIN(Discount)
FROM Order_Details
1.5.4 Hàm SUM():
- Hàm SUM() được dùng để tính tổng các giá trị của trường dữ liệu
Ví dụ: Cho biết tổng số lượng hàng đã đặt
SELECT SUM(Quantity)
FROM Order_Details
Trang 341.5.11 Hàm CONCAT():
- Hàm CONCAT() được dùng để nối các chuỗi lại với nhau
Ví dụ:
SELECT CONCAT('CSDL ', 'MySQL ', '5.1') 'CSDL MySQL 5.1'
SELECT CONCAT('btu', '.edu', '.vn') AS Domain 'btu.edu.vn'
Trang 35BÀI TẬP
1/ Cho CSDL Quản lý nhân sự:
nhanvien(manv, tennv, ngaysinh, gioitinh, diachi, sdt, mapb)
phongban(mapb, tenpb, ngaytl)
chucvu(macv, tencv)
Viết mã MySQL thực hiện các yêu cầu sau:
a) Tạo CSDL qlNhanSu với Charset là utf8 và Collate là utf8_unicode_ci
b) Tạo bảng nhanvien với khóa chính là manv, bảng phongban với khóa chính là mapb, bảng chucvu với khóa chính là macv Các bảng có ENGINE là InnoDB
c) Thiết lập khóa ngoại cho bảng nhanvien là cột mapb
d) Ở bảng nhanvien, thêm cột email vào sau cột sdt
e) Ở bảng phongban, đổi cột ngaytl thành ngaythanhlap
f) Ở bảng chucvu, thêm cột hesopc (có kiểu int)
g) Thay đổi thuộc tính Default để cột tencv có giá trị mặc định 'Nhân viên'
h) Chuyển cột email lên trước cột sdt
i) Đổi kiểu dữ liệu cột hesopc từ int sang float
j) Xóa cột ngaythanhlap, Xóa bảng chucvu
2/ Cho CSDL Quản lý học sinh:
hocsinh(mahs, tenhs, ngaysinh, sdt, malop)
lop(malop, tenlop)
hocbong(mahs, hocbonghk, xeploai)
Viết mã MySQL thực hiện các yêu cầu sau:
a) Tạo CSDL qlHocSinh với thông số mặc định
b) Thay đổi thông số của CSDL qlHocSinh với Charset là utf8 và Collate là utf8_unicode_ci
c) Tạo bảng hocsinh với khóa chính là mahs, bảng lop với khóa chính là malop, bảng hocbong Các bảng có ENGINE là InnoDB
d) Thiết lập khóa chính cho bảng hocbong với tên pk_hocbong gồm 2 cột là mahs và hocbonghk
e) Thiết lập khóa ngoại là cột malop cho bảng hocsinh
f) Ở bảng hocsinh, thêm cột gioitinh có kiểu enum với 2 giá trị là Nam (mặc định) và Nữ g) Chuyển cột gioitinh đứng trước cột sdt
h) Xóa khóa ngoại của bảng hocsinh
i) Xóa cột sdt
j) Xóa khóa chính của bảng hocbong và xóa CSDL
Trang 36CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN
2.1 Giới thiệu:
- PHP (Hypertext Preprocessor hay Personal Home Page) là ngôn ngữ kịch bản chạy trên máy chủ (Server Side), cho phép người dùng dễ dàng xây dựng các ứng dụng Web và tương tác tốt với các cơ sở dữ liệu: Access, MySQL, SQL Server, Oracle
- Ngôn ngữ PHP được bắt đầu bởi thẻ <?php và kết thúc bởi thẻ ?>
- Cấu trúc lệnh của PHP có thể được tách thành nhiều phần và có thể nhúng vào mọi vị trí trong trang HTML (Hypertext Markup Language), nhúng dạng Scriptlet là <?php … ?> và nhúng dạng Script là <?= … ?>
- PHP là ngôn ngữ có phân biệt chữ hoa chữ thường, mỗi lệnh được ngăn cách bới dấu chấm phẩy (;)
- Nối 2 chuỗi với nhau là dấu chấm (.)
- Viết mã chương trình đầu tiên Hello World:
Bước 1: Mở chương trình Notepad (hoặc phpDesigner)
Bước 2: Viết đoạn mã: <?php echo 'Hello World!'; ?>
Bước 3: Lưu lại thành tập tin hello.php theo đường dẫn D:\xampp\htdocs\hello.php Bước 4: Trong trình duyệt, gõ đường dẫn http://localhost/hello.php Kết quả như sau:
Hình 2.1: Chương trình Hello World
- Nếu thay đổi đoạn mã: echo '<p align=center>Hello World!</p>' thì kết quả:
Hình 2.2: Chương trình Hello World 2
Trang 372.2 Kiểu dữ liệu:
- PHP có 4 kiểu dữ liệu cơ bản: Boolean, Integer, Float và String
Bảng 2.1: Các kiểu dữ liệu thông dụng
Boolean Chỉ chứa giá trị true hoặc false
Integer
Kiểu số nguyên, giá trị lớn nhất khoảng 2 tỷ (kích thước phụ thuộc nền tảng sử dụng 32bits/64bits) Hằng PHP_INT_SIZE cho biết kích thước của số nguyên và hằng PHP_INT_MAX cho biết giá trị
• \": Dấu nháy đôi
• \': Dấu nháy đơn
- Giá trị NULL có nghĩa là không có gì cả (không phải khoảng trắng, không phải chuỗi rỗng và không phải Zero) Nếu biến chưa được gán thì có giá trị NULL (hoặc biến bị hủy
bỏ giá trị khi sử dụng hàm unset)
Ví dụ:
<pre>
<?php
echo "NNLT PHP \nCO BAN\n";
echo 'So nguyen lon nhat: ' PHP_INT_MAX;
?>
</pre>
Trang 382.3 Biến và hằng:
2.3.1 Biến và khai báo biến:
- Trong PHP, tên biến bắt đầu bằng ký hiệu $ và tiếp theo là các chữ, số, dấu gạch dưới
Ký tự đầu tiên của tên biến phải là chữ hoặc là dấu gạch dưới, không được là số
$ho = "Nguyen Van";
$ten = "$ho Hung"; //Tương tự $ten="Nguyen Van Hung"
$ho = 'Nguyen Van';
$ten = '$ho Hung';
echo "Ho va ten: $ht Nam sinh: $ns <br>";
echo '$a1 co gia tri: ', gettype($a1)," <br>";
echo "Hom nay la $ngay <br>";
?>
Trang 39Hình 2.3: Kết quả sử dụng biến
- Một số hàm kiểm tra kiểu dữ liệu của biến: is_bool, is_int, is_float, is_string, is_array, is_null, is_numeric, gettype, settype, isset, unset, empty…
- Phạm vi hoạt động của biến:
+ Biến cục bộ (Local Variable): Biến được khai báo trong một hàm thì được xem là biến cục bộ của hàm đó Khi kết thúc hàm thì biến này cũng bị xóa
+ Biến toàn cục (Global Variable): Biến được khai báo bên ngoài hàm và được sử dụng
ở bất kì nơi đâu trong chương trình Nếu muốn sử dụng biến toàn cục bên trong hàm thì khai báo với từ khóa global
+ Biến tĩnh (StaticVariable): Biến không mất giá trị khi ra khỏi hàm, khai báo biến với
từ khóa static ở bên trong hàm
Trang 40- PHP định nghĩa sẵn một số biến toàn cục (Superglobals): $GLOBALS, $_FILES,
$_SERVER, $_ENV, $_GET, $_REQUEST, $_POST, $_SESSION, $_COOKIE
?>
- Tương tự như biến, PHP cũng xây dựng sẵn các hằng dành riêng để sử dụng
Ví dụ:
<?php
?>