o Mỗi dòng của 1 bảng có cùng các cột được đặt tên o Mỗi cột có 1 kiểu dữ liệu cụ thể... Ngôn ngữ SQL Truy vấn toàn bộ bảng SELECT * FROM ; Truy vấn thuộc tính cụ thể của bảng SELECT
Trang 1o Một số hệ quản trị mã nguồn mở
o Tìm hiểu quản trị CSDL PostgreSQL
Giáo viên: Nguyễn Trần Minh Thư Nhóm 07
Trang 3Hệ quản trị mã nguồn mở
MySQL
MySql là HQTCSDL mã nguồn mở phổ biến nhất thế giới.
Sử dụng ngôn ngữ truy vấn có cấu trúc (SQL).
MySQL là cơ sở dữ liệu tốc độ cao, ổn định, bảo mật và dễ sử dụng.
Phát triển bởi công ty MySQL AB.
Phiên bản mới nhất: 5.0.17 vào ngày 21 tháng 12 năm 2005.
Hệ điều hành: Đa hệ điều hành
Thể loại: RDBMS (relational database management system)
Website: www.mysql.com
Trang 4Hệ quản trị mã nguồn mở
Oracle
Oracle là một HQTCSDL quan hệ đối tượng phổ biến trên thế giới (ORDBMS)
Oracle cung cấp một HQTCSDL mềm dẻo gồm CSDL Oracle , môi trường cho việc thiết kế các cơ sở dữ liệu, các công cụ phát triển
HQTCSDL có tính an toàn , bảo mật cao, tính nhất quán và toàn vẹn dữ liệu
Trang 5Hệ quản trị mã nguồn mở
Oracle
Được cung cấp bởi công ty ORACLE.
Phiên bản mới nhất: Oracle Database 11g phát hành vào tháng 9 năm 2011.
Viết bằng ngôn ngữ: C, C++.
Hệ điều hành: Đa hệ điều hành.
Website: www.oracle.com
Trang 6Hệ quản trị mã nguồn mở
SqLite là phần mềm quản lý cơ sở dữ liệu (DBMS)
Đặc điểm của SQLite là gọn, nhẹ, đơn giản
Sử dụng dưới dạng thư viện nhúng, không chạy theo kiểu server độc lập
Hỗ trợ các ngôn ngữ phổ biến: C, C++, C#, Basic, Perl, Ruby, Python, PHP, Java
Hỗ trợ mã UTF8, command line, transaction, view, C extensions
Trang 7Hệ quản trị mã nguồn mở
Có các công cụ quản lý bằng đồ hoạ
Download & sử dụng miễn phí
Phát triển bởi D.Richard Hipp
Phiên bản: Hiện tại SQLite có 2 nhánh khác nhau là version 2.x và version 3.x Lệnh sqlite là của version 2.x, sqlite3 là lệnh của version 3.x
Hệ điều hành: Nền tảng Cross
Website: http://www.sqlite.org
Trang 9Giới thiệu PostgreSQL
PostgreSQL là gì?
PostgreSQL là một HQTCSDL quan hệ và đối tượng dựa trên Postgres (ORDBMS: object-relational database management system)
Được phát triển bởi khoa điện toán của đại học California tại Berkeley
PostgreSQL là một chương trình mã nguồn mở xây dựng trên mã nguồn ban đầu của đại học Berkeley
PostgreSQL theo chuẩn SQL99
Được phát triển từ hơn 15 năm, tương thích chuẩn SQL, khả năng làm việc trên cơ sở dữ liệu lớn, đang dần tiến gần đến doanh nghiệp
Trang 10Giới Thiệu PostgreSQL
Giao diện lập trình ứng dụng
Công cụ hỗ trợ lập trình
Công cụ quản trị
Được viết bằng ngôn ngữ C
Hệ điều hành: đa hệ điều hành
Thể loại: ORDBMS (object-relational database management system)
Website: http://www.postgresql.org/
Trang 11Đặc điểm PostgreSQL
Câu truy vấn phức hợp (complex query).
Khóa ngoại (foreign key).
Thủ tục sự kiện(trigger).
Các khung nhìn(view)
Tính toàn vẹn của các giao tác (trigger).
Kiểm tra truy cập đồng thời đa phiên bản (multiversion concurrency control).
PostgreSQL có thể dùng trong nhiều trường hợp, như tạo ra kiểu dữ liệu, hàm, toán tử, hàm tập hợp, ngôn ngữ theo thủ tục
Trang 12Lịch sử của PostgreSQL
Từ INGRES đến POSTGRES (1977-1994): Năm 1971 được giáo sư Michael Stonebraker nghiên cứu.
INGRES: Ra đời vào năm 1977 là mô hình quan hệ.
POSTGRES: Phát triển năm 1986, là mô hình đối tượng, ngôn ngữ truy vấn QUEL.
o Hỗ trợ ngôn ngữ SQL từ năm 1994.
o Phiên bản Postgres95 ra đời vào năm 1995.
o Phiên bản PostgreSQL 6.0 ra đời vào năm 1996.
Trang 13Lịch sử của PostgreSQL
Trang 14PostgreSQL và các HQT CSDL khác
Thông tin chung
Trang 15PostgreSQL và các HQT CSDL khác
Hệ điều hành được hỗ trợ
Trang 16PostgreSQL và các HQT CSDL khác
Tính năng cơ bản
Trang 17PostgreSQL và các HQT CSDL khác
Các đối tượng khác
Trang 20Ngôn ngữ SQL
PostgreSQL là hệ thống QTCSDL quan hệ
Mỗi Table tập trung các dòng
o Mỗi dòng của 1 bảng có cùng các cột được đặt tên
o Mỗi cột có 1 kiểu dữ liệu cụ thể
Trang 21Ngôn ngữ SQL
Insert
Xác định thứ tự của giá trị insert
INSERT INTO <tên bảng> VALUES (<giá trị thuộc tính>,<giá trị thuộc tính>,…);
Không xác định thứ tự của giá trị insert
INSERT INTO <tên bảng>(<tên thuộc tính>,<tên thuộc tính>,…) VALUES (<giá trị thuộc tính>,<giá trị thuộc tính>,…);
Trang 22Ngôn ngữ SQL
Có thể sử dụng để tải một lượng lớn dữ liệu từ tập tin văn bản có dữ liệu theo cấu trúc của bảng
COPY <tên bảng> FROM <đường dẫn file>;
COPY sinhvien(hoten,ngaysinh,noisinh,diemlt,diemth,lop) FROM ‘D:\test.txt’ DELIMITER(‘,’);
Nội dung test.txt
Ly Minh, 1989-10-10,Ben tre,7,8,10HCA
Ly Hung, 1989-11-11,Ben tre,7,9,10HCB
Trang 23Ngôn ngữ SQL
Truy vấn toàn bộ bảng
SELECT * FROM <tên bảng>;
Truy vấn thuộc tính cụ thể của bảng
SELECT <tên thuộc tính>,… FROM <tên bảng>;
Tính toán trên thuộc tính hiển thị
SELECT MSSV, (diemlt+diemth)/2 AS diem
FROM SinhVien;
Trang 24Ngôn ngữ SQL
Lọc dữ liệu: AND, OR, NOT
SELECT * FROM SinhVien
WHERE lop = ’10HCA’
AND diem>8.0;
Lấy dữ liệu không trùng lắp: DISTINCT
SELECT DISTINCT noisinh
FROM SinhVien;
Sắp xếp kết quả truy vấn: ORDER BY
SELECT DISTINCT noisinh
FROM SinhVien
ORDER BY noisinh;
Trang 25Ngôn ngữ SQL
Truy vấn bằng phép kết bảng
o Có những record không trùng khớp giữa 2 bảng => Một số TH sẽ mất mát dữ liệu
o SELECT mssv, hoten, ngaysinh, noisinh, diem, lop
FROM SinhVien sv, Lop l WHERE sv.lop=l.tenlop;
Truy vấn bằng JOIN
o Inner join
Trang 26Ngôn ngữ SQL
o Outer join
• Left outer join
Table bên trái của phép left outer join mỗi dòng được lấy ra duy nhất 1 lần, table bên phải sẽ chỉ lấy ra những dòng trùng khớp với dòng của table bên trái
SELECT * FROM SinhVien sv
LEFT OUTER JOIN Lop l ON(sv.tenlop=l.tenlop);
Trang 27Ngôn ngữ SQL
o Outer join
•Right outer join
Table bên phải của phép right outer join mỗi dòng được lấy ra duy nhất 1 lần, table bên trái sẽ chỉ lấy ra những dòng trùng khớp với dòng của table bên phải
SELECT * FROM SinhVien sv
RIGHT OUTER JOIN Lop l ON(sv.tenlop=l.tenlop);
Trang 28Ngôn ngữ SQL
Count: Đếm số record truy vấn
SELECT count(*) FROM SinhVien;
Sum: Tính tổng theo một tiêu chí
SELECT sum(diem) FROM SinhVien;
Avg: Tính trung bình cho một tiêu chí
SELECT avg(diem) FROM SinhVien;
Trang 29Ngôn ngữ SQL
Max: Tìm giá trị lớn nhất cho thuộc tính truy xuất(select)
SELECT max(diem) FROM SinhVien;
Min: Tìm giá trị nhỏ nhất cho thuộc tính truy xuất(select)
SELECT min(diem) FROM SinhVien;
Having: Lựa chọn sau khi gom nhóm(where)
SELECT lop, max(diem) FROM SinhVien
GROUP BY lop HAVING max(diem)<8.0;
Trang 30Ngôn ngữ SQL
UPDATE <tên bảng>
SET <tên thuộc tính>=<giá trị thuộc tính>,…
WHERE <thuộc tính>=<điều kiện thuộc tính>;
Xóa một vài dòng của bảng
DELETE FROM <tên bảng>
WHERE <thuộc tính>=<điều kiện thuộc tính>;
Xóa toàn bộ dữ liệu của bảng
Trang 32double precision Độ chính xác biến đổi
Giá trị không chính xác
Độ chính xác 15 chữ số thập phân
numeric Người dùng chỉ định Không giới hạn
serial Dữ liệu kiểu int tăng tự động 1 đến 2147483647
Trang 33Định nghĩa kiểu dữ liệu
character(n) Chiều dài cố định, thêm khoảng trắng nếu kích thước chuỗi thực tế không đạt kích
thước khai báo.
Chuỗi vượt quá kích thước khai báo sẽ bị cắt bỏ
character varying(n) Chiều dài thay đổi có giới hạn
Chuỗi vượt quá kích thước khai báo sẽ bị cắt bỏ
text Chiều dài thay đổi không giới hạn
Trang 34Định nghĩa kiểu dữ liệu
Timestamp Ngày và thời gian trong khoảng 1902 đến 2038 2012-05-20 20:38:40
date Ngày 2012-05-20
time Thời gian của ngày 20:38:40
interval Khoảng thời gian 7 day, 3 year 2 month,
bit(x) x cố định Bị lỗi nếu chuỗi ngắn hơn hoặc dài hơn x.
bit varying(x) x thay đổi Bị lỗi nếu chuỗi dài hơn x.
bit Tương đương bit(1)
Trang 35Định nghĩa kiểu dữ liệu
Trang 37Defication Data Type
Khởi tạo
CREATE TYPE name AS
( [ attribute_name data_type [ COLLATE collation ] [, ] ] )
Ví dụ:
CREATE TYPE compfoo AS (f1 int, f2 text);
CREATE FUNCTION getfoo() RETURNS SETOF compfoo AS
$$ SELECT fooid, fooname FROM foo $$
LANGUAGE SQL;
Trang 38Defication Data Type
CREATE TYPE name AS ENUM ( [ 'label' [, ] ] )
Ví dụ:
CREATE TYPE bug_status AS ENUM ('new', 'open', 'closed');
CREATE TABLE bug ( id serial, description text, status bug_status);
Trang 39Defication Data Type
DROP TYPE [ IF EXISTS ] name [, ] [CASCADE | RESTRICT]
CASCADE: Tự động xóa các đối tượng phụ thuộc vào loại dữ liệu(như table column, function, operator)
RESTRICT: Từ chối xóa loại dữ liệu nếu có đối tượng phụ thuộc vào nó Đây là mặc định
Trang 40Defication Data Type
Chỉnh sửa
Sửa tên của loại dữ liệu
ALTER TYPE name RENAME TO new_name [ CASCADE | RESTRICT ]
Vd:
ALTER TYPE electronic_mail RENAME TO email;
Sửa tên thuộc tính của loại dữ liệu
ALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name
Trang 41Defication Data Type
Thêm giá trị cho enumerated type
ALTER TYPE name ADD VALUE new_enum_value [ { BEFORE | AFTER } existing_enum_value ]
Vd:
ALTER TYPE colors ADD VALUE 'orange' AFTER 'red';
Set lại schema cho loại dữ liệu
ALTER TYPE name SET SCHEMA new_schema
Vd:
ALTER TYPE email SET SCHEMA customers;
Trang 42Defication Data Type
Thêm thuộc tính vào loại dữ liệu đã tồn tại
ALTER TYPE name ADD ATTRIBUTE attribute_name data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]
Vd:
ALTER TYPE compfoo ADD ATTRIBUTE f3 int;
Xóa thuộc tính cho loại dữ liệu đã tồn tại
ALTER TYPE name DROP ATTRIBUTE [ IF EXISTS ] attribute_name [ CASCADE|RESTRICT ]
Chỉnh sửa thuộc tính của loại dữ liệu đã tồn tại
ALTER TYPE name ALTER ATTRIBUTE attribute_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ CASCADE
| RESTRICT ]
Trang 44Hàm và các toán tử
@ Giá trị tuyệt đối
Trang 45Hàm và các toán tử
Function
abs(x) Giá trị tuyệt đối abs(-17.4) 17.4
mod(y, x) Lấy dư của y/x Mod(9,4) 1
degrees(dp) Radian sang độ degrees(0.5) 28.6478897565412
radians(dp) Độ sang radian radians(28.64) 0.499862297771176
round(dp) Làm tròn lấy phần nguyên round(42.4) 42
round(v numeric,s integer) Làm tròn lấy s chữ số round(42.4382, 2) 42.44
Trang 46Hàm và các toán tử
initcap(text) Chuyển ký tự đầu cảu mỗi từ thành chữ in
hoa
initcap(’hi thomas’) Hi Thomas
octet_length(string) Số byte trong chuỗi octet_length(‘tom’) 3
char_length(string)
or character_length(string)
Số ký tự trong chuỗi char_length(‘tom’) 3
bit_length(string) Số bit trong chuỗi bit_length(‘tom’) 24
length(string) Chiều dài của chuỗi length(‘tom’) 3
repeat(text, integer) Lặp lại chuỗi theo số lần repeat(Pg, 3) PgPgPg
Trang 47Hàm và các toán tử
age(timestamp) Tính đến ngày hiện tại age(timestamp'1988-10-02') 23 years 7 months 18 days
age(timestamp,timestamp) Tính từ thời gian nào đến thời gian nào age('2010-10-02',
timestamp'1988-10-02');
22 years
current_time Lấy giờ hiện tại 22:37:30.07+07
current_timestamp Lấy ngày, giờ hiện tại
date_part(text, timestamp) Lấy theo yêu cầu date_part('hour',
timestamp'2012-05-20 20:38:40')
20
date_trunc(text, timestamp) Cắt theo yêu cầu date_trunc('hour', timestamp '2012-05-20 20:38:40') 2012-05-20 20:00:00
Trang 48Function Definition
CREATE [OR REPLACE] FUNCTION name([arguments])
RETURNS [Data type] AS
$$
Function definition
$$
LANGUAGE plpgsql;
Trang 49Function Definition
Tạo function cộng hai số nguyên
CREATE [OR REPLACE] FUNCTION Cong(a int, b int) RETURNS int AS
$$BEGIN return a+b;
END$$
LANGUAGE plpgsql ;
Khi không cần xác định tên tham số truyền vào: sử dụng $a, $b
CREATE [OR REPLACE] FUNCTION Cong( int, int) RETURNS int AS
Trang 50Function Definition
Tạo function tính tuổi của một sinh viên khi biết mã sinh viên
CREATE OR REPLACE FUNCTION TinhTuoi(int) RETURNS interval AS
'SELECT age(ngaysinh) FROM sinhvien WHERE masinhvien=$1;' LANGUAGE sql;
Trang 51Function Definition
Các kiểu return của function
void: không có giá trị trả ra
• Xóa sinh viên có điểm dưới 5.0
CREATE FUNCTION xoasinhvien() RETURNS void AS
Trang 52Function Definition
Các kiểu return của function
Data type (như int, text, double, table, boolean):kết quả trả ra 1 giá trị duy nhất mặc dù có nhiều dòng thỏa
• Trả về kiểu dữ liệu là một table chỉ có 1 dòng
CREATE FUNCTION sinhvien_diem(double precision ) RETURNS sinhvien AS
'SELECT * FROM sinhvien WHERE diem > $1;‘
LANGUAGE sql;
• Trả về kiểu boolean
CREATE FUNCTION xoasinhvien() RETURNS boolean AS
$$Begin DELETE FROM sinhvien WHERE sinhvien.diem <5.0;
return true;
Trang 53Function Definition
Các kiểu return của function
Setof datatype (như int, text, double, table): kết quả trả ra là nhiều dòng nếu có nhiều dòng thỏa
• Trả về kiểu dữ liệu là một table có nhiều dòng
CREATE FUNCTION sinhvien_diem(double precision ) RETURNS setof sinhvien AS
'SELECT * FROM sinhvien WHERE diem > $1;' LANGUAGE sql;
• Trả về kiểu setof text
CREATE FUNCTION sinhvien_diem(double precision ) RETURNS setof text AS
'SELECT tensinhvien FROM sinhvien WHERE diem > $1;
Trang 54DROP FUNCTION name_function ([datatype_argument],[datatype_argument );
DROP FUNCTION sinhvien_diem(double precision ) ;
Trang 56Tính năng khác
Tạo trigger
CREATE TRIGGER name_trigger
[ BEFORE | AFTER ] [ INSERT | DELETE | UPDATE [ OR ] ]
ON relation
FOR EACH [ ROW | STATEMENT ]
EXECUTE PROCEDURE name_procedure (arguments);
Trang 57Tính năng khác
Kiểm tra khi thêm hay cập nhật điểm cho sinh viên
Tạo proceduce sử dụng trong trigger:
CREATE OR REPLACE FUNCTION svKha()
Trang 58Tính năng khác
Tạo trigger kiểm tra điểm của sinh viên trên bảng sinhvien
CREATE TRIGGER trg_SVKha
BEFORE INSERT OR UPDATE
ON "SinhVien"
FOR EACH ROW
EXECUTE PROCEDURE svKha();
Trigger trg_SVKha sẽ được tự động gọi thực hiện khi INSERT hay UPDATE trên bảng sinhvien
Trang 60Tính năng khác
Hỗ trợ sẵn các cấu trúc B-Tree (mặc định), hash
Ver 9.1 hỗ trợ thêm các chỉ mục K-Nearest-Neighbour để tìm kiếm các giá trị tương đương nhau
Chứa đựng tất cả các đối tượng
Được xem như namespace, cho phép đối tượng cùng tên cùng tồn tại trong một database
Trang 61 MVCC
Multiversion Concurrency Control
Mỗi giao tác sẽ thao tác trên một bản sao của dữ liệu
Các thay đổi sẽ không thấy được cho đến khi cập nhật
Tính năng khác
Trang 62 Inheritance
Kế thừa là khái niệm từ cơ sở dữ liệu hướng đối tượng
Không kế thừa Kế thừa
CREATE TABLE ThuDo (
CREATE TABLE ThuDo ( quocgia char(2)
) INHERITS (cities);
Tính năng khác
Trang 63 Inheritance
Không kế thừa Kế thừa
• CREATE VIEW ThanhPho AS
SELECT ten, danso
• SELECT ten, danso FROM ONLY ThanhPho WHERE danso >5000000;
Trang 65 libpq - PostgreSQL's official C application interface
ECPG - An embedded C system
Npgsql - NET data provider
pgoledb - OLEDB interface
Trang 66Các công cụ hỗ trợ PostgreSQL
Psql: ứng dụng chính, dạng dòng lệnh
pgAdmin: giao diện đồ họa, đa nền tảng
phpPgAdmin: nền web, PHP, phpMyAdmin
Java
Microsoft ASP.NET
PHP