Bản tóm tắt. trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách sử dụng câu lệnh MySQL CREATE TABLE để tạo một bảng mới trong cơ sở dữ liệu
Cú pháp MySQL CREATE TABLE
Câu lệnh CREATE TABLE cho phép bạn tạo một bảng mới trong cơ sở dữ liệu
Phần sau đây minh họa cú pháp cơ bản của câu lệnh CREATE TABLE
CREATE TABLE [IF NOT EXISTS] table_name( column_1_definition, column_2_definition, ..., table_constraints ) ENGINE=storage_engine;
Code language: SQL (Structured Query Language) (sql)Hãy xem xét cú pháp chi tiết hơn
Trước tiên, bạn chỉ định tên của bảng mà bạn muốn tạo sau các từ khóa CREATE TABLE. Tên bảng phải là duy nhất trong cơ sở dữ liệu.
column_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] column_constraint;
Code language: SQL (Structured Query Language) (sql)3 là tùy chọn. Nó cho phép bạn kiểm tra xem bảng bạn tạo đã tồn tại trong cơ sở dữ liệu chưa. Nếu đây là trường hợp, MySQL sẽ bỏ qua toàn bộ câu lệnh và sẽ không tạo bất kỳ bảng mới nàoThứ hai, bạn chỉ định danh sách các cột của bảng trong phần
column_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] column_constraint;
Code language: SQL (Structured Query Language) (sql)4, các cột cách nhau bởi dấu phẩyThứ ba, bạn có thể tùy ý chỉ định công cụ lưu trữ cho bảng trong mệnh đề
column_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] column_constraint;
Code language: SQL (Structured Query Language) (sql)5. Bạn có thể sử dụng bất kỳ công cụ lưu trữ nào như InnoDB và MyISAM. Nếu bạn không khai báo rõ ràng một công cụ lưu trữ, MySQL sẽ sử dụng InnoDB theo mặc địnhInnoDB trở thành công cụ lưu trữ mặc định kể từ phiên bản MySQL 5. 5. Công cụ lưu trữ InnoDB mang lại nhiều lợi ích của hệ thống quản lý cơ sở dữ liệu quan hệ như giao dịch ACID, tính toàn vẹn tham chiếu và khôi phục sự cố. Trong các phiên bản trước, MySQL đã sử dụng MyISAM làm công cụ lưu trữ mặc định
Sau đây là cú pháp cho định nghĩa của một cột
column_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] column_constraint;
Code language: SQL (Structured Query Language) (sql)Đây là những thông tin chi tiết
- ____1_______6 chỉ định tên của cột. Mỗi cột có một kiểu dữ liệu cụ thể và kích thước tùy chọn e. g. ,
column_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] column_constraint;
Code language: SQL (Structured Query Language) (sql)7 - Ràng buộc
column_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] column_constraint;
Code language: SQL (Structured Query Language) (sql)8 đảm bảo rằng cột sẽ không chứacolumn_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] column_constraint;
Code language: SQL (Structured Query Language) (sql)9. Bên cạnh ràng buộcPRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)0, một cột có thể có thêm ràng buộc như CHECK và UNIQUE PRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)1 chỉ định giá trị mặc định cho cộtPRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)2 cho biết giá trị của cột được tự động tăng thêm một mỗi khi một hàng mới được chèn vào bảng. Mỗi bảng có tối đa một cộtPRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)3
Sau danh sách cột, bạn có thể xác định các ràng buộc bảng như ĐỘC ĐÁO, KIỂM TRA, KHÓA CHÍNH và KHÓA NGOÀI
Ví dụ bạn muốn đặt một cột hoặc một nhóm cột làm khóa chính thì bạn sử dụng cú pháp sau
PRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)Các ví dụ về câu lệnh MySQL CREATE TABLE
Hãy lấy một số ví dụ về việc tạo bảng mới
1) MySQL CREATE TABLE ví dụ đơn giản
Câu lệnh sau tạo một bảng mới có tên
PRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)6CREATE TABLE IF NOT EXISTS tasks ( task_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, start_date DATE, due_date DATE, status TINYINT NOT NULL, priority TINYINT NOT NULL, description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=INNODB;
Code language: SQL (Structured Query Language) (sql)Bảng nhiệm vụ có các cột sau
PRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)7 là cột tăng tự động. Nếu bạn sử dụng câu lệnhPRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)8 để chèn một hàng mới vào bảng mà không chỉ định giá trị cho cộtPRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)7, MySQL sẽ tự động tạo một số nguyên tuần tự choPRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)7 bắt đầu từ 1- Cột
CREATE TABLE IF NOT EXISTS tasks ( task_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, start_date DATE, due_date DATE, status TINYINT NOT NULL, priority TINYINT NOT NULL, description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=INNODB;
Code language: SQL (Structured Query Language) (sql)1 là một cột chuỗi ký tự biến đổi có độ dài tối đa là 255. Điều đó có nghĩa là bạn không thể chèn chuỗi có độ dài lớn hơn 255 vào cột này. Ràng buộccolumn_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] column_constraint;
Code language: SQL (Structured Query Language) (sql)8 chỉ ra rằng cột không chấp nhậncolumn_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] column_constraint;
Code language: SQL (Structured Query Language) (sql)9. Nói cách khác, bạn phải cung cấp giá trị không phải NULL khi chèn hoặc cập nhật cột này CREATE TABLE IF NOT EXISTS tasks ( task_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, start_date DATE, due_date DATE, status TINYINT NOT NULL, priority TINYINT NOT NULL, description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=INNODB;
Code language: SQL (Structured Query Language) (sql)4 vàCREATE TABLE IF NOT EXISTS tasks ( task_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, start_date DATE, due_date DATE, status TINYINT NOT NULL, priority TINYINT NOT NULL, description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=INNODB;
Code language: SQL (Structured Query Language) (sql)5 là cộtCREATE TABLE IF NOT EXISTS tasks ( task_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, start_date DATE, due_date DATE, status TINYINT NOT NULL, priority TINYINT NOT NULL, description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=INNODB;
Code language: SQL (Structured Query Language) (sql)6. Vì các cột này không có ràng buộcPRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)0 nên chúng có thể lưu trữcolumn_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] column_constraint;
Code language: SQL (Structured Query Language) (sql)9. Cột start_date có giá trị mặc định là ngày hiện tại. Nói cách khác, nếu bạn không cung cấp giá trị cho cột start_date khi chèn một hàng mới, thì cột start_date sẽ lấy ngày hiện tại của máy chủ cơ sở dữ liệuCREATE TABLE IF NOT EXISTS tasks ( task_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, start_date DATE, due_date DATE, status TINYINT NOT NULL, priority TINYINT NOT NULL, description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=INNODB;
Code language: SQL (Structured Query Language) (sql)9 vàDESCRIBE tasks;
Code language: SQL (Structured Query Language) (sql)0 là các cộtDESCRIBE tasks;
Code language: SQL (Structured Query Language) (sql)1 không cho phépcolumn_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] column_constraint;
Code language: SQL (Structured Query Language) (sql)9- Cột
DESCRIBE tasks;
Code language: SQL (Structured Query Language) (sql)3 là cộtDESCRIBE tasks;
Code language: SQL (Structured Query Language) (sql)4 chấp nhậncolumn_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] column_constraint;
Code language: SQL (Structured Query Language) (sql)9 DESCRIBE tasks;
Code language: SQL (Structured Query Language) (sql)6 là cộtDESCRIBE tasks;
Code language: SQL (Structured Query Language) (sql)7 chấp nhận thời gian hiện tại làm giá trị mặc định
PRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)7 là cột khóa chính của bảngPRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)6. Điều đó có nghĩa là các giá trị trong cộtPRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)7 sẽ xác định duy nhất các hàng trong bảngKhi bạn thực thi câu lệnh CREATE TABLE để tạo bảng
PRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)6, bạn có thể xem cấu trúc của nó bằng cách sử dụng câu lệnhCREATE TABLE IF NOT EXISTS checklists ( todo_id INT AUTO_INCREMENT, task_id INT, todo VARCHAR(255) NOT NULL, is_completed BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY (todo_id , task_id), FOREIGN KEY (task_id) REFERENCES tasks (task_id) ON UPDATE RESTRICT ON DELETE CASCADE );
Code language: SQL (Structured Query Language) (sql)3DESCRIBE tasks;
Code language: SQL (Structured Query Language) (sql)Ảnh này hiển thị sơ đồ cơ sở dữ liệu của bảng
PRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)62) MySQL CREATE TABLE với ví dụ về khóa chính khóa ngoại
Giả sử mỗi nhiệm vụ có một danh sách kiểm tra hoặc danh sách việc cần làm. Để lưu trữ danh sách kiểm tra các nhiệm vụ, bạn có thể tạo một bảng mới có tên là
CREATE TABLE IF NOT EXISTS checklists ( todo_id INT AUTO_INCREMENT, task_id INT, todo VARCHAR(255) NOT NULL, is_completed BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY (todo_id , task_id), FOREIGN KEY (task_id) REFERENCES tasks (task_id) ON UPDATE RESTRICT ON DELETE CASCADE );
Code language: SQL (Structured Query Language) (sql)6 như sauCREATE TABLE IF NOT EXISTS checklists ( todo_id INT AUTO_INCREMENT, task_id INT, todo VARCHAR(255) NOT NULL, is_completed BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY (todo_id , task_id), FOREIGN KEY (task_id) REFERENCES tasks (task_id) ON UPDATE RESTRICT ON DELETE CASCADE );
Code language: SQL (Structured Query Language) (sql)Bảng
CREATE TABLE IF NOT EXISTS checklists ( todo_id INT AUTO_INCREMENT, task_id INT, todo VARCHAR(255) NOT NULL, is_completed BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY (todo_id , task_id), FOREIGN KEY (task_id) REFERENCES tasks (task_id) ON UPDATE RESTRICT ON DELETE CASCADE );
Code language: SQL (Structured Query Language) (sql)6 có khóa chính bao gồm hai cột. Do đó, chúng tôi đã sử dụng ràng buộc bảng để xác định khóa chínhPRIMARY KEY (todo_id , task_id)
Code language: SQL (Structured Query Language) (sql)Ngoài ra,
PRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)7 là cột khóa ngoại tham chiếu đến cộtPRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)7 của bảngPRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)6, chúng tôi đã sử dụng ràng buộc khóa ngoại để thiết lập mối quan hệ nàyFOREIGN KEY (task_id) REFERENCES tasks (task_id) ON UPDATE RESTRICT ON DELETE CASCADE
Code language: SQL (Structured Query Language) (sql)Bạn sẽ tìm hiểu thêm về ràng buộc khóa ngoại trong hướng dẫn tiếp theo
Hình ảnh này minh họa bảng
CREATE TABLE IF NOT EXISTS checklists ( todo_id INT AUTO_INCREMENT, task_id INT, todo VARCHAR(255) NOT NULL, is_completed BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY (todo_id , task_id), FOREIGN KEY (task_id) REFERENCES tasks (task_id) ON UPDATE RESTRICT ON DELETE CASCADE );
Code language: SQL (Structured Query Language) (sql)6 và mối quan hệ của nó với bảngPRIMARY KEY (col1,col2,...)
Code language: SQL (Structured Query Language) (sql)6Trong hướng dẫn này, bạn đã học cách sử dụng câu lệnh MySQL CREATE TABLE để tạo một bảng mới trong cơ sở dữ liệu