1 / 94

DEV_MYSQL- ver1.0

Cu00e1c su1ea3n phu1ea9m mu00e1y lu1ecdc nu01b0u1edbc karofi u0111u1ec1u u0111u1ea3m bu1ea3o tiu00eau chuu1ea9n chu1ea5t lu01b0u1ee3ng cao, an tou00e0n cho ngu01b0u1eddi su1eed du1ee5ng, hu1ea7u hu1ebft su1ea3n xuu1ea5t tu1ea1i Viu1ec7t Nam. u0110u1eb7c biu1ec7t, Karofi lu00e0 u0111u1ed1i tu00e1c duy nhu1ea5t tu1ea1i Viu1ec7t Nam nhu1eadp khu1ea9u mu00e0ng RO tu1eeb cu00f4ng ty Dow Chemicals (Hoa Ku1ef3).

Télécharger la présentation

DEV_MYSQL- ver1.0

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. GIÁO TRÌNH CƠ SỞ DỮ LIỆU – MYSQL ************ Tái bản lần 1.0 Lưu hành nội bộ Hà nội 03/2014

  2. Giáo trình Cơ sở dữ liệu – MySQL Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 2 / 94

  3. Giới thiệu MySQL MỤC LỤC CHƯƠNG 1. HỆ QUẢN TRỊCƠ SỞ DỮ LIỆU MySQL ............................................. 3 Phần lý thuyết ................................................................................................................. 3 1.1. Tổng quan vềcơ sở dữ liệu quan hệ ............................................................................. 3 1.1.1. Một số khái niệm cơ bản ........................................................................................... 3 1.1.2. Mô hình dữ liệu quan hệ ............................................................................................ 4 1.1.3. Bảng ........................................................................................................................... 5 1.1.4. Khóa của bảng ........................................................................................................... 5 1.1.5. Mối quan hệ và khóa ngoài ....................................................................................... 6 1.2. Tổng quan về SQL ........................................................................................................ 7 1.2.1. SQL là ngôn ngữcơ sở dữ liệu quan hệ .................................................................... 7 1.2.2. Vai trò của SQL ......................................................................................................... 8 1.2.3. Quy tắc sử dụng tên trong SQL ................................................................................. 9 1.3. Hệ quản trịcơ sở dữ liệu MySQL .............................................................................. 10 1.3.1. Giới thiệu Hệ quản trịcơ sở dữ liệu MySQL .......................................................... 10 1.3.2. Hướng dẫn cài đặt MySQL với Xampp .................................................................. 13 1.3.3. Các thao tác cơ bản với phpMyAdmin .................................................................... 18 BÀI TẬP ....................................................................................................................... 23 2.1. Câu hỏi ôn tập ............................................................................................................. 23 2.2. Bài tập ......................................................................................................................... 23 CHƯƠNG 2. NHÓM LỆNH ĐỊNH NGHĨA DỮ LIỆU (DDL) ................................. 25 Phần lý thuyết ............................................................................................................... 25 2.1. Các kiểu dữ liệu trong MySQL .................................................................................. 25 2.1.1. Storage Engine ......................................................................................................... 25 2.1.2. Kiểu dữ liệu ............................................................................................................. 26 2.2. Các câu lệnh định nghĩa dữ liệu bảng ........................................................................ 28 2.2.1. Tạo bảng dữ liệu ...................................................................................................... 28 2.2.2. Sửa đổi bảng ............................................................................................................ 38 Giáo trình Cơ sở dữ liệu – MySQL Trang 3 / 94

  4. Giới thiệu MySQL 2.2.3. Xóa bảng .................................................................................................................. 40 BÀI TẬP ....................................................................................................................... 42 2.1. Câu hỏi ôn tập ............................................................................................................. 42 2.2. Bài tập ......................................................................................................................... 42 CHƯƠNG 3. NHÓM LỆNH THAO TÁC DỮ LIỆU DML ........................................ 45 Phần lý thuyết ............................................................................................................... 45 3.1. Truy xuất dữ liệu với câu lệnh SELECT .................................................................... 45 3.1.1. Mệnh đề FROM ....................................................................................................... 46 3.1.2. Danh sách chọn trong câu lệnh SELECT ................................................................ 47 3.1.3. Sắp xếp kết quả truy vấn .......................................................................................... 52 3.2. Bổ sung dữ liệu vào bảng với câu lệnh INSERT ....................................................... 53 3.3. Cập nhật dữ liệu với câu lệnh UPDATE .................................................................... 55 3.3.1. Sử dụng cấu trúc CASE trong câu lệnh UPDATE .................................................. 55 3.3.2. Điều kiện cập nhật dữ liệu liên quan đến nhiều bảng .............................................. 56 3.3.3. Câu lệnh UPDATE với truy vấn con ....................................................................... 56 3.4. Xóa dữ liệu với câu lệnh DELETE ............................................................................. 57 3.4.1. Xoá dữ liệu khi điều kiện liên quan đến nhiều bảng ............................................... 57 3.4.2. Sử dụng truy vấn con trong câu lệnh DELETE ....................................................... 58 3.4.3. Xoá toàn bộ dữ liệu trong bảng ............................................................................... 58 BÀI TẬP ....................................................................................................................... 59 3.1. Câu hỏi ôn tập ............................................................................................................. 59 3.2. Bài tập ......................................................................................................................... 59 CHƯƠNG 4. TRUY VẤN NÂNG CAO ....................................................................... 63 Phần lý thuyết ............................................................................................................... 63 4.1. Một số hàm trong MySQL .......................................................................................... 63 4.1.1. Các hàm thông dụng ................................................................................................ 63 4.1.2. Các hàm xử lý chuỗi ................................................................................................ 63 4.1.3. Các hàm xử lý thời gian ........................................................................................... 67 4.1.4. Chỉđịnh điều kiện đối với hàm gộp ........................................................................ 71 Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 4 / 94

  5. Giới thiệu MySQL 4.2. Truy vấn dữ liệu kết nối nhiều bảng ........................................................................... 73 4.2.1. Danh sách chọn trong phép nối ............................................................................... 73 4.2.2. Mệnh đề FROM trong phép nối .............................................................................. 73 4.2.3. Mệnh đề WHERE trong phép nối ........................................................................... 74 4.2.4. Phép nối bằng và phép nối tự nhiên ........................................................................ 75 4.2.5. Phép nối với các điều kiện bổ sung ......................................................................... 76 4.2.6. Phép tự nối và các bí danh ....................................................................................... 76 4.2.7. Phép nối theo chuẩn SQL2 ...................................................................................... 77 4.3. Truy vấn con (Sub-Query) .......................................................................................... 80 4.4. Truy vấn dữ liệu theo nhóm và thống kê dữ liệu ....................................................... 84 4.4.1. Thống kê trên toàn bộ dữ liệu .................................................................................. 85 4.4.2. Thống kê dữ liệu trên các nhóm .............................................................................. 86 BÀI TẬP ....................................................................................................................... 88 4.1. Câu hỏi ôn tập ............................................................................................................. 88 4.2. Bài tập ......................................................................................................................... 88 TÀI LIỆU THAM KHẢO ............................................................................................... 90 Giáo trình Cơ sở dữ liệu – MySQL Trang 5 / 94

  6. Chương 1. Hệ quản trịcơ sở dữ liệu MySQL CHƯƠNG 1. HỆ QUẢN TRỊCƠ SỞ DỮ LIỆU MySQL Mục tiêu của bài học: Cuối bài học này, bạn có thể Hiểu được khái niệm vềcơ sở dữ liệu MySQL Mô hình dữ liệu quan hệ Khái niệm về bảng, khóa chính, khóa ngoại,… Tổng quan về SQL Cài đặt và tạo cơ sở dữ liệu MySQL Giới thiệu Ngày nay, cơ sở dữ liệu đã có nhiều ứng dụng trong mọi hoạt động của xã hội. Muốn thiết kếvà sử dụng cơ sở dữ liệu chúng ta phải nắm được các kỹ thuật cơ bản của cơ sở dữ liệu. Đó là cách thiết kế và chuẩn hóa một cơ sở dữ liệu, cách sử dụng các câu lệnh SQL để tạo, cập nhật và truy vấn cơ sở dữ liệu. Tuy nhiên, giáo trình không đề cập nhiều đến việc thiết kế, chuẩn hóa cơ sở dữ liệu mà đi sâu vào tìm hiểu về Hệ quản trịcơ sở dữ liệu MySQL và sử dụng câu lệnh SQL trong việc tạo, cập nhật và truy vấn dữ liệu. Phần lý thuyết 1.1.Tổng quan vềcơ sở dữ liệu quan hệ 1.1.1.Một số khái niệm cơ bản a.Cơ sở dữ liệu Cơ sở dữ liệu (CSDL) là một hệ thống các thông tin có cấu trúc được lưu trữ trên các thiết bịnhư băng từ, đĩa từ,… để có thể thoả mãn yêu cầu khai thác đồng thời của nhiều người sử dụng. Cơ sở dữ liệu và kỹ thuật cơ sở dữ liệu đã có ảnh hưởng rất lớn đến việc sử dụng máy tính. Có thể nói rằng cơ sở dữ liệu đóng vai trò quan trọng trong mọi lĩnh vực có sử dụng máy tính như giáo dục, thương mại, kỹ nghệ, khoa học, thư viện,…. Thuật ngữcơ sở dữ liệu trở thành một thuật ngữ phổ dụng. Một cơ sở dữ liệu là một tập hợp các dữ liệu có liên quan với nhau, được lưu trữ trên máy tính, có nhiều người sử dụng và được tổ chức theo một mô hình. Dữ liệu là những sự kiện có thể ghi lại được và có ý nghĩa. Ví dụ, để quản lý việc học tập trong một môi trường đại học, các dữ liệu là các thông tin về sinh viên, về các môn học, điểm thi… Chúng ta tổ chức các dữ liệu đó thành các bảng Giáo trình Cơ sở dữ liệu – MySQL Trang 3 / 94

  7. Chương 1. Hệ quản trị dữ liệu MySQL và lưu giữ chúng vào sổ sách hoặc sử dụng một phần mềm máy tính đểlưu giữ chúng trên máy tính. Ta có một tập các dữ liệu có liên quan đến nhau và mang nhiều ý nghĩa, đó là một cơ sở dữ liệu. b.Hệ quản trịcơ sở dữ liệu Một hệ quản trịcơ sở dữ liệu là một tập hợp chương trình giúp cho người sử dụng tạo ra, duy trì và khai thác một cơ sở dữ liệu. Nó là một hệ thống phần mềm phổ dụng, làm cho quá trình định nghĩa, xây dựng và thao tác cơ sở dữ liệu trở nên dễ dàng cho các ứng dụng khác nhau. Định nghĩa một cơ sở dữ liệu bao gồm việc đặc tả các kiểu dữ liệu, các cấu trúc và các ràng buộc cho các dữ liệu sẽđược lưu trữtrong cơ sở dữ liệu. Xây dựng một cơ sở dữ liệulà quá trình lưu trữ các dữ liệu trên các phương tiện lưu trữ được hệ quản trịcơ sở dữ liệu kiểm soát. Thao tác một cơ sở dữ liệu bao gồm các chức năng như truy vấn cơ sở dữ liệu để lấy ra các dữ liệu cụ thể, cập nhật cơ sở dữ liệu để phản ánh các thay đổi trong thế giới nhỏ và tạo ra các báo cáo từ các dữ liệu. Các hệ quản trịcơ sở dữ liệu dùng để thể hiện một cơ sở dữ liệu tin học hoá có thể là phổ dụng (là một phần mềm đóng gói) hoặc có thể là chuyên dụng (là một tập các phần mềm được tạo ra với một mục đích riêng). Hình 1.1. Các hệ quản trịcơ sở dữ liệu Người ta gọi cơ sở dữ liệu và hệ quản trịcơ sở dữ liệu bằng một thuật ngữ chung là hệcơ sở dữ liệu. 1.1.2.Mô hình dữ liệu quan hệ Mô hình dữ liệu quan hệđược Codd đề xuất năm 1970 và đến nay trởthành mô hình được sử dụng phổ biến trong các hệ quản trịcơ sở dữ liệu thương mại. Nói một cách đơn giản, Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 4 / 94

  8. Chương 1. Hệ quản trịcơ sở dữ liệu MySQL một cơ sở dữ liệu quan hệ là một cơ sở dữ liệu trong đó tất cả dữ liệu được tổ chức trong các bảng có mối quan hệ với nhau. Mỗi một bảng bao gồm các dòng và các cột: mỗi một dòng được gọi là một bản ghi (bộ) và mỗi một cột là một trường (thuộc tính). Hình sau minh hoạ cho ta thấy được 3 bảng trong một cơ sở dữ liệu: Hình 1.2. Các bảng trong cơ sở dữ liệu 1.1.3.Bảng Như đã nói ởtrên, trong cơ sở dữ liệu quan hệ, bảng là đối tượng được sử dụng để tổ chức và lưu trữ dữ liệu. Một cơ sở dữ liệu bao gồm nhiều bảng và mỗi bảng được xác định duy nhất bởi tên bảng. Một bảng bao gồm một tập các dòng và các cột: mỗi một dòng trong bảng biểu diễn cho một thực thể(trong hình trên, mỗi một dòng trong bảng SINHVIEN tương ứng với một sinh viên) và mỗi một cột biểu diễn cho một tính chất của thực thể (chẳng hạn cột NGAYSINH trong bảng SINHVIEN biểu diễn cho ngày sinh của các sinh viên được lưu trữ trong bảng). Như vậy, liên quan đến mỗi một bảng bao gồm các yếu tố sau: Tên của bảng:được sử dụng đểxác định duy nhất mỗi bảng trong cơ sở dữ liệu. Cấu trúc của bảng: Tập các cột trong bảng. Mỗi một cột trong bảng được xác định bởi một tên cột và phải có một kiểu dữ liệu nào đó (chẳng hạn cột NGAYSINH trong bảng SINHVIEN ở hình trên có kiểu là DATETIME). Kiểu dữ liệu của mỗi cột qui định giá trị dữ liệu có thểđược chấp nhận trên cột đó. Dữ liệu của bảng: Tập các dòng (bản ghi) hiện có trong bảng. 1.1.4.Khóa của bảng Trong một cơ sở dữ liệu được thiết kế tốt, mỗi một bảng phải có một hoặc một tập các cộtmà giá trị dữ liệu của nó xác định duy nhất một dòng trong một tập các dòng của bảng. Tập một hoặc nhiều cột có tính chất này được gọi là khoá của bảng. Giáo trình Cơ sở dữ liệu – MySQL Trang 5 / 94

  9. Chương 1. Hệ quản trị dữ liệu MySQL Việc chọn khoá của bảng có vai trò quan trọng trong việc thiết kếvà cài đặt các cơ sở dữ liệu quan hệ. Các dòng dữ liệu trong một bảng phải có giá trị khác nhau trên khoá. Bảng MONHOC trong hình dưới đây có khoá là cột MAMONHOC. Hình 1.3. Bảng MONHOC với khoá chính là MAMONHOC Một bảng có thể có nhiều tập các cột khác nhau có tính chất của khoá (tức là giá trị của nó xác định duy nhất một dòng dữ liệu trong bảng). Trong trường hợp này, khoá được chọn cho bảng được gọi là khoá chính (primary key) và những khoá còn lại được gọi là khoá phụ hay là khoá dự tuyển (candidate key/unique key). 1.1.5.Mối quan hệ và khóa ngoài Các bảng trong một cơ sở dữ liệu không tồn tại độc lập mà có mối quan hệ mật thiết với nhau về mặt dữ liệu. Mối quan hệnày được thể hiện thông qua ràng buộc giá trị dữ liệu xuất hiện ở bảng này phải có xuất hiện trước trong một bảng khác. Mối quan hệ giữa các bảng trong cơ sở dữ liệu nhằm đàm bảo được tính đúng đắn và hợp lệ của dữ liệu trong cơ sở dữ liệu. Trong hình sau, hai bảng LOP và KHOA có mối quan hệ với nhau. Mối quan hệnày đòi hỏi giá trị cột MAKHOA của một dòng (tức là một lớp) trong bảng LOP phải được xác định từ cột MAKHOA của bảng KHOA. Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 6 / 94

  10. Chương 1. Hệ quản trịcơ sở dữ liệu MySQL Hình 1.4. Mối quan hệ giữa hai bảng LOP và KHOAtrong cơ sở dữ liệu Mối quan hệ giữa các bảng trong một cơ sở dữ liệu thể hiện đúng mối quan hệ giữa các thực thể trong thế giới thực. Trong hình trên, mối quan hệ giữa hai bảng LOP và KHOA không cho phép một lớp nào đó tồn tại mà lại thuộc vào một khoa không có thật. Khái niệm khoá ngoài (Foreign Key) trong cơ sở dữ liệu quan hệđược sử dụng để biểu diễn mối quan hệ giữa các bảng dữ liệu. Một hay một tập các cột trong một bảng mà giá trị của nó được xác định từ khóa chính của một bảng khác được gọi là khoá ngoài. Trong hình trên, cột MAKHOA của bảng LOPđược gọi là khoá ngoài của bảng này, khoá ngoài này tham chiếu đến khoá chính của bảng KHOA là cột MAKHOA. 1.2.Tổng quan về SQL Ngôn ngữ hỏi có cấu trúc (SQL) và các hệ quản trịcơ sở dữ liệu quan hệ là một trong những nền tảng kỹ thuật quan trọng trong công nghiệp máy tính. Cho đến nay, có thể nói rằng SQL đã được xem là ngôn ngữ chuẩn trong cơ sở dữ liệu. Các hệ quản trịcơ sở dữ liệu quan hệthương mại hiện có như Oracle, SQL Server, Informix, DB2,... đều chọn SQL làm ngôn ngữ cho sản phẩm của mình. Vậy thực sự SQL là gì? Tại sao nó lại quan trọng trong các hệ quản trịcơ sở dữ liệu? SQL có thểlàm được những gì và như thếnào? Nó được sử dụng ra sao trong các hệ quản trịcơ sở dữ liệu quan hệ? Nội dung của bài này sẽ cung cấp cho chúng ta cái nhìn tổng quan về SQL và một số vấn đề liên quan. 1.2.1.SQL là ngôn ngữcơ sở dữ liệu quan hệ SQL viết tắt của Structured Query Language(ngôn ngữ hỏi có cấu trúc), là công cụ sử dụng để tổ chức, quản lý và truy xuất dữ liệu đuợc lưu trữ trong các cơ sở dữ liệu. SQL là một hệ thống ngôn ngữ bao gồm tập các câu lệnh sử dụng đểtương tác với cơ sở dữ liệu quan hệ. Giáo trình Cơ sở dữ liệu – MySQL Trang 7 / 94

  11. Chương 1. Hệ quản trị dữ liệu MySQL Tên gọi ngôn ngữ hỏi có cấu trúc phần nào làm chúng ta liên tưởng đến một công cụ (ngôn ngữ) dùng để truy xuất dữ liệu trong các cơ sở dữ liệu. Thực sự mà nói, khảnăng của SQL vượt xa so với một công cụ truy xuất dữ liệu, mặc dù đây là mục đích ban đầu khi SQL được xây dựng nên và truy xuất dữ liệu vẫn còn là một trong những chức năng quan trọng của nó. SQL được sử dụng đểđiều khiển tất cả các chức năng mà một hệ quản trịcơ sở dữ liệu cung cấp cho người dùng bao gồm: Định nghĩa dữ liệu: SQL cung cấp khảnăng định nghĩa các cơ sở dữ liệu, các cấu trúc lưu trữ và tổ chức dữ liệu cũng như mối quan hệ giữa các thành phần dữ liệu. Truy xuất và thao tác dữ liệu: Với SQL, người dùng có thể dễ dàng thực hiện các thao tác truy xuất, bổ sung, cập nhật và loại bỏ dữ liệu trong các cơ sở dữ liệu. Điều khiển truy cập: SQL có thểđược sử dụng để cấp phát và kiểm soát các thao tác của người sử dụng trên dữ liệu, đảm bảo sựan toàn cho cơ sở dữ liệu. Đảm bảo toàn vẹn dữ liệu:SQL định nghĩa các ràng buộc toàn vẹn trong cơ sở dữ liệu nhờđó đảm bảo tính hợp lệ và chính xác của dữ liệu trước các thao tác cập nhật cũng như các lỗi của hệ thống. Như vậy, có thể nói rằng SQL là một ngôn ngữ hoàn thiện được sử dụng trong các hệ thống cơ sở dữ liệu và là một thành phần không thể thiếu trong các hệ quản trịcơ sở dữ liệu. Mặc dù SQL không phải là một ngôn ngữ lập trình như C, C++, Java,... song các câu lệnh mà SQL cung cấp có thểđược nhúng vào trong các ngôn ngữ lập trình nhằm xây dựng các ứng dụng tương tác với cơ sở dữ liệu. Khác với các ngôn ngữ lập trình quen thuộc như Java, C#, PHP,... SQL là ngôn ngữ có tính khai báo. Với SQL, người dùng chỉ cần mô tả các yêu cầu cần phải thực hiện trên cơ sở dữ liệu mà không cần phải chỉ ra cách thức thực hiện các yêu cầu như thế nào. Chính vì vậy, SQL là ngôn ngữ dễ tiếp cận và dễ sử dụng. 1.2.2.Vai trò của SQL Bản thân SQL không phải là một hệ quản trịcơ sở dữ liệu, nó không thể tồn tại độc lập. SQL thực sự là một phần của hệ quản trịcơ sở dữ liệu, nó xuất hiện trong các hệ quản trị cơ sở dữ liệu với vai trò ngôn ngữ và là công cụ giao tiếp giữa người sử dụng và hệ quản trịcơ sở dữ liệu. Trong hầu hết các hệ quản trịcơ sở dữ liệu quan hệ, SQL có những vai trò như sau: SQL là ngôn ngữ hỏi có tính tương tác:Người sử dụng có thể dễ dàng thông qua các trình tiện ích để gởi các yêu cầu dưới dạng các câu lệnh SQL đến cơ sở dữ liệu và nhận kết quả trả về từcơ sở dữ liệu Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 8 / 94

  12. Chương 1. Hệ quản trịcơ sở dữ liệu MySQL SQL là ngôn ngữ lập trình cơ sở dữ liệu: Các lập trình viên có thể nhúng các câu lệnh SQL vào trong các ngôn ngữ lập trình để xây dựng nên các chương trình ứng dụng giao tiếp với cơ sở dữ liệu SQL là ngôn ngữ quản trịcơ sở dữ liệu: Thông qua SQL, người quản trịcơ sở dữ liệu có thể quản lý được cơ sở dữ liệu, định nghĩa các cấu trúc lưu trữ dữ liệu, điều khiển truy cập cơ sở dữ liệu,... SQL là ngôn ngữ cho các hệ thống khách/chủ (client/server): Trong các hệ thống cơ sở dữ liệu khách/chủ, SQL được sử dụng như là công cụđể giao tiếp giữa các trình ứng dụng phía máy khách với máy chủcơ sở dữ liệu. SQL là ngôn ngữ truy cập dữ liệu trên Internet:Cho đến nay, hầu hết các máy chủ Web cũng như các máy chủ trên Internet sử dụng SQL với vai trò là ngôn ngữđểtương tác với dữ liệu trong các cơ sở dữ liệu. SQL là ngôn ngữcơ sở dữ liệu phân tán:Đối với các hệ quản trịcơ sở dữ liệu phân tán, mỗi một hệ thống sử dụng SQL để giao tiếp với các hệ thống khác trên mạng, gửi và nhận các yêu cầu truy xuất dữ liệu với nhau. SQL là ngôn ngữ sử dụng cho các cổng giao tiếp cơ sở dữ liệu: Trong một hệ thống mạng máy tính với nhiều hệ quản trịcơ sở dữ liệu khác nhau, SQL thường được sử dụng như là một chuẩn ngôn ngữđể giao tiếp giữa các hệ quản trịcơ sở dữ liệu. 1.2.3.Quy tắc sử dụng tên trong SQL Các đối tượng trong cơ sở dữ liệu dựa trên SQL được xác định thông qua tên của đối tượng. Tên của các đối tượng là duy nhất trong mỗi cơ sở dữ liệu. Tên được sử dụng nhiều nhất trong các truy vấn SQL và được xem là nền tảng trong cơ sở dữ liệu quan hệ là tên bảng và tên cột. Trong các cơ sở dữ liệu lớn với nhiều người sử dụng, khi ta chỉđịnh tên của một bảng nào đó trong câu lệnh SQL, hệ quản trịcơ sở dữ liệu hiểu đó là tên của bảng do ta sở hữu (tức là bảng do ta tạo ra).Thông thường, trong các hệ quản trịcơ sở dữ liệu này cho phép những người dùng khác nhau tạo ra những bảng trùng tên với nhau mà không gây ra xung đột về tên. Nếu trong một câu lệnh SQL ta cần chỉđến một bảng do một người dùng khác sở hữu (hiển nhiên là phải được phép) thì tên của bảng phải được viết sau tên của người sở hữu và phân cách với tên người sở hữu bởi dấu chấm (.) : tên_người_sở_hữu.tên_bảng Một sốđối tượng cơ sở dữ liệu khác (như khung nhìn, thủ tục, hàm,..), việc sử dụng tên cũng tương tựnhư đối với bảng. Giáo trình Cơ sở dữ liệu – MySQL Trang 9 / 94

  13. Chương 1. Hệ quản trị dữ liệu MySQL Ta có thể sử dụng tên cột một cách bình thường trong các câu lệnh SQL bằng cảch chỉ cần chỉđịnh tên của cột trong bảng. Tuy nhiên, nếu trong câu lệnh có liên quan đến hai cột trở lên có cùng tên trong các bảng khác nhau thì bắt buộc phải chỉđịnh thêm tên bảng trước tên cột; tên bảng và tên cột được phân cách nhau bởi dấu chấm. Ví dụ: dưới đây minh hoạ cho ta thấy việc sử dụng tên bảng và tên cột trong câu lệnh SQL: SELECT masv,hodem,ten,sinhvien.malop,tenlop FROMdbo.sinhvien,dbo.lop WHEREsinhvien.malop = lop.malop 1.3.Hệ quản trịcơ sở dữ liệu MySQL 1.3.1.Giới thiệu Hệ quản trịcơ sở dữ liệu MySQL Khái niệm MySQL là hệ quản trịcơ sở dữ liệu tự do nguồn mở phổ biến nhất thế giới và được các nhà phát triển rất ưa chuộng trong quá trình phát triển ứng dụng. Vì MySQL là cơ sở dữ liệu tốc độ cao, ổn định và dễ sử dụng, có tính khả chuyển, hoạt động trên nhiều hệđiều hành cung cấp một hệ thống lớn các hàm tiện ích rất mạnh. Với tốc độ và tính bảo mật cao, MySQL rất thích hợp cho các ứng dụng có truy cập CSDL trên internet. MySQL miễn phí hoàn toàn cho nên bạn có thể tải về MySQL từ trang chủ hoặc có thểcài đặt các phần mềm có tích hợp sẵn MySQL. Nó có nhiều phiên bản cho các hệđiều hành khác nhau: phiên bản Win32 cho các hệđiều hành dòng Windows, Linux, Mac OS X, Unix, FreeBSD, NetBSD, Novell NetWare, SGI Irix, Solaris, SunOS, ... MySQL là một trong những ví dụ rất cơ bản về Hệ quản trị cơ sở dữ liệu quan hệ sử dụng Ngôn ngữ truy vấn có cấu trúc (SQL).MySQL được sử dụng cho việc bổ trợ PHP, Perl và nhiều ngôn ngữkhác, nó làm nơi lưu trữ những thông tin trên các trang web viết bằng PHP hay Perl,... Hình 1.5. Hệ quản trịcơ sở dữ liệu MySQL a.Một sốđặc điểm của MySQL MySQL là một phần mềm quản trị CSDL dạng server-based (gần tương đương với SQL Server của Microsoft). Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 10 / 94

  14. Chương 1. Hệ quản trịcơ sở dữ liệu MySQL MySQL quản lý dữ liệu thông qua các CSDL, mỗi CSDL có thể có nhiều bảng quan hệ chứa dữ liệu. MySQL có cơ chế phân quyền người sử dụng riêng, mỗi người dùng có thểđược quản lý một hoặc nhiều CSDL khác nhau, mỗi người dùng có một tên truy cập (user name) và mật khẩu (Password)tương ứng để truy xuất đến CSDL. Khi ta truy vấn tới CSDL MySQL, ta phải cung cấp tên truy cập và mật khẩu của tài khỏan có quyền sử dụng CSDL đó. Nếu không, chúng ta sẽkhông làm được gì cả giống như quyền chứng thực người dung trong SQL Server vậy. b.MySQL - cơ sở dữ liệu mã nguồn mở phổ biến nhất Cơ sở dữ liệu MySQL đã trởthành cơ sở dữ liệu mã nguồn mở phổ biến nhất trên thế giới vì cơ chế xử lý nhanh và ổn định, sựđáng tin cậy cao và dễ sử dụng. MySQL được sử dụng mọi nơi, ngay cả châu Nam Cực - bởi các nhà phát triển Web riêng lẻcũng như rất nhiều các tổ chức lớn nhất trên thế giới để tiết kiệm thời gian và tiền bạc cho những websites có dung lượng lớn, phần mềm đóng gói, bao gồm cả những nhà đi đầu trong lĩnh vực công nghiệp công nghệnhư Yahoo!, Alcatel-Lucent, Google, Nokia, YouTube và Zappos.com. MySQL không chỉlà cơ sở dữ liệu mã nguồn mở phổ biến nhất trên thế giới, nó còn trở thành cơ sở dữ liệu được chọn cho thế hệ mới của các ứng dụng xây dựng trên nền Linux, Apache, MySQL, PHP/Perl/Python. MySQL chạy trên hơn 20 nền tảng (Flatform) bao gồm: Linux, Windows, OS/X, HP-UX, AIX, Netware,…mang đến cho bạn tính linh hoạt trong việc sử dụng. Dù bạn mới làm quen với công nghệcơ sở dữ liệu hay là một nhà phát triển giàu kinh nghiệm hoặc là DBA, MySQL sẽ giúp bạn thành công. Sau đây là những lý do bạn nên chọn MySQL cho ứng dụng của mình: Tính linh hoạt: Máy chủcơ sở dữ liệu MySQL cung cấp đặc tính linh hoạt, có sức chứa để xử lý các ứng dụng được nhúng sâu với dung lượng chỉ1MB để chạy các kho dữ liệu đồ sộlên đến hàng terabytes thông tin. Sự linh hoạt về nền tảng (flatform) là một đặc tính lớn của MySQL với tất cả các phiên bản của Linux, Unix, và Windows đang được hỗ trợ. Và dĩ nhiên, tính chất mã nguồn mở của MySQL cho phép sự tùy biến hoàn toàn theo ý muốn để thêm vào các yêu cầu thích hợp cho Database Server. Tính thực thi cao: Kiến trúc storage-engine cho phép các chuyên gia cơ sở dữ liệu cấu hình máy chủcơ sở dữ liệu MySQL đặc trưng cho các ứng dụng đặc thù. Dù ứng dụng là một hệ thống xử lý giao dịch tốc độ cao hay website dung lượng lớn phục vụ hàng triệu yêu cầu mỗi ngày, MySQL có thểđáp ứng khảnăng xử lý những đòi hỏi khắt khe nhất của bất kỳ hệ thống nào. Với các tiện ích tải tốc độcao, đặc biệt bộ nhớcaches, và các cơ chế Giáo trình Cơ sở dữ liệu – MySQL Trang 11 / 94

  15. Chương 1. Hệ quản trị dữ liệu MySQL xửlý nâng cao khác, MySQL đưa ra tất cảcác vũ khí cần phải có cho các hệ thống doanh nghiệp khó tính ngày nay. Có thể sử dụng ngay: Sựđáng tin cậy cao và tính “Sử dụng ngay” là những tiêu chuẩn đảm bảo của MySQL. MySQL đưa ra nhiều tùy chọn có thể dùng ngay từ cấu hình tái tạo chủ/tớ tốc độcao, để các nhà phân phối thứ3 đưa ra những giải pháp có thể dùng ngay duy nhất cho server cơ sở dữ liệu MySQL. Hỗ trợ giao dịch mạnh: MySQL đưa ra một trong sốnhững engine giao dịch cơ sở dữ liệu mạnh nhất trên thịtrường. Các đặc trưng bao gồm hỗ trợ giao dịch ACID hoàn thiện (Atomic - tựđộng, Consistent - thống nhất, Isolated - độc lập, Durable - bền vững), khóa mức dòng không hạn chế, khảnăng giao dịch được phân loại, và hỗ trợ giao dịch đa dạng (multi-version) mà người đọc không bao giờ gây trở ngại cho người viết và ngược lại. Tính toàn vẹn của dữ liệu cũng phải được bảo đảm trong suốt quá trình server có hiệu lực, các mức giao dịch độc lập được chuyên môn hóa, và phát hiện khóa chết ngay lập tức. Nơi lưu trữ web và data đáng tin cậy: MySQL là nhà máy chuẩn cho các website phải trao đổi thường xuyên vì nó có engine xử lý tốc độ cao, khảnăng chèn dữ liệu nhanh ghê gớm và hỗ trợ mạnh cho các chức năng chuyên dụng của web như tìm kiếm văn bản nhanh. Những tính năng này cũng được áp dụng cho môi trường lưu trữ dữ liệu mà MySQL tăng cường đến hàng terabyte cho các server đơn. Các tính năng khác như bảng nhớ chính, cây B và chỉ sốbăm, và bảng lưu trữđã được cô lại để giảm các yêu cầu lưu trữđến 80% làm cho MySQL trở thành lựa chọn tốt nhất cho cảứng dụng web và các ứng dụng doanh nghiệp. Chếđộ bảo mật dữ liệu mạnh: Vì bảo mật dữ liệu cho một công ty là công việc số một của các chuyên gia vềcơ sở dữ liệu, MySQL đưa ra tính năng bảo mật đặc biệt chắc chắn dữ liệu sẽđược bảo mật tuyệt đối. Trong việc xác nhận truy cập cơ sở dữ liệu, MySQL cung cấp các kĩ thuật mạnh mà chắc chắn chỉcó người sử dụng đã được xác nhận mới có thể truy nhập được vào server cơ sở dữ liệu, với khảnăng này để chặn người dùng ngay từ mức máy khách là điều có thểlàm được. SSH và SSL cũng được hỗ trợđể chắc chắn các kết nối được an toàn và bảo mật. Một đối tượng framework đặc quyền được đưa ra mà người sử dụng chỉ có thể nhìn thấy dữ liệu, các hàm mã hóa và giải mã dữ liệu mạnh chắc chắn rằng dữ liệu sẽđược bảo mật. Cuối cùng, tiện ích sao lưu (backup) và khôi phục (recovery) cung cấp bởi MySQL và các hãng phần mềm thứ 3 cho phép backup logic và vật lý hoàn thiện cũng như khôi phục (recovery) toàn bộ hoặc tại một thời điểm nào đó. Sự phát triển ứng dụng hỗn hợp: Một trong số các lý do khiến cho MySQL là cơ sở dữ liệu mã nguồn mở phổ biến nhất thế giới là nó cung cấp hỗ trợ hỗn hợp cho bất kỳ sự phát triển ứng dụng nào cần. Trong cơ sở dữ liệu, hỗ trợ có thểđược tìm thấy trong các thủ tục lưu (stored procedure), toàn vẹn dữ liệu (trigger), hàm xử lý (function),khung Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 12 / 94

  16. Chương 1. Hệ quản trịcơ sở dữ liệu MySQL nhìn(view),con trỏ(cursor), chuẩn ngôn ngữ (ANSI-standard SQL), và nhiều nữa. Với các ứng dụng nhúng, thư viện plug-in có sẵn đểnhúng vào cơ sở dữ liệu MySQL hỗ trợ trong bất kỳứng dụng nào. MySQL cũng cung cấp các bộ kết nối như: ODBC, JDBC, … để cho phép tất cả các form của ứng dụng sử dụng MySQL như một server quản lý dữ liệu được ưu tiên. Dễ dàng quản lý: MySQL trình diễn khảnăng cài đặt nhanh đặc biệt với thời gian ở mức trung bình từ lúc download phần mềm đến khi cài đặt hoàn thành chỉ mất chưa đầy 15 phút. Điều này đúng cho dù nền tảng (flatform) là Microsoft Windows, Linux, Macintosh hay Unix. Khi đã được cài đặt, tính năng tự quản lý như tựđộng mở rộng không gian, tự khởi động lại, và cấu hình động sẵn sàng cho người quản trịcơ sở dữ liệu làm việc. MySQL cũng cung cấp một bộ hoàn thiện các công cụ quản lý đồ họa cho phép một DBA quản lý, sửa chữa, và điều khiển hoạt động của nhiều server MySQL từ một máy trạm đơn. Nhiều công cụ của các hãng phần mềm thứ3 cũng có sẵn trong MySQL đểđiều khiển các tác vụ từ thiết kế dữ liệu và ETL, đến việc quản trịcơ sở dữ liệu hoàn thiện, quản lý công việc, và thực hiện kiểm tra. Mã nguồn mở tự do và hỗ trợ 24/7: Nhiều công ty lưỡng lự trong việc giao phó toàn bộ cho phần mềm mã nguồn mở vì họ tin họ không thểtìm được một cách hỗ trợ hay mạng lưới an toàn phục vụ chuyên nghiệp, hiện tại, họ tin vào phần mềm có bản quyền để chắc chắn về sự thành công toàn diện cho các ứng dụng chủ chốt của họ. Những lo lắng của họ có thểđược dẹp bỏ với MySQL, sự bồi thường là có trong mạng lưới MySQL. Tổng chi phí thấp nhất:Bằng cách sử dụng MySQL cho các dự án phát triển mới, các công ty đang thấy rõ việc tiết kiệm chi phí. Được hoàn thành thông qua sử dụng máy chủ (server) cơ sở dữ liệu MySQL và kiến trúc scale-out, các doanh nghiệp đã tìm ra cái mà họ có thểđạt được ở mức ngạc nhiên về khảnăng xửlý. Thêm vào đó, tínhđáng tin cậy và dễ duy trì của MySQL ở mức trung bình mà người quản trịcơ sở dữ liệu không phải mất nhiều thời gian sửa chữa hay vấn đề về thời gian chết. 1.3.2.Hướng dẫn cài đặt MySQL với Xampp a.Giới thiệu về Xampp Trong phần trước của giáo trình, chúng ta đã nghiên cứu khá kỹ về HTML, CSS và JavaScript. Chúng là những ngôn ngữ cho phép website hiển thịở phía client. Mỗi một ứng dụng web mà chúng ta nhìn thấy đơn giản chỉ là những tài nguyên được hiển thịở phía client. Tuy nhiên, một ứng dụng web hoàn chỉnh không chỉ dừng lại ởđó, nó còn có rất nhiều tài nguyên được lưu trữở phía server mà qua một ngôn ngữ lập trình nào đó tài nguyên sẽ hiển thị trên máy client. Ởđây muốn nói đến ngôn ngữ lập trình web PHP. Giáo trình Cơ sở dữ liệu – MySQL Trang 13 / 94

  17. Chương 1. Hệ quản trị dữ liệu MySQL Các máy client không thể hiểu được PHP mà chỉ hiểu được HTML, CSS và JavaScript. Vậy những người lập trình web phải làm thế nào để có thể lập trình 1 ứng dụng web hoàn chỉnh rồi sau đó mới đưa lên host thực để chạy. Xampp Server chính là giải pháp ởđây. Xampp là một bộ công cụ lập trình PHP có thểcài đặt được trên nhiều nền tảng khác nhau. ChữX đầu tiên trong cụm từ Xampp ám chỉ cross-platform nghĩa là Xampp có thể chạy trên Windows, Linux, Mac OS, Solaris, còn các ký tự còn lại mang các ý nghĩa sau:     A=Apache, bao gồm 1 Apache HTTP Server giúp chạy các ứng dụng web. M = MySQL, hệ quản trịcơ sở dữ liệu MySQL cũng được bao gồm trong Xampp P = PHP, ngôn ngữ lập trình PHP P = Perl, ngôn ngữ lập trình Perl b.Hướng dẫn cài đặt Xampp là chương trình tạo máy chủ Web (Web Server) trên máy tính cá nhân (Localhost) được tích hợp sẵn Apache, PHP, MySQL, FTP Server, Mail Server và các công cụnhư phpMyAdmin. Gói phần mềm Xampp là miễn phí, bạn có thể tải về bản mới nhất tại tramg chủ Xampp: http://www.apachefriends.org/en/Xampp.html Tính đến thời điểm hiện tại, Xampp đã trải qua rất nhiều phiên bản khác nhau. Giáo trình sẽhướng dẫn các bạn cài đặt Xampp phiên bản 1.8.3. Các bước thực hiện cài đặt như sau: Bước 1: Download Xampp 1.8.3 Bạn truy cập vào trang chủapache để download phiên bản Xampp mới nhất cho Windows. Bản mới nhất hiện tại là 1.8.3. Bạn chọn bản Installer. Hình 1.6. Download Xampp phiên bản 1.8.3 Bước 2: Cài đặt Xampp 1.8.3: Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 14 / 94

  18. Chương 1. Hệ quản trịcơ sở dữ liệu MySQL Sau khi download xong, bạn click đúp vào file Xampp-win32-1.8.3-1-VC11-installer.exe mà bạn vừa download vềđểcài đặt Xampp. Bạn click Nextđể tiếp tục: Tiếp đến bạn chọn các dịch vụ kèm theo với Xampp, clickNextđể tiếp tục: Mặc định Xampp sẽđược cài đặt vào ổC theo đường dẫn C:\Xampp. Bạn có thể click vào Browseđể chọn đường dẫn khác. Bạn click InstallđểXampp tiến hành cài đặt: Giáo trình Cơ sở dữ liệu – MySQL Trang 15 / 94

  19. Chương 1. Hệ quản trị dữ liệu MySQL Màn hình hiển thị tiến độcài đặt hiện ra: Quá trình cài đặt Xampp kết thúc, bạn click vào nút Finishđể hoàn tất: Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 16 / 94

  20. Chương 1. Hệ quản trịcơ sở dữ liệu MySQL Khi đó Xampp sẽ hỏi bạn có muốn quản lý tất cả các dịch vụ thông qua Xampp Control Panel hay không. Bạn hãy click vào Yes: Control Panel trong Xampp: Giáo trình Cơ sở dữ liệu – MySQL Trang 17 / 94

  21. Chương 1. Hệ quản trị dữ liệu MySQL Quá trình cài đặt đã hoàn tất, bây giờ bạn vào trình duyệt và gõ localhost xem nào. Nếu xuất hiện như hình bên dưới thì coi như bạn đã cài đặt thành công. 1.3.3.Các thao tác cơ bản với phpMyAdmin Sau khi cài đặt Xampp thành công, bạn có thể truy cập phpMyadmin (công cụ quản trịcơ sở dữ liệu MySQL) bằng cách gõ URL: http://127.0.0.1/phpmyadmin hoặc http://localhost/phpmyadmin. Khi đó, giao diện sẽ hiện ra như sau: Hình 1.7. Giao diện quản trị phpMyAdmin Lựa chọn ngôn ngữ mặc định cho phpMyAdmin: Chọn khung Language để lựa chọn ngôn ngữ thích hợp: Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 18 / 94

  22. Chương 1. Hệ quản trịcơ sở dữ liệu MySQL Hình 1.8. Lựa chọn ngôn ngữ trong phpMyAdmin Tạo mới cơ sở dữ liệu: Để tạo mới cơ sở dữ liệu trong phpMyadmin, ta chọn Database trong tab của cửa sổ phpMyAdmin: Sau đó, ta nhập tên cơ sở dữ liệu và lựa chọn bảng mã mặc định rồi chọn Create. Thường thì để sử dụng bảng mã Unicode gõ tiếng việt tốt ta chọn bảng mã utf8_general_ci. Khi đó, hệ thống sẽ thông báo tạo cơ sở dữ liệu thành công: Tạo bảng (table) với chếđộ Design: Để thực hiện tạo bảng cơ sở dữ liệu, ta click chọn nút Create Table nằm ởphía dưới tên cơ sở dữ liệu. Giáo trình Cơ sở dữ liệu – MySQL Trang 19 / 94

  23. Chương 1. Hệ quản trị dữ liệu MySQL Khi đó, cửa sổ sẽ hiển thị giao diện tạo bảng cơ sở dữ liệu (table) ở chếđộ thiết kế. Ta chỉ việc đặt tên bảng, đặt tên các trường dữ liệu, chọn kiểu dữ liệu cho từng trường bấm Save đểlưu dữ liệu: Import và Export dữ liệu: -Export dữ liệu: Không giống như trong SQL server, trong MySQL không có nhiều cách để có thể thực hiện sao lưu dữ liệu. Cách thông dụng nhất thường được dùng là export cơ sở dữ liệu ra dưới dạng SQL script. Ta chọn tab Export trong phpMyAdmin. Khi đó cửa sổ sẽ hiển thị giao diện tùy chỉnh export SQL. Ởđây, bạn có thể tùy chọn 1 trong 2 phương pháp export là Quick - display only the minimal options hoặc Custom - display all possible options, sau đó lựa chọn định dạng của file export. Việc cuối cùng là bấm Go để thực hiện thao tác. Trong trường hợp tùy chọn, ta có thểđặt tên file, bảng mã ký tự, trạng thái nén, định dạng file kết xuất… Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 20 / 94

  24. Chương 1. Hệ quản trịcơ sở dữ liệu MySQL -Import dữ liệu: Ta chọn tab Import trong phpMyAdmin. Chọn Browse để chọn file cần thực hiện import. Sau đó click chọn Gođể import dữ liệu. Sử dụng cửa sổ lệnh SQL: Đây là một thao tác quan trọng và được sử dụng thường xuyên khi làm việc với MySQL. Ta click chọn tab SQLđể xuất hiện cửa sổ lệnh cho phép chúng ta gõ câu lệnh SQL vào. Sau đó, để thực thi câu lệnh SQL, ta chọn Go. Giáo trình Cơ sở dữ liệu – MySQL Trang 21 / 94

  25. Chương 1. Hệ quản trị dữ liệu MySQL Hình 1.9. Cửa sổ lệnh SQL Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 22 / 94

  26. Chương 1. Hệ quản trịcơ sở dữ liệu MySQL BÀI TẬP 2.1.Câu hỏi ôn tập Câu 1. SQL là viết tắt của cụm từ nào? A.Strong Question Language B.Structured Question Language C.Structured Query Language Câu 2. Thành phần nào sau đây không phải là thành phần của cơ sở dữ liệu? B.Bảng D.Mối quan hệ giữa các bảng A.MySQL C.Khóa Câu 3. Điều nào sau đây không đúng khi nói về SQL? A.SQL là ngôn ngữ hỏi có tính tương tác B.SQL là ngôn ngữ lập trình cơ sở dữ liệu C.SQL là ngôn ngữ quản trịcơ sở dữ liệu D.SQL là hệ quản trịcơ sở dữ liệu 2.2.Bài tập Bài 1. Download và cài đặt phần mềm Xampp Bài 2. Sử dụng phpMyadmin để thực hiện các thao tác sau ở chếđộ Design: oTạo cơ sở dữ liệu oTạo bảng trong cơ sở dữ liệu oImport và Export dữ liệu (cảcơ sở dữ liệu hoặc chỉ có các bảng trong cơ sở dữ liệu) Giáo trình Cơ sở dữ liệu – MySQL Trang 23 / 94

  27. Chương 2. Nhóm lệnh định nghĩa dữ liệu Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 24 / 94

  28. Chương 2. Nhóm lệnh định nghĩa dữ liệu DDL CHƯƠNG 2. NHÓM LỆNH ĐỊNH NGHĨA DỮ LIỆU (DDL) Mục tiêu: Kết thúc chương, học viên có thể: Hiểu được các kiểu dữ liệu trong MySQL Các câu lệnh định nghĩa dữ liệu Tạo bảng, sửa đổi, xóa bảng Phần lý thuyết 2.1.Các kiểu dữ liệu trong MySQL 2.1.1.Storage Engine MySQL hỗ trợ nhiều kiểu bảng dữ liệu hoặc các máy lưu trữkhác nhau để giúp chúng ta tối ưu hóa CSDL của mình. Các kiểu bảng dữ liệu trong MySQL gồm: ISAM, MyISAM, InnoDB, BDB, MERGE và HEAP. Đặc điểm quan trọng nhất để phân biệt các kiểu bảng dữ liệu ở trên là tính có an toàn giao tác hoặc không. Chỉ các bảng dữ liệu kiểu InnoDB và BDB là có tính an toàn giao tác (transaction) và chỉ những bảng dữ liệu kiểu MyISAM hỗ trợ chỉ mục toàn văn bản (full text index) và các đặc tính tìm kiếm. MyISAM cũng là kiểu bảng dữ liệu mặc định khi bạn tạo bảng dữ liệu mới mà không khai báo kiểu bảng dữ liệu cụ thể. Dưới đây là những đặc điểm chính của từng kiểu bảng dữ liệu: ISAMđã bị loại khỏi các phiên bản từ 5.x trởđi. Nó được thay thế bởi MyISAM. Một bảng dữ liệu kiểu ISAM có dung lượng tối đa là 4GB và không thể di chuyển. MyISAM là mặc định khi tạo ra một bảng dữ liệu mới. Các thao tác trên bảng dữ liệu kiểu này diễn ra rất nhanh, tuy nhiên nó lại không hỗ trợđặc tính an toàn giao tác. Dung lượng của một bảng dữ liệu kiểu MyISAM phụ thuộc vào hệđiều hành. Bảng dữ liệu kiểu MyISAM có thể chuyển từ hệ thống này sang hệ thống khác. Với bảng dữ liệu kiểu MyISAM bạn có thể có tới 64 khóa và chiều dài tối đa của khóa là 1024 byte. InnoDB: Khác với bảng dữ liệu kiểu MyISAM, bảng dữ liệu kiểu InnoDB có đặc tính an toàn giao tác và hỗ trợ khóa dòng (row level locking). Các khóa ngoại được hỗ trợ trong kiểu InnoDB. Tập tin dữ liệu của bảng dữ liệu kiểu InnoDB có thểlưu trữở nhiều file khác nhau. Vì thếdung lượng của bảng InnoDB phụ thuộc vào dung lượng của ổđĩa. Giống như bảng dữ liệu kiểu MyISAM, tập tin dữ liệu của InnoDB có thể chuyển từ hệ thống này sang Giáo trình Cơ sở dữ liệu – MySQL Trang 25 / 94

  29. Chương 2. Nhóm lệnh định nghĩa dữ liệu hệ thống khác. Điểm bất lợi của InnoDB so với MyISAM là nó cần nhiều không gian lưu trữ. BDBcũng tương tựnhư InnoDB ở tính an toàn giao tác. Nó hỗ trợ khóa trang (page level locking). Tuy nhiên tập tin dữ liệu cả DB lại không thể chuyển đổi giữa các hệ thống. MERGE: Bảng dữ liệu kiểu Merge được thêm vào để giải quyết vấn đề hạn chế của MyISAM. Nó biến nhiều bảng MyISAM thành một bảng dữ liệu vì thế những hạn chế về dung lượng của MyISAM không còn là trở ngại kỹ thuật nữa. HEAP: Bảng dữ liệu kiểu Heap được lưu trữ trong bộ nhớ. Do đó, nó là kiểu bảng được thao tác nhanh nhất. Do bởi cơ chếlưu trữ, dữ liệu sẽ bị mất đi khi máy tính không còn nguồn điện và đối khi nó còn có thể gây ra tình trạng tràn bộ nhớđối với máy chủcơ sở dữ liệu. Các bảng Heap không hỗ trợ những trường có kiểu AUTO_INCREMENT, BLOB và TEXT. 2.1.2.Kiểu dữ liệu Chuẩn ANSI/ISO SQL cung cấp các kiểu dữ liệu khác nhau để sử dụng trong các cơ sở dữ liệu dựa trên SQL và trong ngôn ngữ SQL. Dựa trên cơ sở các kiểu dữ liệu do chuẩn ANSI/ISO SQL cung cấp, các hệ quản trịcơ sở dữ liệu hiện nay có thể sử dụng các dạng dữ liệu khác nhau trong sản phẩm của mình. Bảng dưới đây liệt kê một số kiểu dữ liệu thông dụng được sử dụng trong MySQL. Không có nhiều khác biệt về dữ liệu của MySQL với các cơ sở dữ liệu khác, các kiểu dữ liệu thường dùng của MySQL chúng ta cần phải chú ý bao gồm: numeric, date and time và string. Khi thiết kếcơ sở dữ liệu cho một ứng dụng sử dụng MySQL chúng ta cần phải chú ý chọn kiểu dữ liệu cho phù hợp với thực tếcũng như để tránh lãng phí bộ nhớ. a.Kiểu dữ liệu Numberic Kiểu số nguyên: Loại Phạm vi Bytes Giải thích Mặc định Số nguyên rất nhỏ Tinyint -127 đến 128 hay 0 …255 1 0 Smallint -32768 đến 32767 hay 0…65535 2 Số nguyên nhỏ 0 Mediumint -8388608 đến 838860 hay 0…16777215 3 Số nguyên vừa 0 -231đến 231 -1 hay 0…232- 1 -263đến 263 -1 hay 0…264 -1 Int 4 Số nguyên 0 Bigint 8 Số nguyên lớn 0 Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 26 / 94

  30. Chương 2. Nhóm lệnh định nghĩa dữ liệu DDL Kiểu số thực: Loại Phạm vi Bytes Giải thích Mặc định Số thập phân dạng single hay double float Phụ thuộc vào số thập phân 4 0 Số thập phân dạng single. +/-1 . 175494351E-38 +/-3 . 40282346638 float(M,D) 4 0 +/-1 . 7976931348623157308 +/-2 . 2250738585072014E- 308 Số thập phân dạng double Double(M,D) 8 0 Số chấm động lưu dưới dạng char float(M[,D]) 4 0 b.Kiểu dữ liệu Datetime Kiểu dữ liệu date and time cho phép chúng ta nhập liệu dưới dạng chuỗi ngày/ tháng/ năm hay dạng số. Loại Phạm vi Giải thích Mặc định 1000-01-01 đến 9999-12-31 Date trình bày dưới dạng yyyy-mm-dd. Date 0000-00-00 00:00:00 đến 23:59:59 Time trình bày dưới dạng hh:mm:ss. Time 00:00:00 1000-01-01, 00:00:00 đến Date và time trình bày dưới dạng yyyy-mm- dd, hh:mm:ss. Datetime 0000-00-00 00:00:00 9999-12-31, 23:59:59 c.Kiểu dữ liệu string Kiểu dữ liệu string chia làm 3 loại, loại thứ nhất như char (chiều dài cốđịnh) và varchar (chiều dài biến thiên). Char cho phép bạn nhập liệu dưới dạng chuỗi với chiều dài lớn nhất bằng chiều dài định nghĩa, nhưng khi truy cập dữ liệu trên trường có khai báo dạng này, bạn cần xữ lý khoản trắng. điều này có nghĩa là nếu ta khai báo chiều dài là 10, nhưng ta chỉ nhập chuỗi 4 kí tự, MySQL lưu trữ chuỗi trong bộ nhớ với chiều dài là 10. Giáo trình Cơ sở dữ liệu – MySQL Trang 27 / 94

  31. Chương 2. Nhóm lệnh định nghĩa dữ liệu   Ngược lại với kiểu dữ liệu char là varchar, chiều dài lớn nhất bạn có thể nhập vào bằng chiều dài đã định nghĩa cho trường này, bộ nhớ chỉlưu chiều dài đúng với chiều dài của chuỗi ta đã nhập. Như vậy, có nghĩa là nếu ta khai báo kiểu varchar 10 kí tự, nhưng chỉ nhập 5 kí tự, MySQL chỉlưu trữ chiều dài 5 kí tự, ngoài ra, khi ta truy cập đến trường có kiểu dữ liệu này thì không cần giải quyết khoảng trắng. Loại thứhai là text hay Blob, text cho phép lưu trữ rất lớn,blob cho phép lưu đối tượng nhị phân. Loại thứ 3 là Enum và set.     2.2.Các câu lệnh định nghĩa dữ liệu bảng 2.2.1.Tạo bảng dữ liệu Như đã nói đến ở phần đầu của giáo trình, bảng dữ liệu là cấu trúc có vai trò quan trọng nhất trong cơ sở dữ liệu quan hệ. Toàn bộ dữ liệu của cơ sở dữ liệu được tổ chức trong các bảng, những bảng này có thể là những bảng hệ thống được tạo ra khi tạo lập cơ sở dữ liệu và cũng có thể là những bảng do người sửdụng định nghĩa. Hình 2.1. Bảng trong Cơ sở dữ liệu quan hệ Trong các bảng, dữ liệu được tổ chức dưới dạng các dòng và cột. Mỗi một dòng là một bản ghi duy nhất trong bảng và mỗi một cột là một trường. Các bảng trong cơ sở dữ liệu được sử dụng để biểu diễn thông tin, lưu giữ dữ liệu vềcác đối tượng trong thế giới thực và/hoặc mối quan hệ giữa các đối tượng. Bảng trong hình trên bao gồm 10 bản ghi và 4 trường là MAKHOA, TENKHOA, DIENTHOAI và TRUONGKHOA. Câu lệnh CREATE TABLE được sử dụng đểđịnh nghĩa một bảng dữ liệu mới trong cơ sở dữ liệu. Khi định nghĩa một bảng dữ liệu mới, ta cần phải xác định được các yêu cầu sau đây:   Bảng mới được tạo ra sử dụng với mục đích gì và có vai trò như thế nào trong cơ sở dữ liệu. Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 28 / 94

  32. Chương 2. Nhóm lệnh định nghĩa dữ liệu DDL   Cấu trúc của bảng bao gồm những trường (cột) nào, mỗi một trường có ý nghĩa như thế nào trong việc biểu diễn dữ liệu, kiểu dữ liệu của mỗi trường là gì và trường đó có cho phép nhận giá trị NULL hay không. Những trường nào sẽ tham gia vào khóa chính của bảng. Bảng có quan hệ với những bảng khác hay không và nếu có thì quan hệnhư thế nào. Trên các trường của bảng có tồn tại những ràng buộc về khuôn dạng, điều kiện hợp lệ của dữ liệu hay không; nếu có thì sử dụng ởđâu và như thế nào.     Câu lệnh CREATE TABLEcó cú pháp như sau: CREATE TABLE tên_bảng ( tên_cột thuộc_tính_cột các_ràng_buộc [,... ,tên_cột_n thuộc_tính_cột_n các_ràng_buộc_cột_n] [,các_ràng_buộc_trên_bảng] ) Trong đó: tên_bảng Tên của bảng cần tạo. Tên phải tuân theo qui tắc định danh và không được vượt quá 128 ký tự. tên_cột Là tên của cột (trường) cần định nghĩa, tên cột phải tuân theo qui tắc định danh và không được trùng nhau trong mỗi một bảng. Mỗi một bảng phải có ít nhất một cột. Nếu bảng có nhiều cột thì định nghĩa của các cột (tên cột, thuộc tính và các ràng buộc) phải phân cách nhau bởi dấu phẩy. thuộc_tính_cột Mỗi một cột trong một bảng ngoài tên cột còn có các thuộc tính bao gồm:  Kiểu dữ liệu của cột. Đây là thuộc tính bắt buộc phải có đối với mỗi cột.  Giá trị mặc định của cột: là giá trịđược tựđộng gán cho cột nếu như người sử dụng không nhập dữ liệu cho cột một cách Giáo trình Cơ sở dữ liệu – MySQL Trang 29 / 94

  33. Chương 2. Nhóm lệnh định nghĩa dữ liệu tường minh. Mỗi một cột chỉ có thể có nhiều nhất một giá trị mặc định.   Cột có tính chất AUTO_INCREMENThay không? tức là giá trị của cột có được tựđộng tăng mỗi khi có bản ghi mới được bổ sung hay không. Tính chất này chỉ có thể sử dụng đối với các trường kiểu số.   Cột có chấp nhận giá trị NULL hay không? các_ràng_buộc Các ràng buộc được sử dụng trên mỗi cột hoặc trên bảng nhằm các mục đích sau:   Quy định khuôn dạng hay giá trị dữ liệu được cho phép trên cột (chẳng hạn qui định tuổi của một học sinh phải lớn hơn 6 và nhỏhơn 20, sốđiện thoại phải là một chuỗi bao gồm 6 chữ số,...). Những ràng buộc kiểu này được gọi là ràng buộc CHECK   Đảm bảo tính toàn vẹn dữ liệu trong một bảng và toàn vẹn tham chiếu giữa các bảng trong cơ sở dữ liệu. Những loại ràng buộc này nhằm đảm bảo tính đùng của dữ liệu như: số chứng minh nhân dân của mỗi một người phải duy nhất, nếu sinh viên học một lớp nào đó thì lớp đó phải tồn tại,... Liên quan đến những loại ràng buộc này bao gồm các ràng buộc PRIMARY KEY (khoá chính), UNIQUE (khóa dự tuyển) và FOREIGN KEY (khoá ngoài) Ví dụ: Khai báo dưới đây định nghĩa cột STT có kiểu dữ liệu là int và cột có tính chất AUTO_INCREMENT: stt INT AUTO_INCREMENT hay định nghĩa cột NGAY có kiểu datetime và không cho phép chấp nhận giá trịNULL: ngay DATETIME NOT NULL và định nghĩa cột SOLUONG kiểu int và có giá trị mặc định là 0: soluong INT DEFAULT 0 Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 30 / 94

  34. Chương 2. Nhóm lệnh định nghĩa dữ liệu DDL Ví dụ: Câu lệnh dưới đây định nghĩa bảng NHANVIEN với các trường MANV (mã nhân viên), HOTEN (họ và tên), NGAYSINH (ngày sinh của nhân viên), DIENTHOAI (điện thoại) và HSLUONG (hệ sốlương): CREATE TABLE nhanvien ( manv VARCHAR(10) NOT NULL, hoten VARCHAR(50) NOT NULL, ngaysinh DATETIME NULL, dienthoai VARCHAR(10) NULL, hsluong DECIMAL(3, 2) DEFAULT 1.92 ) Trong câu lệnh trên, trường MANV và HOTEN của bảng NHANVIEN không được NULL (tức là bắt buộc phải có dữ liệu), trường NGAYSINH và DIENTHOAI sẽ nhận giá trị NULL nếu ta không nhập dữ liệu cho chúng còn trường HSLUONG sẽ nhận giá trị mặc định là 1.92 nếu không được nhập dữ liệu. Nếu ta thực hiện các câu lệnh dưới đây sau khi thực hiện câu lệnh trên để bổ sung dữ liệu cho bảng NHANVIEN: INSERT INTO nhanvien VALUES ('NV01', 'Le Van A', '2/4/75', '886963', 2.14) INSERT INTO nhanvien (manv, hoten) VALUES ('NV02', 'Mai Thi B') INSERT INTO nhanvien (manv, hoten, dienthoai) VALUES ('NV03', 'Tran Thi C', '849290') Kết quả: Hình 2.2. Dữ liệu trong bảng NHANVIEN a.Ràng buộc CHECK Giáo trình Cơ sở dữ liệu – MySQL Trang 31 / 94

  35. Chương 2. Nhóm lệnh định nghĩa dữ liệu Ràng buộc CHECK được sử dụng nhằm chỉđịnh điều kiện hợp lệđối với dữ liệu. Mỗi khi có sựthay đổi dữ liệu trên bảng (INSERT, UPDATE), những ràng buộc này sẽđược sử dụng nhằm kiểm tra xem dữ liệu mới có hợp lệ hay không. Ràng buộc CHECK được khai báo theo cú pháp như sau: CHECK (điều_kiện) Trong đó, điều_kiện là một biểu thức logic tác động lên cột nhằm qui định giá trị hoặc khuôn dạng dữ liệu được cho phép. Trên mỗi một bảng cũng như trên mỗi một cột có thể có nhiều ràng buộc CHECK. Ví dụ: Câu lệnh dưới đây tạo bảng DIEMTOTNGHIEP trong đó qui định giá trị của cột DIEMVAN và DIEMTOAN phải lớn hơn hoặc bằng 0 và nhỏhơn hoặc bằng 10. CREATE TABLE diemtotnghiep( hoten VARCHAR(30) NOT NULL, ngaysinh DATETIME, diemvan FLOAT(4,2) CHECK (diemvan >= 0 AND diemvan <= 10), diemtoan FLOAT(4,2) CHECK (diemtoan >= 0 AND diemtoan <= 10) ) Như vậy, với định nghĩa như trên của bảng DIEMTOTNGHIEP, các câu lệnh dưới đây là hợp lệ: INSERT INTO diemtotnghiep (hoten, diemvan, diemtoan) VALUES ('Le Thanh Hoang', 9.5, 2.5) INSERT INTO diemtotnghiep (hoten, diemvan) VALUES ('Hoang Thi Mai', 2.5) còn câu lệnh dưới đây là không hợp lệ: INSERT INTO diemtotnghiep (hoten, diemvan, diemtoan) VALUES ('Tran Van Hanh', 6, 10.5) do cột DIEMTOAN nhận giá trị 10.5 không thoảmãn điều kiện của ràng buộc. Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 32 / 94

  36. Chương 2. Nhóm lệnh định nghĩa dữ liệu DDL Trong ví dụ trên, các ràng buộc được chỉđịnh ở phần khai báo của mỗi cột. Thay vì chỉ định ràng buộc trên mỗi cột, ta có thể chỉđịnh các ràng buộc ở mức bảng bằng cách khai báo các ràng buộc sau khi đã khai báo xong các cột trong bảng. Ví dụ: Câu lệnh: CREATE TABLE lop ( malop VARCHAR(10) NOT NULL, tenlop VARCHAR(30) NOT NULL, khoa SMALLINT NULL, hedaotao VARCHAR(25) NULL CHECK (hedaotao IN ('chính quy', 'tại chức')), namnhaphoc INT NULL CHECK (namnhaphoc <= YEAR(GETDATE())), makhoa VARCHAR(5) ) có thểđược viết lại như sau: CREATE TABLE lop ( malop VARCHAR(10) NOT NULL, tenlop VARCHAR(30) NOT NULL, khoa SMALLINT NULL, hedaotao VARCHAR(25) NULL, namnhaphoc INT NULL, makhoa VARCHAR(5), CHECK (namnhaphoc <= YEAR(GETDATE()) AND hedaotao IN ('chính quy','tại chức')) ) b.Ràng buộc PRIMARY KEY Giáo trình Cơ sở dữ liệu – MySQL Trang 33 / 94

  37. Chương 2. Nhóm lệnh định nghĩa dữ liệu Ràng buộc PRIMARY KEY được sử dụng đểđịnh nghĩa khoá chính của bảng. Khoá chính của một bảng là một hoặc một tập nhiều cột mà giá trị của chúng là duy nhất trong bảng. Hay nói cách khác, giá trị của khoá chính sẽgiúp cho ta xác định được duy nhất một dòng (bản ghi) trong bảng dữ liệu. Mỗi một bảng chỉ có thể có duy nhất một khoá chính và bản thân khoá chính không chấp nhận giá trị NULL. Ràng buộc PRIMARY KEY là cơ sở cho việc đảm bảo tính toàn vẹn thực thểcũng như toàn vẹn tham chiếu. Để khai báo một ràng buộc PRIMARY KEY, ta sử dụng cú pháp như sau: PRIMARY KEY [(danh_sách_cột)] Nếu khoá chính của bảng chỉ bao gồm đúng một cột và ràng buộc PRIMARY KEY được chỉđịnh ở mức cột, ta không cần thiết phải chỉđịnh danh sách cột sau từ khoá PRIMARY KEY. Tuy nhiên, nếu việc khai báo khoá chính được tiến hành ở mức bảng (sử dụng khi sốlượng các cột tham gia vào khoá là từ hai trở lên) thì bắt buộc phải chỉđịnh danh sách cột ngay sau từ khóa PRIMARY KEY và tên các cột được phân cách nhau bởi dấu phẩy. Ví dụ: Câu lệnh dưới đây định nghĩa bảng SINHVIEN với khoá chính là MASV: CREATE TABLE sinhvien ( masv VARCHAR(10) PRIMARY KEY, hodem VARCHAR(25) NOT NULL, ten VARCHAR(10) NOT NULL, ngaysinh DATETIME, gioitinh BIT, noisinh VARCHAR(255), malop VARCHAR(10) ) Với bảng vừa được tạo bởi câu lệnh ở trên, nếu ta thực hiện câu lệnh: INSERT INTO sinhvien (masv, hodem, ten, gioitinh, malop) VALUES ('0261010001', 'Lê Hoàng Phương', 'Anh', 0, 'C26101') một bản ghi mới sẽđược bổ sung vào bảng này. Nhưng nếu ta thực hiện tiếp câu lệnh: INSERT INTO sinhvien (masv, hodem, ten, gioitinh, malop) Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 34 / 94

  38. Chương 2. Nhóm lệnh định nghĩa dữ liệu DDL VALUES ('0261010001', 'Lê Hoàng Phương', 'Anh', 0, 'C26101') thì câu lệnh này sẽ bị lỗi do trùng giá trị khoá với bản ghi đã có. Hình 2.3. Thông báo lỗi trùng khóa khi nhập liệu Ví dụ: Câu lệnh dưới đây tạo bảng DIEMTHI với khoá chính là tập bao gồm hai cột MAMONHOC và MASV: CREATE TABLE diemthi( mamonhoc VARCHAR(10) NOT NULL, masv VARCHAR(10) NOT NULL, diemlan1 NUMERIC(4, 2), diemlan2 NUMERIC(4, 2), PRIMARY KEY (mamonhoc, masv) ) Lưu ý:  Mỗi một bảng chỉ có thể có nhiều nhất một ràng buộc PRIMARY KEY.  Một khoá chính có thể bao gồm nhiều cột nhưng không vượt quá 16 cột. c.Ràng buộc UNIQUE Trên một bảng chỉ có thể có nhiều nhất một khóa chính nhưng có thể có nhiều cột hoặc tập các cột có tính chất như khoá chính, tức là giá trị của chúng là duy nhất trong bảng. Tập một hoặc nhiều cột có giá trị duy nhất và không được chọn làm khoá chính được gọi là khoá phụ(khoá dự tuyển) của bảng. Như vậy, một bảng chỉ có nhiều nhất một khoá chính nhưng có thể có nhiều khoá phụ. Ràng buộc UNIQUE được sử dụng trong câu lệnh CREATE TABLE đểđịnh nghĩa khoá phụ cho bảng và được khai báo theo cú pháp sau đây: UNIQUE [(danh_sách_cột)] Ví dụ: Giả sử ta cần định nghĩa bảng LOP với khoá chính là cột MALOP nhưng đồng thời lại không cho phép các lớp khác nhau được trùng tên lớp với nhau, ta sử dụng câu lệnh như sau: Giáo trình Cơ sở dữ liệu – MySQL Trang 35 / 94

  39. Chương 2. Nhóm lệnh định nghĩa dữ liệu CREATE TABLE lop ( malop VARCHAR(10) NOT NULL, tenlop VARCHAR(30) NOT NULL, khoa SMALLINT NULL, hedaotao VARCHAR(25) NULL, namnhaphoc INT NULL, makhoa VARCHAR(5), PRIMARY KEY (malop), UNIQUE(tenlop) ) d.Ràng buộc FOREIGN KEY Các bảng trong một cơ sở dữ liệu có mối quan hệ với nhau. Những mối quan hệ này biểu diễn cho sự quan hệ giữa các đối tượng trong thế giới thực. Về mặt dữ liệu, những mối quan hệđược đảm bảo thông qua việc đòi hỏi sự có mặt của một giá trị dữ liệu trong bảng này phải phụ thuộc vào sự tồn tại của giá trị dữ liệu đó ở trong một bảng khác. Ràng buộc FOREIGN KEY được sử dụng trong định nghĩa bảng dữ liệu nhằm tạo nên mối quan hệ giữa các bảng trong một cơ sở dữ liệu. Một hay một tập các cột trong một bảng được gọi là khoá ngoại, tức là có ràng buộc FOREIGN KEY, nếu giá trị của nó được xác định từ khoá chính (PRIMARY KEY) hoặc khoá phụ (UNIQUE) của một bảng dữ liệu khác. Hình dưới đây cho ta thấy được mối quan hệ giữa 3 bảng DIEMTHI, SINHVIEN và MONHOC. Trong bảng DIEMTHI, MASV là khoá ngoài tham chiếu đến cột MASV của bảng SINHVIEN và MAMONHOC là khoá ngoài tham chiếu đến cột MAMONHOC của bảng MONHOC. Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 36 / 94

  40. Chương 2. Nhóm lệnh định nghĩa dữ liệu DDL Hình 2.4.Mối quan hệ giữa các bảng Với mối quan hệđược tạo ra như hình trên, hệ quản trịcơ sở dữ liệu sẽ kiểm tra tính hợp lệ của mỗi bản ghi trong bảng DIEMTHI mỗi khi được bổ sung hay cập nhật. Một bản ghi bất kỳ trong bảng DIEMTHI chỉ hợp lệ(đảm bảo ràng buộc FOREIGN KEY) nếu giá trị của cột MASV phải tồn tại trong một bản ghi nào đó của bảng SINHVIEN và giá trị của cột MAMONHOC phải tồn tại trong một bản ghi nào đó của bảng MONHOC. Ràng buộc FOREIGN KEY được định nghĩa theo cú pháp dưới đây: [CONSTRAINT tên_ràng_buộc]FOREIGN KEY [(danh_sách_cột)] REFERENCES tên_bảng_tham_chiếu(danh_sách_cột_tham_chiếu) [ON DELETE CASCADE | NO ACTION | SET NULL | SET DEFAULT] [ON UPDATE CASCADE | NO ACTION | SET NULL | SET DEFAULT] Việc định nghĩa một ràng buộc FOREIGN KEY bao gồm các yếu tố sau:  Tên cột hoặc danh sách cột của bảng được định nghĩa tham gia vào khoá ngoài. Tên của bảng được tham chiếu bởi khoá ngoài và danh sách các cột được tham chiếu đến trong bảng tham chiếu. Cách thức xửlý đối với các bản ghi trong bảng được định nghĩa trong trường hợp các bản ghi được tham chiếu trong bảng tham chiếu bị xoá (ON DELETE) hay cập nhật (ON UPDATE). SQL chuẩn đưa ra 4 cách xử lý:  CASCADE: Tựđộng xoá (cập nhật) nếu bản ghi được tham chiếu bị xoá (cập nhật). Giáo trình Cơ sở dữ liệu – MySQL Trang 37 / 94

  41. Chương 2. Nhóm lệnh định nghĩa dữ liệu  NO ACTION: (Mặc định) Nếu bản ghi trong bảng tham chiếu đang được tham chiếu bởi một bản ghi bất kỳ trong bảng được định nghĩa thì bàn ghi đó không được phép xoá hoặc cập nhật (đối với cột được tham chiếu).  SET NULL: Cập nhật lại khoá ngoài của bản ghi thành giá trị NULL (nếu cột cho phép nhận giá trị NULL).  SET DEFAULT: Cập nhật lại khoá ngoài của bản ghi nhận giá trị mặc định (nếu cột có qui định giá trị mặc định). Ví dụ: Câu lệnh dưới đây định nghĩa bảng DIEMTHI với hai khoá ngoài trên cột MASV và cột MAMONHOC (giả sử hai bảng SINHVIEN và MONHOC đã được định nghĩa) : CREATE TABLE diemthi ( mamonhoc VARCHAR(10) NOT NULL, masv VARCHAR(10) NOT NULL, diemlan1 NUMERIC(4, 2), diemlan2 NUMERIC(4, 2), PRIMARY KEY (mamonhoc, masv), FOREIGN KEY (mamonhoc) REFERENCES monhoc (mamonhoc) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (masv) REFERENCES sinhvien (masv) ON DELETE CASCADE ON UPDATE CASCADE ) Lưu ý:  Cột được tham chiếu trong bảng tham chiếu phải là khoá chính (hoặc là khoá phụ).  Cột được tham chiếu phải có cùng kiểu dữ liệu và độ dài với cột tương ứng trong khóa ngoài.  Bảng tham chiếu phải được định nghĩa trước. Do đó, nếu các bảng có mối quan hệ vòng, ta có thể không thểđịnh nghĩa ràng buộc FOREIGN KEY ngay trong câu lệnh CREATE TABLE mà phải định nghĩa thông qua lệnh ALTER TABLE. 2.2.2.Sửa đổi bảng Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 38 / 94

  42. Chương 2. Nhóm lệnh định nghĩa dữ liệu DDL Một bảng sau khi đã được định nghĩa bằng câu lệnh CREATE TABLE có thểđược sửa đổi thông qua câu lệnh ALTER TABLE. Câu lệnh này cho phép chúng ta thực hiện được các thao tác sau:  Bổ sung một cột vào bảng.  Xoá một cột khỏi bảng.  Thay đổi định nghĩa của một cột trong bảng.  Xoá bỏ hoặc bổ sung các ràng buộc cho bảng Cú pháp của câu lệnh ALTER TABLE như sau: ALTER TABLE tên_bảng ADD định_nghĩa_cột | ALTER COLUMN tên_cột kiểu_dữ_liêu [NULL | NOT NULL] | DROP COLUMN tên_cột | ADD CONSTRAINT tên_ràng_buộc định_nghĩa_ràng_buộc | DROP CONSTRAINT tên_ràng_buộc Ví dụ: Các ví dụdưới đây minh hoạ cho ta cách sử dụng câu lệnh ALTER TABLE trong các trường hợp. Giả sử ta có hai bảng DONVI và NHANVIEN với định nghĩa như sau: CREATE TABLE donvi ( madv INT NOT NULL PRIMARY KEY, tendv VARCHAR(30) NOT NULL ) CREATE TABLE nhanvien ( manv VARCHAR(10) NOT NULL, hoten VARCHAR(30) NOT NULL, ngaysinh DATETIME, diachi CHAR(30) NOT NULL ) Bổ sung vào bảng NHANVIEN cột DIENTHOAI với ràng buộc CHECK nhằm qui định điện thoại của nhân viên là một chuỗi 6 chữ số: ALTER TABLE nhanvien ADD dienthoai NVARCHAR(6) CHECK (dienthoai LIKE '[0- 9][0-9][0-9][0-9][0-9][0-9]') Bổ sung thêm cột MADV vào bảng NHANVIEN: Giáo trình Cơ sở dữ liệu – MySQL Trang 39 / 94

  43. Chương 2. Nhóm lệnh định nghĩa dữ liệu ALTER TABLE nhanvien ADD madv INT NULL Định nghĩa lại kiểu dữ liệu của cột DIACHI trong bảng NHANVIEN và cho phép cột này chấp nhận giá trị NULL: ALTER TABLE nhanvien ALTER COLUMN diachi VARCHAR(100) NULL Xoá cột ngày sinh khỏi bảng NHANVIEN: ALTER TABLE nhanvien DROP COLUMN ngaysinh Định nghĩa khoá chính (ràng buộc PRIMARY KEY) cho bảng NHANVIEN là cột MANV: ALTER TABLE nhanvien ADD PRIMARY KEY(manv) Định nghĩa khoá ngoài cho bảng NHANVIEN trên cột MADV tham chiếu đến cột MADV của bảng DONVI: ALTER TABLE nhanvien ADD FOREIGN KEY(madv) REFERENCES donvi(madv) ON DELETE CASCADE ON UPDATE CASCADE Lưu ý:  Nếu bổ sung thêm một cột vào bảng và trong bảng đã có ít nhất một bản ghi thì cột mới cần bổ sung phải cho phép chấp nhận giá trị NULL hoặc phải có giá trị mặc định.  Muốn xoá một cột đang được ràng buộc bởi một ràng buộc hoặc đang được tham chiếu bởi một khoá ngoài, ta phải xoá ràng buộc hoặc khoá ngoài trước sao cho trên cột không còn bất kỳ một ràng buộc và không còn được tham chiếu bởi bất kỳ khoá ngoài nào.  Nếu bổ sung thêm ràng buộc cho một bảng đã có dữ liệu và ràng buộc cần bổ sung không được thoả mãn bởi các bản ghi đã có trong bảng thì câu lệnh ALTER TABLE không thực hiện được. 2.2.3.Xóa bảng Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 40 / 94

  44. Chương 2. Nhóm lệnh định nghĩa dữ liệu DDL Khi một bảng không còn cần thiết , ta có thể xoá nó ra khỏi cơ sở dữ liệu bằng câu lệnh DROP TABLE. Câu lệnh này cũng đồng thời xoá tất cả những ràng buộc, chỉ mục, trigger liên quan đến bảng đó. Câu lệnh có cú pháp như sau: DROP TABLE tên_bảng Trong các hệ quản trịcơ sở dữ liệu, khi đã xoá một bảng bằng lệnh DROP TABLE, ta không thể khôi phục lại bảng cũng như dữ liệu của nó. Do đó, cần phải cẩn thận khi sử dụng câu lệnh này. Câu lệnh DROP TABLE không thể thực hiện được nếu bảng cần xoá đang được tham chiếu bởi một ràng buộc FOREIGN KEY. Trong trường hợp này, ràng buộc FOREIGN KEY đang tham chiếu hoặc bảng đang tham chiếu đến bảng cần xoá phải được xoá trước. Khi một bảng bị xoá, tất cả các ràng buộc, chỉ mục và trigger liên quan đến bảng cũng đồng thời bịxóa theo. Do đó, nếu ta tạo lại bảng thì cũng phải tạo lại các đối tượng này. Ví dụ: Giả sử cột MADV trong bảng DONVI đang được tham chiếu bởi khoá ngoài fk_nhanvien_madv trong bảng NHANVIEN. Để xoá bảng DONVI ra khỏi cơ sở dữ liệu, ta thực hiện hai câu lệnh sau: Xoá bỏ ràng buộc fk_nhanvien_madv khỏi bảng NHANVIEN: ALTER TABLE nhanvien DROP CONSTRAINT fk_nhanvien_madv Xoá bảng DONVI: DROP TABLE donvi Giáo trình Cơ sở dữ liệu – MySQL Trang 41 / 94

  45. Chương 2. Nhóm lệnh định nghĩa dữ liệu BÀI TẬP 2.1.Câu hỏi ôn tập Câu 1. Kiểu dữ liệu nào sau đây được sử dụng để làm kiểu cho trường họ tên? B.Char A.Int D.Boolean C.Varchar Câu 2. Để tạo bảng trong cơ sở dữ liệu ta dùng cấu trúc nào sau đây? B.Create database D.Delete from table A.Create table C.Insert into Câu 3. Ta có thể thực hiện xóa được bảng khi đang có dữ liệu không? A.Có B.Không 2.2.Bài tập Tạo mới cơ sở dữ liệu có tên QLBanHang (Quản lý bán hàng) với các bảng có cấu trúc cụ thểnhư sau: 1.Danh mục Vật tư (tbl_vattu) Tên cột Ý nghĩa Kiểu Độ rộng MaVTu Mã vật tư varchar 4 TenVTu Tên vật tư varchar 100 DvTinh Đơn vị tính varchar 10 PhanTram Tỷ lệ phần trăm real 2.Danh mục Nhà cung cấp (tbl_nhacc) Tên cột Ý nghĩa Kiểu Độ rộng MaNhaCc Mã nhà cung cấp varchar 3 TenNhaCc Tên nhà cung cấp varchar 100 DiaChi Địa chỉ varchar 200 DienThoai Điện thoại varchar 20 3.Đơn đặt hàng (tbl_dathang) Tên cột Ý nghĩa Kiểu Độ rộng SoDh varchar 4 Sốđơn đặt hàng NgayDh datetime Ngày đặt hàng, ngày Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 42 / 94

  46. Chương 2. Nhóm lệnh định nghĩa dữ liệu DDL MaNhaCc varchar 3 Mã nhà cung cấp 4.Chi tiết Đơn đặt hàng (tbl_ctdondh) Tên cột Ý nghĩa Kiểu Độ rộng SoDh Sốđơn đặt hàng varchar 4 MaVTu Mã vật tư varchar 4 SlDat Sốlượng đặt hàng int 5.Phiếu nhập hàng (tbl_pnhap) Tên cột Ý nghĩa Kiểu Độ rộng SoPn Số phiếu nhập hàng varchar 4 NgayNhap Ngày nhập hàng datetime SoDh Sốđơn đặt hàng varchar 4 6.Chi tiết nhập hàng (tbl_ctpnhap) Tên cột Kiểu Độ rộng Ý nghĩa SoPn Số phiếu nhập hàng varchar 4 MaVTu Mã vật tư varchar 4 SlNhap Sốlượng nhập hàng int DgNhap Đơn giá nhập hàng double 7.Phiếu xuất hàng (tbl_pxuat) Tên cột Ý nghĩa Kiểu Độ rộng SoPx Số phiếu xuất varchar 4 NgayXuat Ngày xuất hàng datetime TenKh Tên khách hàng varchar 100 8.Chi tiết xuất hàng (tbl_ctpxuat) Tên cột Ý nghĩa Kiểu Độ rộng SoPx Số phiếu xuất varchar 4 MaVTu Mã vật tư varchar 4 Giáo trình Cơ sở dữ liệu – MySQL Trang 43 / 94

  47. Chương 2. Nhóm lệnh định nghĩa dữ liệu SlXuat Sốlượng xuất hàng int DgXuat Đơn giá xuất hàng double 9.Tồn kho (tbl_tonkho) Tên cột Ý nghĩa Kiểu Độ rộng NamThang Năm tháng varchar 6 MaVTu Mã vật tư varchar 4 SLDau Sốlượng tồn đầu kỳ int TongSLN Tổng sốlượng nhập trong kỳ int TongSLX Tổng sốlượng xuất trong kỳ int SLCuoi Sốlượng tồn cuối kỳ int Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 44 / 94

  48. Chương 3. Nhóm lệnh thao tác dữ liệu (DML) CHƯƠNG 3. NHÓM LỆNH THAO TÁC DỮ LIỆU DML Mục tiêu: Kết thúc chương, học viên có thể: Khái niệm về kiểu dữ liệu Khái niệm biến, hằng số Các toán tử, biểu thức trong PHP Các phép toán trong ngôn ngữ PHP Phần lý thuyết 3.1.Truy xuất dữ liệu với câu lệnh SELECT Câu lệnh SELECT được sử dụng để truy xuất dữ liệu từ các dòng và các cột của một hay nhiều bảng, khung nhìn. Câu lệnh này có thểdùng để thực hiện phép chọn (tức là truy xuất một tập con các dòng trong một hay nhiều bảng), phép chiếu (tức là truy xuất một tập con các cột trong một hay nhiều bảng) và phép nối (tức là liên kết các dòng trong hai hay nhiều bảng để truy xuất dữ liệu). Ngoài ra, câu lệnh này còn cung cấp khảnăng thực hiện các thao tác truy vấn và thống kê dữ liệu phức tạp khác. Cú pháp chung của câu lệnh SELECT có dạng: SELECT [ALL | DISTINCT][TOP n] danh_sách_chọn [AS tên_bảng_mới] FROM danh_sách_bảng/khung_nhìn [WHERE điều_kiện] [GROUP BY danh_sách_cột] [HAVING điều_kiện] [ORDER BY cột_sắp_xếp] Điều cần lưu ý đầu tiên đối với câu lệnh này là các thành phần trong câu lệnh SELECT nếu được sử dụng phải tuân theo đúng thứ tựnhư trong cú pháp. Nếu không, câu lệnh sẽ được xem là không hợp lệ. Giáo trình Cơ sở dữ liệu – MySQL Trang 45 / 94

  49. Chương 3. Nhóm lệnh thao tác dữ liệu (DML) Câu lệnh SELECTđược sử dụng đểtác động lên các bảng dữ liệu và kết quả của câu lệnh cũng được hiển thịdưới dạng bảng, tức là một tập hợp các dòng và các cột (ngoại trừtrường hợp sử dụng câu lệnh SELECT với mệnh đềCOMPUTE). Ví dụ: Kết quả của câu lệnh sau đây cho biết mã lớp, tên lớp và hệđào tạo của các lớp hiện có: SELECT malop,tenlop,hedaotao FROM lop Kết quả: Hình 3.1.Kết quả của câu lệnh SELECT 3.1.1.Mệnh đề FROM Mệnh đề FROM trong câu lệnh SELECT được sử dung nhằm chỉđịnh các bảng và khung nhìn cần truy xuất dữ liệu. Sau FROM là danh sách tên của các bảng và khung nhìn tham gia vào truy vấn, tên của các bảng và khung nhìn được phân cách nhau bởi dấu phẩy. Ví dụ: Câu lệnh dưới đây hiển thịdanh sách các khoa trong trường: SELECT * FROM khoa Kết quả: Hình 3.2.Kết quả của câu lệnh SELECT Trịnh Văn Chung (hna.tvchung@gmail.com) Trang 46 / 94

More Related