MySQL-Table và Views

A. Để tạo một bảng (table) trong MySQL, bạn sử dụng câu lệnh CREATE TABLE. Dưới đây là các bước cơ bản để tạo một bảng:

Cấu trúc Cơ bản của Câu lệnh CREATE TABLE

CREATE TABLE ten_table (
    ten_cot1 kieu_du_lieu1 [các thuộc tính],
    ten_cot2 kieu_du_lieu2 [các thuộc tính],
    ...
    PRIMARY KEY (ten_cot_chinh)
);

Ví dụ Tạo Bảng trong MySQL

Giả sử bạn muốn tạo một bảng tên là NhanVien để lưu trữ thông tin nhân viên trong công ty. Bảng này sẽ bao gồm các cột như MaNhanVien, HoTen, ChucVu, Luong, và NgaySinh.

CREATE TABLE NhanVien (
    MaNhanVien INT AUTO_INCREMENT PRIMARY KEY,  -- Mã nhân viên, tự động tăng
    HoTen VARCHAR(255) NOT NULL,                -- Họ và tên của nhân viên
    ChucVu VARCHAR(100),                        -- Chức vụ của nhân viên
    Luong DECIMAL(10, 2),                       -- Lương của nhân viên
    NgaySinh DATE                               -- Ngày sinh của nhân viên
);

Giải thích

  • MaNhanVien: Là cột khóa chính (Primary Key) của bảng, sử dụng kiểu dữ liệu INT và thuộc tính AUTO_INCREMENT để giá trị tự động tăng mỗi khi có một bản ghi mới được thêm vào.
  • HoTen: Lưu tên nhân viên, sử dụng kiểu dữ liệu VARCHAR với độ dài tối đa 255 ký tự, và không cho phép giá trị NULL (NOT NULL).
  • ChucVu: Lưu chức vụ của nhân viên, sử dụng kiểu dữ liệu VARCHAR với độ dài tối đa 100 ký tự.
  • Luong: Lưu lương của nhân viên, sử dụng kiểu dữ liệu DECIMAL để lưu số thập phân với 10 chữ số, trong đó có 2 chữ số thập phân.
  • NgaySinh: Lưu ngày sinh của nhân viên, sử dụng kiểu dữ liệu DATE.

Các Thuộc Tính Thường Dùng Khi Tạo Bảng

  • NOT NULL: Không cho phép giá trị NULL trong cột này.
  • AUTO_INCREMENT: Tự động tăng giá trị số nguyên cho mỗi bản ghi mới.
  • PRIMARY KEY: Định nghĩa cột này là khóa chính, xác định duy nhất từng hàng trong bảng.
  • UNIQUE: Đảm bảo tất cả các giá trị trong cột là duy nhất.

B.

Để sửa đổi cấu trúc bảng trong MySQL, bạn sử dụng câu lệnh ALTER TABLE. Câu lệnh này cho phép bạn thêm cột mới, sửa đổi cột hiện có, đổi tên cột, xoá cột, hoặc thay đổi các thuộc tính khác của bảng.

1. Thêm cột vào bảng

Để thêm một cột mới vào bảng, sử dụng ADD COLUMN:

ALTER TABLE ten_table
ADD COLUMN ten_cot kieu_du_lieu [các thuộc tính];

Ví dụ: Thêm cột Email vào bảng NhanVien:

ALTER TABLE NhanVien
ADD COLUMN Email VARCHAR(255);

2. Sửa đổi cột hiện có

Để thay đổi kiểu dữ liệu hoặc các thuộc tính của một cột hiện có, sử dụng MODIFY COLUMN hoặc CHANGE COLUMN.

  • MODIFY COLUMN: Sử dụng khi bạn chỉ muốn thay đổi kiểu dữ liệu hoặc các thuộc tính của cột.
ALTER TABLE ten_table
MODIFY COLUMN ten_cot kieu_du_lieu [các thuộc tính];

Ví dụ: Thay đổi kiểu dữ liệu của cột Luong trong bảng NhanVien từ DECIMAL(10, 2) sang FLOAT:

ALTER TABLE NhanVien
MODIFY COLUMN Luong FLOAT;
  • CHANGE COLUMN: Sử dụng khi bạn muốn đổi tên cột hoặc thay đổi cả tên lẫn kiểu dữ liệu.
ALTER TABLE ten_table
CHANGE COLUMN ten_cot_cu ten_cot_moi kieu_du_lieu [các thuộc tính];

Ví dụ: Đổi tên cột ChucVu thành ViTri và thay đổi kiểu dữ liệu thành VARCHAR(150):

ALTER TABLE NhanVien
CHANGE COLUMN ChucVu ViTri VARCHAR(150);

3. Đổi tên bảng

Để đổi tên bảng, sử dụng RENAME TO:

ALTER TABLE ten_table_cu
RENAME TO ten_table_moi;

Ví dụ: Đổi tên bảng NhanVien thành NhanSu:

ALTER TABLE NhanVien
RENAME TO NhanSu;

4. Xóa cột

Để xoá một cột khỏi bảng, sử dụng DROP COLUMN:

ALTER TABLE ten_table
DROP COLUMN ten_cot;

Ví dụ: Xoá cột DiaChi khỏi bảng NhanVien:

ALTER TABLE NhanVien
DROP COLUMN DiaChi;

5. Thêm, xóa, hoặc thay đổi khóa

Bạn có thể thêm, xoá, hoặc thay đổi khóa (như khóa chính hoặc khóa ngoại) trong bảng:

  • Thêm khóa chính:
ALTER TABLE ten_table
ADD PRIMARY KEY (ten_cot);
  • Xóa khóa chính:
ALTER TABLE ten_table
DROP PRIMARY KEY;
  • Thêm khóa ngoại:
ALTER TABLE ten_table
ADD CONSTRAINT ten_khoa_ngoai FOREIGN KEY (ten_cot) REFERENCES ten_bang_ngoai(ten_cot_ngoai);

C. Lệnh TRUNCATE TABLE trong MySQL được sử dụng để xóa tất cả các hàng trong một bảng, nhưng vẫn giữ lại cấu trúc của bảng. Đây là một cách nhanh chóng để làm trống bảng mà không cần xóa từng hàng một, như khi sử dụng lệnh DELETE.

Cú pháp

TRUNCATE TABLE ten_bang;

Ví dụ

Giả sử bạn có một bảng tên là KhachHang, và bạn muốn xóa tất cả các dữ liệu trong bảng này nhưng giữ lại cấu trúc bảng để có thể tiếp tục chèn dữ liệu mới vào:

TRUNCATE TABLE KhachHang;

Lưu ý Quan Trọng

  1. Không thể hoàn tác: Lệnh TRUNCATE TABLE sẽ ngay lập tức xóa tất cả dữ liệu trong bảng mà không ghi lại thao tác này trong nhật ký giao dịch (transaction log). Do đó, bạn không thể hoàn tác lệnh này.
  2. Hiệu suất: TRUNCATE TABLE thường nhanh hơn DELETE FROM ten_bang vì nó không kiểm tra từng hàng trước khi xóa và không kích hoạt các trigger liên quan đến xóa.
  3. Tái đặt AUTO_INCREMENT: Nếu bảng có cột AUTO_INCREMENT, giá trị đếm tự động sẽ được tái đặt về giá trị bắt đầu (thường là 1) sau khi TRUNCATE.
  4. Không kích hoạt các ràng buộc: TRUNCATE TABLE không kích hoạt các ràng buộc khóa ngoại hoặc trigger, điều này khác với DELETE.
  5. Cấu trúc bảng được giữ lại: TRUNCATE TABLE không ảnh hưởng đến cấu trúc bảng, các chỉ mục, hay các ràng buộc.

Khi nào nên sử dụng TRUNCATE TABLE?

  • Khi bạn cần xóa toàn bộ dữ liệu trong bảng nhanh chóng và không cần ghi lại thao tác này trong nhật ký giao dịch.
  • Khi bạn muốn làm trống bảng nhưng vẫn giữ nguyên cấu trúc bảng để tái sử dụng.

Khi nào không nên sử dụng TRUNCATE TABLE?

  • Khi bạn cần giữ lại các trigger liên quan đến việc xóa dữ liệu.
  • Khi bạn muốn xóa dữ liệu có điều kiện hoặc cần thực hiện thao tác trong phạm vi một giao dịch có thể hoàn tác (rollback).

D.

Để xóa một bảng (table) trong MySQL, bạn sử dụng lệnh DROP TABLE. Khi bạn xóa một bảng, tất cả dữ liệu trong bảng và cấu trúc bảng sẽ bị xóa hoàn toàn khỏi cơ sở dữ liệu.

Cú pháp

DROP TABLE ten_bang;

Ví dụ

Giả sử bạn có một bảng tên là SanPham, và bạn muốn xóa bảng này:

DROP TABLE SanPham;

Xóa nhiều bảng cùng lúc

Bạn có thể xóa nhiều bảng cùng lúc bằng cách liệt kê các tên bảng và ngăn cách bằng dấu phẩy:

DROP TABLE bang1, bang2, bang3;

Ví dụ, xóa các bảng SanPhamKhachHang:

DROP TABLE SanPham, KhachHang;

Lưu ý Quan Trọng

  1. Không thể hoàn tác: Sau khi bảng bị xóa bằng lệnh DROP TABLE, không có cách nào để khôi phục dữ liệu hoặc cấu trúc của bảng đó trừ khi bạn có bản sao lưu (backup).
  2. Xóa khóa ngoại: Nếu bảng bị xóa có liên quan đến các khóa ngoại (foreign keys) từ các bảng khác, bạn có thể cần phải xóa hoặc vô hiệu hóa các ràng buộc đó trước khi xóa bảng.
  3. Xóa chỉ mục và trigger: Khi bạn xóa một bảng, tất cả các chỉ mục (indexes), triggers, và các ràng buộc (constraints) liên quan đến bảng đó cũng sẽ bị xóa.
  4. Xóa bảng liên quan: Nếu bạn có bảng liên kết với bảng bị xóa (thông qua khóa ngoại), bạn cần cẩn thận để đảm bảo rằng việc xóa bảng không làm ảnh hưởng đến dữ liệu hoặc gây ra lỗi trong cơ sở dữ liệu.

Khi nào sử dụng DROP TABLE?

  • Khi bạn muốn loại bỏ hoàn toàn một bảng khỏi cơ sở dữ liệu và không còn cần bảng đó nữa.
  • Khi bạn cần giải phóng không gian lưu trữ bằng cách xóa bảng không cần thiết.

Khi nào không nên sử dụng DROP TABLE?

  • Khi bạn chỉ muốn xóa dữ liệu trong bảng mà vẫn giữ lại cấu trúc bảng (trong trường hợp này, hãy sử dụng TRUNCATE TABLE).
  • Khi bạn cần giữ lại bảng và chỉ muốn xóa một số hàng nhất định (trong trường hợp này, hãy sử dụng DELETE).

E.

View trong MySQL là một bảng ảo được tạo ra từ kết quả của một câu truy vấn SQL. View không chứa dữ liệu thực tế mà chỉ là một cách để bạn truy vấn và trình bày dữ liệu từ một hoặc nhiều bảng theo một cách cụ thể. View giúp đơn giản hóa các truy vấn phức tạp và cung cấp một lớp trừu tượng hóa cho dữ liệu.

Cú pháp tạo View

CREATE VIEW ten_view AS
SELECT cot1, cot2, ...
FROM ten_bang
WHERE dieu_kien;

Ví dụ về việc tạo View

Giả sử bạn có một bảng tên là NhanVien với các cột như MaNhanVien, HoTen, ChucVu, Luong, và PhongBan. Bạn muốn tạo một view để hiển thị thông tin của các nhân viên làm việc trong phòng IT:

CREATE VIEW NhanVienIT AS
SELECT MaNhanVien, HoTen, Luong
FROM NhanVien
WHERE PhongBan = 'IT';

Truy vấn từ View

Bạn có thể truy vấn từ view giống như truy vấn từ một bảng thực:

SELECT * FROM NhanVienIT;

Câu lệnh này sẽ trả về tất cả nhân viên thuộc phòng IT với các cột MaNhanVien, HoTen, và Luong.

Chỉnh sửa View

Nếu bạn cần cập nhật hoặc thay đổi cấu trúc của một view, bạn có thể sử dụng câu lệnh ALTER VIEW hoặc CREATE OR REPLACE VIEW:

CREATE OR REPLACE VIEW NhanVienIT AS
SELECT MaNhanVien, HoTen, ChucVu, Luong
FROM NhanVien
WHERE PhongBan = 'IT';

Xóa View

Để xóa một view, bạn sử dụng câu lệnh DROP VIEW:

DROP VIEW ten_view;

Ví dụ, để xóa view NhanVienIT:

DROP VIEW NhanVienIT;

Lợi ích của việc sử dụng View

  1. Đơn giản hóa các truy vấn phức tạp: Thay vì viết lại các truy vấn phức tạp nhiều lần, bạn có thể tạo một view để tái sử dụng.
  2. Bảo mật dữ liệu: Bạn có thể tạo view để chỉ hiển thị một phần dữ liệu từ bảng gốc, giúp bảo vệ dữ liệu nhạy cảm.
  3. Trừu tượng hóa: View cung cấp một lớp trừu tượng hóa, giúp người dùng tương tác với dữ liệu theo cách đơn giản hơn mà không cần biết chi tiết cấu trúc bảng gốc.
  4. Dễ bảo trì: Khi cấu trúc bảng gốc thay đổi, bạn chỉ cần cập nhật view mà không cần thay đổi nhiều chỗ trong mã nguồn.

Hạn chế của View

  • Không chứa dữ liệu thực: Vì view là bảng ảo, nó phụ thuộc vào dữ liệu từ các bảng gốc. Nếu bảng gốc thay đổi hoặc bị xóa, view sẽ bị ảnh hưởng.
  • Hiệu suất: Truy vấn thông qua view có thể chậm hơn so với truy vấn trực tiếp vào bảng, đặc biệt là với các view phức tạp hoặc khi view liên kết nhiều bảng.
  • Giới hạn thao tác: Không phải tất cả các thao tác (như INSERT, UPDATE, DELETE) đều có thể thực hiện trên view, đặc biệt là với các view phức tạp.