Thứ hai, 14/09/2020 | 00:00 GMT+7

Cách tạo và quản lý bảng trong SQL

Các bảng là cấu trúc tổ chức chính trong database SQL. Chúng bao gồm một số cột phản ánh các thuộc tính riêng lẻ của từng hàng hoặc bản ghi, trong bảng. Là một khía cạnh cơ bản của tổ chức dữ liệu, điều quan trọng đối với bất kỳ ai làm việc với database quan hệ phải hiểu cách tạo, thay đổi và xóa bảng khi cần thiết.

Trong hướng dẫn này, ta sẽ xem xét cách tạo bảng trong SQL, cũng như cách sửa đổi và xóa các bảng hiện có.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần một máy tính chạy một số loại hệ quản trị database quan hệ (RDBMS) sử dụng SQL. Các hướng dẫn và ví dụ trong hướng dẫn này đã được kiểm nghiệm bằng cách sử dụng môi trường sau:

Lưu ý : Xin lưu ý nhiều RDBMS sử dụng các triển khai SQL duy nhất của riêng họ. Mặc dù các lệnh được nêu trong hướng dẫn này sẽ hoạt động trên hầu hết các RDBMS, nhưng cú pháp hoặc kết quả chính xác có thể khác nếu bạn kiểm tra chúng trên một hệ thống không phải MySQL.

Bạn cũng cần một database và bảng được tải với một số dữ liệu mẫu mà bạn có thể thực hành sử dụng các ký tự đại diện. Nếu chưa có, bạn có thể đọc phần Kết nối với MySQL và Cài đặt Database Mẫu sau đây để biết chi tiết về cách tạo database và bảng mà hướng dẫn này sẽ sử dụng trong các ví dụ xuyên suốt.

Kết nối với MySQL và cài đặt database mẫu

Nếu hệ thống database SQL của bạn chạy trên một server từ xa, hãy SSH vào server của bạn từ máy local của bạn:

  • ssh sammy@your_server_ip

Sau đó, mở dấu nhắc server MySQL, thay thế sammy bằng tên account user MySQL của bạn:

  • mysql -u sammy -p

Tạo database có tên là tablesDB :

  • CREATE DATABASE tablesDB;

Nếu database được tạo thành công, bạn sẽ nhận được kết quả như sau:

Output
Query OK, 1 row affected (0.01 sec)

Để chọn database tablesDB , hãy chạy câu lệnh USE sau:

  • USE tablesDB;
Output
Database changed

Như vậy, bạn đã sẵn sàng làm theo phần còn lại của hướng dẫn và bắt đầu tìm hiểu về cách tạo và quản lý bảng trong SQL.

Tạo bảng

Để tạo bảng trong SQL, hãy sử dụng CREATE TABLE , theo sau là tên mong muốn của bạn cho bảng:

  • CREATE TABLE table_name;

Lưu ý , như với mọi câu lệnh SQL, câu CREATE TABLE phải kết thúc bằng dấu chấm phẩy ( ; ).

Cú pháp ví dụ này sẽ tạo một bảng trống không có bất kỳ cột nào. Để tạo bảng với các cột, hãy theo dõi tên bảng với danh sách tên cột và các kiểu dữ liệu và ràng buộc tương ứng của chúng, được đặt trong dấu ngoặc đơn và phân tách bằng dấu phẩy:

  • CREATE TABLE table_name (
  • column1_name column1_data_type,
  • column2_name column2_data_type,
  • . . .
  • columnN_name columnN_data_type
  • );

Ví dụ: giả sử bạn muốn tạo một bảng để ghi lại một số thông tin về các công viên yêu thích của bạn ở Thành phố New York. Sau khi quyết định thuộc tính nào bạn muốn ghi về mỗi công viên, bạn sẽ quyết định tên cột cho từng thuộc tính đó cũng như kiểu dữ liệu thích hợp cho từng công viên:

  • parkName : Tên của mỗi công viên. Có một sự khác biệt lớn về độ dài của tên công viên, vì vậy kiểu dữ liệu varchar có độ dài tối đa là 30 ký tự sẽ thích hợp.
  • yearBuilt : Năm công viên được xây dựng. Mặc dù MySQL có kiểu dữ liệu year , điều này chỉ cho phép các giá trị từ 1901 đến 2155 . Thành phố New York có một số công viên được xây dựng trước năm 1901, vì vậy thay vào đó, bạn có thể sử dụng kiểu dữ liệu int .
  • firstVisit : Ngày bạn đến thăm công viên đầu tiên. MySQL có kiểu dữ liệu date mà bạn có thể sử dụng cho cột này. Nó lưu trữ dữ liệu ở định dạng YYYY-MM-DD .
  • lastVisit : Ngày bạn đến thăm mỗi công viên mới nhất . , bạn có thể sử dụng loại date cho việc này.

Để tạo một bảng có tên faveParks với các cột có các tên và kiểu dữ liệu này, bạn sẽ chạy lệnh sau:

  • CREATE TABLE faveParks (
  • parkName varchar(30),
  • yearBuilt int,
  • firstVisit date,
  • lastVisit date
  • );
Output
Query OK, 0 rows affected (0.01 sec)

Lưu ý điều này chỉ tạo ra cấu trúc của bảng, vì bạn chưa thêm bất kỳ dữ liệu nào vào bảng.

Bạn cũng có thể tạo bảng mới từ những bảng hiện có bằng cú pháp CREATE TABLE AS :

  • CREATE TABLE new_table_name AS (
  • SELECT column1, column2, . . . columnN
  • FROM old_table_name
  • );

Thay vì theo sau tên của bảng mới với danh sách các cột và kiểu dữ liệu của chúng, bạn theo sau nó bằng AS và sau đó, trong dấu ngoặc đơn, SELECT trả về bất kỳ cột và dữ liệu nào từ bảng root mà bạn muốn sao chép sang bảng mới.

Lưu ý nếu các cột của bảng root chứa bất kỳ dữ liệu nào, thì tất cả dữ liệu đó cũng sẽ được sao chép vào bảng mới. Ngoài ra, để rõ ràng, cú pháp ví dụ này bao gồm một truy vấn SELECT chỉ có mệnh đề FROM bắt buộc. Tuy nhiên, bất kỳ SELECT hợp lệ nào sẽ hoạt động ở vị trí này.

Để minh họa, lệnh sau tạo một bảng có tên parkInfo từ hai cột trong bảng faveParks đã tạo trước đó:

  • CREATE TABLE parkInfo AS (
  • SELECT parkName, yearBuilt
  • FROM faveParks
  • );
Output
Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0

Nếu faveParks bảng đã tổ chức bất kỳ dữ liệu, dữ liệu từ nó parkNameyearBuilt cột sẽ được sao chép vào parkInfo bảng là tốt, nhưng trong trường hợp này cả hai bảng sẽ được bỏ trống.

Nếu bạn cố gắng tạo một bảng bằng tên của bảng hiện có, nó sẽ gây ra lỗi:

  • CREATE TABLE parkInfo (
  • name varchar(30),
  • squareFootage int,
  • designer varchar(30)
  • );
Output
ERROR 1050 (42S01): Table 'parkInfo' already exists

Để tránh lỗi này, bạn có thể bao gồm tùy chọn IF NOT EXISTS trong CREATE TABLE . Điều này sẽ yêu cầu database kiểm tra xem database có tên được chỉ định đã tồn tại hay chưa và nếu có, sẽ đưa ra cảnh báo thay vì lỗi:

  • CREATE TABLE IF NOT EXISTS parkInfo (
  • name varchar(30),
  • squareFootage int,
  • designer varchar(30)
  • );
Output
Query OK, 0 rows affected, 1 warning (0.00 sec)

Lệnh này sẽ vẫn không tạo được bảng mới, vì bảng có tên parkInfo vẫn tồn tại. Tuy nhiên, lưu ý kết quả này cho biết câu CREATE TABLE đã dẫn đến cảnh báo. Để xem thông báo cảnh báo, hãy chạy câu lệnh SHOW WARNINGS chẩn đoán:

  • SHOW WARNINGS;
Output
| Level | Code | Message | +-------+------+---------------------------------+ | Note | 1050 | Table 'parkInfo' already exists | +-------+------+---------------------------------+ 1 row in set (0.00 sec)

Như kết quả này chỉ ra, lỗi tương tự mà bạn nhận được trước đó đã được đăng ký dưới dạng cảnh báo vì bạn đã bao gồm tùy chọn IF NOT EXISTS . Điều này có thể hữu ích trong một số trường hợp nhất định, như khi chạy các giao dịch; một lỗi sẽ khiến toàn bộ giao dịch không thành công, trong khi cảnh báo sẽ chỉ nghĩa là câu lệnh gây ra lỗi đó sẽ không thành công.

Thay đổi bảng

Đôi khi bạn có thể cần phải thay đổi định nghĩa của bảng. Điều này khác với việc cập nhật dữ liệu trong bảng; thay vào đó, nó liên quan đến việc thay đổi cấu trúc của chính bảng. Để làm điều này, bạn sẽ sử dụng cú pháp ALTER TABLE :

  • ALTER TABLE table_name ALTER_OPTION sub_options . . . ;

Sau khi bắt đầu ALTER TABLE , bạn chỉ định tên của bảng mà bạn muốn thay đổi. Sau đó, bạn chuyển bất kỳ tùy chọn nào có sẵn trong RDBMS của bạn để thực hiện thay đổi bạn có trong đầu.

Ví dụ: bạn có thể cần đổi tên bảng, thêm cột mới, bỏ cột cũ hoặc thay đổi định nghĩa của cột. Bạn có thể tiếp tục đọc để thực hành các ví dụ này trên bảng faveParks đã tạo trước đó trong phần Tạo bảng .

Để thay đổi tên của bảng faveParks , bạn có thể sử dụng cú pháp RENAME TO . Ví dụ này thay đổi faveParks tên bảng để faveNYCParks :

Cảnh báo : Hãy cẩn thận khi đổi tên bảng. Làm như vậy có thể gây ra sự cố nếu một ứng dụng sử dụng bảng hoặc các bảng khác trong database tham chiếu đến nó.

  • ALTER TABLE faveParks RENAME TO faveNYCParks;
Output
Query OK, 0 rows affected (0.01 sec)

Để thêm một cột mới, bạn phải chuyển tùy chọn ADD COLUMN . Ví dụ sau đây thêm một cột có tên là borough , chứa dữ liệu kiểu varchar , nhưng có độ dài tối đa là 20 ký tự, vào bảng faveNYCParks :

  • ALTER TABLE faveNYCParks ADD COLUMN borough varchar(20);
Output
Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0

Để xóa một cột và bất kỳ dữ liệu nào mà nó giữ khỏi bảng, bạn có thể sử dụng cú pháp DROP TABLE . Lệnh ví dụ này giảm cột borough :

  • ALTER TABLE faveNYCParks DROP COLUMN borough;

Nhiều triển khai SQL cho phép bạn thay đổi định nghĩa của cột bằng ALTER TABLE . Ví dụ sau sử dụng mệnh đề MODIFY COLUMN của MySQL, thay đổi cột yearBuilt để sử dụng kiểu dữ liệu smallint thay vì kiểu int ban đầu:

  • ALTER TABLE faveNYCParks MODIFY COLUMN yearBuilt smallint;

Lưu ý mỗi RDBMS có các tùy chọn khác nhau cho những gì bạn có thể thay đổi bằng ALTER TABLE . Để hiểu toàn bộ phạm vi những gì bạn có thể làm với ALTER TABLE , bạn nên tham khảo tài liệu chính thức của RDBMS để tìm hiểu những tùy chọn ALTER TABLE nào có sẵn cho nó.

Đây là tài liệu chính thức về chủ đề này cho một số database nguồn mở phổ biến:

Xóa bảng

Để xóa một bảng và tất cả dữ liệu của nó, hãy sử dụng cú pháp DROP TABLE :

Cảnh báo : Hãy cẩn thận khi chạy lệnh DROP TABLE , vì lệnh này sẽ xóa vĩnh viễn bảng của bạn và tất cả dữ liệu của nó.

  • DROP TABLE table_name;

Bạn có thể xóa nhiều bảng bằng một câu lệnh DROP duy nhất bằng cách tách tên của chúng bằng dấu phẩy và dấu cách, như sau:

  • DROP TABLE table1, table2, table3;

Để minh họa, lệnh sau sẽ xóa các faveNYCParksparkInfo được tạo trước đó trong hướng dẫn này:

  • DROP TABLE IF EXISTS faveNYCParks, parkInfo;

Lưu ý ví dụ này bao gồm tùy chọn IF EXISTS . Điều này có chức năng ngược lại với tùy chọn IF NOT EXISTS có sẵn cho CREATE TABLE . Trong ngữ cảnh này, IF EXISTS sẽ khiến câu lệnh DROP TABLE trả về cảnh báo thay vì thông báo lỗi nếu một trong các bảng được chỉ định không tồn tại.

Kết luận

Bằng cách đọc hướng dẫn này, bạn đã học cách tạo, thay đổi và xóa bảng trong database dựa trên SQL. Các lệnh được nêu ở đây sẽ hoạt động trên bất kỳ hệ quản trị database nào sử dụng SQL. Lưu ý mọi database SQL sử dụng cách triển khai ngôn ngữ duy nhất của riêng nó, vì vậy bạn nên tham khảo tài liệu chính thức của DBMS để có mô tả đầy đủ hơn về từng lệnh và tập hợp đầy đủ các tùy chọn của chúng.

Nếu bạn muốn tìm hiểu thêm về cách làm việc với SQL, ta khuyến khích bạn xem các hướng dẫn khác trong loạt bài này về Cách sử dụng SQL .


Tags:

Các tin liên quan