[Hệ quản trị cơ sở dữ liệu] Các lệnh thao tác với bảng trong SQL

Share:
Tạo một bảng về cơ bản bao gồm đặt tên cho bảng đó và xác định số cot và kiểu dữ liệu của mỗi cot.
Lệnh CREATE TABLE trong SQL được sử dụng để tạo một bảng mới.

Cú pháp

Cú pháp cơ bản của lệnh CREATE TABLE trong SQL như sau:
CREATE TABLE ten_bang(
   kieu_du_lieu cot1,
   kieu_du_lieu cot2,
   kieu_du_lieu cot3,
   .....
   kieu_du_lieu cotN,
   PRIMARY KEY( mot hoac nhieu cot )
);
CREATE TABLE là một từ khóa nói cho Database System những gì bạn muốn làm. Trong trường hợp này, bạn muốn tạo một bảng mới. Tên hoặc định danh duy nhất cho bảng đó theo sau lệnh CREATE TABLE.
Sau đó, trong cặp dấu ngoặc đơn, bạn liệt kê phần định nghĩa cho mỗi cột trong bảng và từng kiểu dữ liệu cho nó. Bạn theo dõi ví dụ sau để hiểu hơn về khái niệm này.

Ví dụ

Ví dụ sau sẽ tạo một bảng SINHVIEN với ID là khóa chính (primary key) và ràng buộc là NOT NULL chỉ rằng các trường này không thể là NULL trong khi tạo các bản ghi trong bảng này.
SQL> CREATE TABLE SINHVIEN(
   ID   INT              NOT NULL,
   TEN VARCHAR (20)     NOT NULL,
   TUOI  INT              NOT NULL,
   KHOAHOC  CHAR (25) ,
   HOCPHI   DECIMAL (18, 2),       
   PRIMARY KEY (ID)
);
Bạn có thể kiểm tra xem bảng của bạn đã được tạo thành công hay chưa bằng việc nhìn vào thông báo được hiển thị bởi SQL Server, nếu không, bạn có thể sử dụng lệnh DESC như sau:
SQL> DESC SINHVIEN;
+---------+---------------+------+-----+---------+-------+
| Field   | Type          | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| ID      | int(11)       | NO   | PRI |         |       |
| TEN    | varchar(20)   | NO   |     |         |       |
| TUOI     | int(11)       | NO   |     |         |       |
| KHOAHOC | char(25)      | YES  |     | NULL    |       |
| HOCPHI  | decimal(18,2) | YES  |     | NULL    |       |
+---------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
Bây giờ, bạn có SINHVIEN có sẵn trong Database của mình, và bạn có thể sử dụng để lưu giữ các thông tin cần thiết liên quan tới sinh viên.
Lệnh DROP TABLE trong SQL được sử dụng để xóa một bảng và tất cả dữ liệu, chỉ mục (index), trigger, ràng buộc và quyền được trao cho bảng đó.
GHI CHÚ: Bạn phải thật cẩn thận trong khi sử dụng lệnh này, bởi vì một khi một bảng bị xóa thì tất cả thông tin có sẵn trong bảng đó cũng sẽ bị xóa vĩnh viễn.

Cú pháp

Cú pháp cơ bản của lệnh DROP TABLE trong SQL như sau:
DROP TABLE ten_bang;

Ví dụ

Đầu tiên, chúng ta xác minh bảng SINHVIEN và sau đó chúng ta sẽ xóa nó khỏi Databse.
SQL> DESC SINHVIEN;
+---------+---------------+------+-----+---------+-------+
| Field   | Type          | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| ID      | int(11)       | NO   | PRI |         |       |
| TEN    | varchar(20)   | NO   |     |         |       |
| TUOI     | int(11)       | NO   |     |         |       |
| KHOAHOC | char(25)      | YES  |     | NULL    |       |
| HOCPHI  | decimal(18,2) | YES  |     | NULL    |       |
+---------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
Lệnh trên có nghĩa là bảng SINHVIEN là có sẵn trong Database, vì thế, chúng ta có thể xóa nó như sau:
SQL> DROP TABLE SINHVIEN;
Query OK, 0 rows affected (0.01 sec)
Bây giờ, nếu bạn thử lệnh DESC như trên một lần nữa, thì bạn sẽ nhận thông báo lỗi như sau:
SQL> DESC SINHVIEN;
ERROR 1146 (42S02): Table 'TEST.SINHVIEN' doesn't exist
Ở đây, TEST là tên Database mà chúng ta đang sử dụng cho ví dụ này.
Lệnh DROP DATABASE trong SQL được sử đụng để xóa một Database đang tồn tại.

Cú pháp

Cú pháp cơ bản của lệnh DROP DATABASE trong SQL là như sau:
DROP DATABASE ten_co_so_du_lieu;
Ở đây, ten_co_so_du_lieu luôn luôn là duy nhất bên trong RDBMS.

Ví dụ

Nếu bạn muốn xóa một Database đang tồn tại tên là <SINHVIEN>, thì lệnh DROP DATABASE sẽ là như sau:
SQL> DROP DATABASE SINHVIEN;
GHI CHÚ: Bạn nên cẩn thận trước khi sử dụng hành động này, bởi vì xóa một Database đang tồn tại sẽ làm thất lạc hoàn toàn thông tin đã được lưu giữ trong Database đó.
Đảm bảo rằng bạn có quyền như admin trước khi xóa bất kỳ Database nào. Khi một Database đã bị xóa, bạn có thể kiểm tra nó trong danh sách Database như sau:
SQL> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| AMROOD             |
|  
| mysql              |
| orig               |
| test               |
+--------------------+
6 rows in set (0.00 sec)
Lệnh RENAME Table được sử dụng để thay tên một bảng. Đôi khi bạn chọn một tên không mang nhiều ý nghĩa cho bảng, do đó cần thiết phải thay đổi lại. Cú pháp để thay tên bảng từ cơ sở dữ liệu như sau:
ALTER TABLE ten_bang   
RENAME TO ten_bang_moi;  
Một cách khác, bạn có thể viết lệnh sau để thay tên cho bảng.
RENAME ten_bang_cu To ten_bang_moi;   
Bạn theo dõi với tên bảng SINHVIEN trước đó, do một số lý do chúng ta muốn thay tên bảng thành SINHVIENBK53 chẳng hạn.
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  20 | CNTT      | 4       |
|  2 | Viet    |  18 | DTVT      | 4.5     |
|  3 | Thanh   |  19 | KTDN      |  5      |
|  4 | Nhan    |  21 | CK        |   3.5   |
|  5 | Huong   |  19 | TCNH      |   4     |
+----+---------+-----+-----------+---------+
Bạn có thể sử dụng một trong các cú pháp sau để thay tên cho bảng:
ALTER TABLE SINHVIEN  
RENAME TO SINHVIENTDK6;    
Hoặc
RENAME SINHVIEN TO SINHVIENBKTDK6;  
Sau đó, bảng SINHVIEN sẽ được đổi tên thành bảng SINHVIENBK53.
Lệnh TRUNCATE TABLE trong SQL được sử dụng để xóa hoàn toàn dữ liệu từ một bảng đang tồn tại.
Bạn cũng có thể sử dụng lệnh DROP TABLE để xóa toàn bộ bảng, nhưng nó sẽ xóa toàn bộ cấu trúc bảng từ Database và nếu bạn cần lưu giữ một vài dữ liệu trong cấu trúc bảng như vậy, bạn sẽ phải tạo lại bảng này lần nữa.
Cú pháp cơ bản của lệnh TRUNCATE TABLE trong SQL như sau:
TRUNCATE TABLE  ten_bang;

Ví dụ

Bảng SINHVIEN có các bản ghi sau:
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Viet    |  19 | DTVT      | 3.0     |
|  3 | Thanh   |  18 | KTDN      |  4      |
|  4 | Nhan    |  19 | CK        |   4.5   |
|  5 | Huong   |  20 | TCNH      |   5     |
+----+---------+-----+-----------+---------+
5 rows in set (0.00 sec)
Sau đây là ví dụ của lệnh TRUNCATE TABLE:
SQL > TRUNCATE TABLE SINHVIEN;
Bây giờ, bảng SINHVIEN đã bị thay đổi và sau đây là kết quả của lệnh SELECT:
SQL> SELECT * FROM SINHVIEN;
Empty set (0.00 sec)
Lệnh ALTER TABLE trong SQL được sử dụng để thêm, xóa hoặc sửa đổi các cột trong một bảng đang tồn tại.
Bạn cũng sẽ sử dụng lệnh ALTER TABLE để thêm và xóa các ràng buộc đa dạng trên một bảng đang tồn tại.

Cú pháp

Cú pháp cơ bản của lệnh ALTER TABLE để thêm một cột mới trong một bảng đang tồn tại là như sau:
ALTER TABLE ten_bang ADD ten_cot kieu_du_lieu;
Cú pháp cơ bản của lệnh ALTER TABLE để XÓA CỘT trong một bảng đang tồn tại là như sau:
ALTER TABLE ten_bang DROP COLUMN ten_cot;
Cú pháp cơ bản của lệnh ALTER TABLE để thay đổi KIỂU DỮ LIỆU của một cột trong một bảng là như sau:
ALTER TABLE ten_bang MODIFY COLUMN ten_cot kieu_du_lieu;
Cú pháp cơ bản của lệnh ALTER TABLE để THÊM một ràng buộc NOT NULL cho một cột trong một bảng là như sau:
ALTER TABLE ten_bang MODIFY ten_cot kieu_du_lieu NOT NULL;
Cú pháp cơ bản của lệnh ALTER TABLE để THÊM ràng buộc UNIQUE cho một bảng là như sau:
ALTER TABLE ten_bang 
ADD CONSTRAINT MyUniqueConstraint UNIQUE(cot1, cot2...);
Cú pháp cơ bản của lệnh ALTER TABLE để THÊM ràng buộc CHECK cho một bảng là như sau:
ALTER TABLE ten_bang 
ADD CONSTRAINT MyUniqueConstraint CHECK (CONDITION);
Cú pháp cơ bản của lệnh ALTER TABLE để THÊM ràng buộc PRIMARY KEY cho một bảng là như sau:
ALTER TABLE ten_bang 
ADD CONSTRAINT MyPrimaryKey PRIMARY KEY (cot1, cot2...);
Cú pháp cơ bản của lệnh ALTER TABLE để XÓA RÀNG BUỘC cho một bảng là như sau:
ALTER TABLE ten_bang 
DROP CONSTRAINT MyUniqueConstraint;
Nếu bạn đang sử dụng MySQL, thì code là:
ALTER TABLE ten_bang 
DROP INDEX MyUniqueConstraint;
Cú pháp cơ bản của lệnh ALTER TABLE để XÓA ràng buộc PRIMARY KEY cho một bảng là như sau:
ALTER TABLE ten_bang 
DROP CONSTRAINT MyPrimaryKey;
Nếu bạn đang sử dụng MySQL, thì code là:
ALTER TABLE ten_bang 
DROP PRIMARY KEY;

Ví dụ

Bảng SINHVIEN có các bản ghi sau:
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Viet    |  19 | DTVT      | 3.0     |
|  3 | Thanh   |  18 | KTDN      |  4      |
|  4 | Nhan    |  19 | CK        |   4.5   |
|  5 | Huong   |  20 | TCNH      |   5     |
+----+---------+-----+-----------+---------+
Ví dụ sau minh họa cách THÊM một cột mới vào một bảng đang tồn tại:
ALTER TABLE SINHVIEN ADD GIOITINH char(1);
Bây giờ, bảng SINHVIEN đã bị thay đổi và sau đây là kết quả của lệnh SELECT:
+----+---------+-----+-----------+--------+---------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI | GIOITINH |
+----+---------+-----+-----------+---------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |NULL     |
|  2 | Viet    |  19 | DTVT      | 3.0     |NULL     |
|  3 | Thanh   |  18 | KTDN      |  4      |NULL     |
|  4 | Nhan    |  19 | CK        |   4.5   |NULL     |
|  5 | Huong   |  20 | TCNH      |   5     |NULL     |
+----+---------+-----+-----------+---------+---------+
Dưới đây là ví dụ để XÓA cột GIOITINH từ bảng đang tồn tại:
ALTER TABLE SINHVIEN DROP GIOITINH;
Bây giờ, bảng SINHVIEN đã bị thay đổi và sau đây là kết quả của lệnh SELECT:
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Viet    |  19 | DTVT      | 3.0     |
|  3 | Thanh   |  18 | KTDN      |  4      |
|  4 | Nhan    |  19 | CK        |   4.5   |
|  5 | Huong   |  20 | TCNH      |   5     |
+----+---------+-----+-----------+---------+
Có một tình huống khi bạn cần một bản sao thực sự của một bảng và các lệnh CREATE TABLE … SELECT … không phù hợp với mục đích của bạn, bởi vì bản sao phải bao gồm cùng chỉ mục, cùng giá trị mặc định, và …
Nếu bạn đang sử dụng MySQL RDBMS, bạn có thể xử lý tình huống này theo các bước sau:
  • Sử dụng lệnh SHOW CREATE TABLE để lấy một lệnh CREATE TABLE mà xác định cấu trúc, chỉ mục và tất cả thông tin của bảng nguồn.
  • Sửa đổi lệnh để thay đổi tên bảng thành tên một bảng mô phỏng và thực thi lệnh. Theo cách này, bạn sẽ có bảng mô phỏng thực sự.
  • (Tùy ý) Nếu bạn cần sao các nội dung bảng, bạn thông báo một lệnh INSERT INTO … SELECT.

Ví dụ

Bạn thử ví dụ sau để tạo một bảng mô phỏng cho tinhoc_DB có cấu trúc như sau:
Bước 1
Lấy toàn bộ cấu trúc của bảng:
SQL> SHOW CREATE TABLE TINHOCMAU_DB \G;
*************************** 1. row ***************************
       Table: TINHOCMAU_DB
Create Table: CREATE TABLE `TINHOCMAU_DB` (
  `tinhocmau_id` int(11) NOT NULL auto_increment,
  `tinhocmau_title` varchar(100) NOT NULL default '',
  `tinhocmau_author` varchar(40) NOT NULL default '',
  `submission_date` date default NULL,
  PRIMARY KEY  (`tinhocmau_id`),
  UNIQUE KEY `AUTHOR_INDEX` (`tinhocmau_author`)
) TYPE=MyISAM
1 row in set (0.00 sec)
Bước 2
Thay tên bảng này và tạo bảng khác.
SQL> CREATE TABLE `CLONE_TBL` (
  -> `tinhocmau_id` int(11) NOT NULL auto_increment,
  -> `tinhocmau_title` varchar(100) NOT NULL default '',
  -> `tinhocmau_author` varchar(40) NOT NULL default '',
  -> `submission_date` date default NULL,
  -> PRIMARY KEY  (`tinhocmau_id`),
  -> UNIQUE KEY `AUTHOR_INDEX` (`tinhocmau_author`)
-> ) TYPE=MyISAM;
Query OK, 0 rows affected (1.80 sec)
Bước 3
Sau khi thực thi bước 2, bạn sẽ mô phỏng một bảng trong Database. Nếu bạn muốn sao chép dữ liệu từ bảng cũ, thì bạn có thể thực hiện bằng việc sử dụng lệnh INSERT INTO … SELECT.
SQL> INSERT INTO CLONE_TBL (tinhocmau_id,
    ->                        tinhocmau_title,
    ->                        tinhocmau_author,
    ->                        submission_date)
    -> SELECT tinhocmau_id,tinhocmau_title,
    ->        tinhocmau_author,submission_date,
    -> FROM TINHOCMAU_DB;
Query OK, 3 rows affected (0.07 sec)
Records: 3  Duplicates: 0  Warnings: 0
Cuối cùng, bạn sẽ có bảng mô phỏng thực sự như bạn muốn có.
Bảng tạm (Temporary Table) có thể rất hữu ích trong một số trường hợp khi bạn muốn lưu giữ dữ liệu tạm thời. Điều quan trọng nhất bạn cần nên biết về Bảng tạm(Temporary Table) là chúng có thể bị xóa khi Client Session hiện tại kết thúc.
Bảng tạm (Temporary Table) là có sẵn từ MySQL phiên bản 3.23 trở đi. Nếu bạn sử dụng một phiên bản cũ hơn, bạn không thể sử dụng tính năng này, nhưng bạn có thể sử dụng các Heap Table.
Như đã đề cập, bảng tạm sẽ chỉ tồn tại khi session là còn tồn tại. Nếu bạn chạy code trong PHP script, bảng tạm sẽ bị hủy tự động khi script kết thúc việc thực thi. Nếu bạn được kết nối với MySQL Database thông qua chương trình MySQL Client, thì bảng tạmsẽ tồn tại tới khi bạn đóng Client hoặc hủy bảng.

Ví dụ

Ví dụ sau minh họa cách sử dụng của bảng tạm.
mysql> CREATE TEMPORARY TABLE DOANHTHU (
    -> ten_san_pham VARCHAR(50) NOT NULL
    -> , tong_doanh_thu DECIMAL(12,2) NOT NULL DEFAULT 0.00
    -> , gia_trung_binh DECIMAL(7,2) NOT NULL DEFAULT 0.00
    -> , tong_so_luong INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO DOANHTHU
    -> (ten_san_pham, tong_doanh_thu, gia_trung_binh, tong_so_luong)
    -> VALUES
    -> ('iphone7', 30, 15, 2);

mysql> SELECT * FROM DOANHTHU;
+--------------+-------------+----------------+------------------+
| ten_san_pham | tong_doanh_thu | gia_trung_binh | tong_so_luong |
+--------------+-------------+----------------+------------------+
| iphone7     |      30 |          15 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)
Khi bạn thông báo một lệnh SHOW TABLES, thì bảng tạm của bạn sẽ không được liệt kê trong danh sách. Bây giờ, nếu bạn đăng xuất khỏi MySQL session và sau đó bạn thông báo một lệnh SELECT, thì bạn sẽ không thấy dữ liệu nào có sẵn trong Database. Ngay khi đó,bảng tạm của bạn cũng sẽ không tồn tại.

Xóa bảng tạm trong SQL

Theo mặc định, tất cả bảng tạm bị xóa bởi MySQL khi kết nối tới Database của bạn kết thúc. Nếu bạn vấn muốn xóa chúng, bạn thông báo một lệnh DROP TABLE.
Ví dụ sau minh họa cách xóa một bảng tạm trong SQL.
mysql> CREATE TEMPORARY TABLE DOANHTHU (
    -> ten_san_pham VARCHAR(50) NOT NULL
    -> , tong_doanh_thu DECIMAL(12,2) NOT NULL DEFAULT 0.00
    -> , gia_trung_binh DECIMAL(7,2) NOT NULL DEFAULT 0.00
    -> , tong_so_luong INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO DOANHTHU
    -> (ten_san_pham, tong_doanh_thu, gia_trung_binh, tong_so_luong)
    -> VALUES
    -> ('iphone7', 30, 90, 2);

mysql> SELECT * FROM DOANHTHU;
+--------------+-------------+----------------+------------------+
| ten_san_pham | tong_doanh_thu | gia_trung_binh | tong_so_luong |
+--------------+-------------+----------------+------------------+
| iphone7     |      30 |          15 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)
mysql> DROP TABLE DOANHTHU;
mysql>  SELECT * FROM DOANHTHU;
ERROR 1146: Table 'DOANHTHU' doesn't exist