MySQL - 建立表



在 MySQL 關係資料庫系統中,SQL 用於以結構化表的形式儲存資料。這些表由欄位和記錄組成。欄位表示定義要在表中儲存的資料型別的列,記錄是包含實際資料的行。MySQL 提供各種查詢來與資料互動,允許您建立表、更新表、刪除表等。

MySQL 建立表語句

要在提示符下在 MySQL RDBMS 中建立表,使用 CREATE TABLE 語句。

可以在 SQL Server 資料庫中建立任意數量的表。但是,資料庫中存在的物件數量存在限制。包括表、檢視、索引等,資料庫不能超過 2,147,483,647 個物件。因此,單個使用者定義的表最多可以定義 1024 列。

建立表的 MySQL 查詢必須定義表的結構。結構由表名和表中列的名稱組成,以及每列的資料型別。請注意,每個表在資料庫中必須具有唯一的名稱。

首先,表建立命令需要以下詳細資訊:

  • 表的名稱。
  • 列的名稱。
  • 每列的定義。

語法

以下是建立 MySQL 表的基本 SQL 語法:

CREATE TABLE table_name(
   column1 datatype,
   column2 datatype,
   .....
   columnN datatype,
   PRIMARY KEY( one or more columns )
);

示例

在以下查詢中,我們使用 CREATE TABLE 語句建立一個名為 CUSTOMERS 的表:

CREATE TABLE CUSTOMERS (
   ID INT 				AUTO_INCREMENT,
   NAME VARCHAR(20) 	NOT NULL,
   AGE INT 				NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

這裡,一些專案需要解釋:

  • MySQL 中的欄位屬性 AUTO_INCREMENT 會自動將 ID 列中的值遞增 1,用於您新增的每個新記錄。它從下一個可用數字開始。

  • 使用欄位屬性 NOT NULL 是因為我們不希望該欄位為 NULL。因此,如果使用者嘗試建立具有該欄位中 NULL 值的記錄,則 MySQL 將引發錯誤。

  • 關鍵字 PRIMARY KEY 用於將列定義為主鍵。它確保該列中的每條記錄都是唯一的。您還可以透過逗號分隔它們來將其用於多列。

輸出

當我們執行上述查詢時,將獲得如下輸出:

Query OK, 0 rows affected (0.03 sec)

驗證

建立表完成後,我們可以使用以下查詢檢查它是否已成功建立:

DESC CUSTOMERS;

上述查詢顯示 CUSTOMERS 表的結構:列名、資料型別等。

欄位 型別 預設值 額外
ID int PRI NULL auto_increment
NAME varchar(20) NULL
AGE int NULL
ADDRESS char(25) NULL
SALARY decimal(18,2) NULL

從命令提示符建立表

我們可以透過定義其結構和列從命令提示符建立 MySQL 表。

以下是執行從命令提示符建立 MySQL 表的步驟

  • 首先,開啟命令提示符並輸入以下命令:mysql -u root -p 以訪問 MySQL 資料庫管理系統。

  • 輸入命令後,輸入密碼以登入到 MySQL 伺服器。

  • 然後,我們可以使用相應的 SQL CREATE TABLE 查詢開始建立表。

示例

在以下示例中,我們從命令提示符建立了一個名為 CUSTOMERS 的 MySQL 表。

CREATE TABLE CUSTOMERS (
   NAME VARCHAR(20) NOT NULL,
   ID INT AUTO_INCREMENT,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

注意 - 在 SQL 命令末尾使用分號 (;) 之前,MySQL 不會終止命令。

輸出

當我們執行上述查詢時,將獲得如下輸出:

Query OK, 0 rows affected (0.03 sec)

驗證

我們可以使用以下查詢驗證表是否已成功建立:

mysql> DESC CUSTOMERS;

以上查詢將顯示 CUSTOMERS 表的結構和描述。

欄位 型別 預設值 額外
ID int PRI NULL auto_increment
NAME varchar(20) NULL
AGE int NULL
ADDRESS char(25) NULL
SALARY decimal(18,2) NULL

從現有表建立表

我們可以使用 SQL 的 CREATE TABLE 和 SELECT 語句建立現有表的副本,包括其結構和資料。副本表具有相同的列及其定義,並且還填充與原始表相同的資料。

注意 - 因為它是一個全新的表,因此對它進行的任何更改都不會反映在原始表中。

語法

以下是根據另一個表建立表的語法:

CREATE TABLE NEW_TABLE_NAME AS
SELECT [column1, column2...columnN]
FROM EXISTING_TABLE_NAME
[WHERE CONDITION];

這裡,column1、column2... 是現有表的欄位,並且將用於建立新表的欄位。WHERE 子句是可選的。

示例

讓我們考慮 TUTORIALS 資料庫中現有的表 CUSTOMERS

mysql> USE TUTORIALS;
Database changed
mysql> SELECT * FROM CUSTOMERS;

以下是 CUSTOMERS 表:

ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

現在,使用以下查詢,我們建立一個名為 SAMPLE 的新表,其結構和記錄與 CUSTOMERS 相同。

CREATE TABLE SAMPLE AS
SELECT * FROM CUSTOMERS;

輸出

正如我們在輸出中看到的,SAMPLE 表已成功建立。

Query OK, 7 rows affected (0.03 sec)
Records: 7  Duplicates: 0  Warnings: 0

驗證

使用以下 SELECT 語句,讓我們驗證新表 SAMPLE 是否包含記錄。

SELECT * FROM SAMPLE;

正如我們在下面的輸出中看到的,SAMPLE 表已建立,其中包含來自 CUSTOMERS 表的所有記錄。

ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

IF NOT EXISTS 子句

如果您嘗試建立名稱已存在的表,則會生成錯誤。

CREATE TABLE Employee(Name VARCHAR(255));
ERROR 1050 (42S01): Table 'employee' already exists

如果您在 CREATE 語句中使用 IF NOT EXISTS 子句(如下所示),則會建立一個新表;如果具有給定名稱的表已存在,則會忽略該查詢。

CREATE TABLE Test(Name VARCHAR(255));
Query OK, 0 rows affected (0.69 sec)

使用客戶端程式在 MySQL 資料庫中建立表

除了使用 MySQL 查詢在 MySQL 資料庫中建立表之外,我們還可以使用客戶端程式執行 CREATE TABLE 操作。

語法

以下是各種程式語言中建立表的語法:

要在 MySQL 資料庫中透過 PHP 程式建立表,我們需要使用 mysqli 函式 query() 執行 CREATE TABLE 語句,如下所示:

$sql = "CREATE TABLE table_name (column_name column_type)";
$mysqli->query($sql);

要在 MySQL 資料庫中透過 Node.js 程式建立表,我們需要使用 mysql2 庫的 query() 函式執行 CREATE TABLE 語句,如下所示:

sql = "CREATE TABLE table_name (column_name column_type)";
con.query(sql);

要在 MySQL 資料庫中透過 Java 程式建立表,我們需要使用 JDBC 函式 executeUpdate() 執行 CREATE TABLE 語句,如下所示:

String sql = "CREATE TABLE table_name (column_name column_type)";
statement.execute(sql);

要在 MySQL 資料庫中透過 Python 程式建立表,我們需要使用 MySQL Connector/Pythonexecute() 函式執行 CREATE TABLE 語句,如下所示:

sql = "CREATE TABLE table_name (column_name column_type)";
cursorObj.execute(sql);

示例

以下是程式:

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'root@123';
$dbname = 'TUTORIALS';
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);

if($mysqli->connect_errno ) {
   printf("Connect failed: %s<br />", $mysqli->connect_error);
   exit();
}
printf('Connected successfully.<br />');

$sql = "CREATE TABLE tutorials_tbl( ".
   "tutorial_id INT NOT NULL AUTO_INCREMENT, "
   "tutorial_title VARCHAR(100) NOT NULL, ".
   "tutorial_author VARCHAR(40) NOT NULL, ".
   "submission_date DATE, ".
   "PRIMARY KEY ( tutorial_id )); ";
if ($mysqli->query($sql)) {
   printf("Table tutorials_tbl created successfully.<br />");
}
if ($mysqli->errno) {
   printf("Could not create table: %s<br />", $mysqli->error);
}
$mysqli->close();

輸出

獲得的輸出如下所示:

Connected successfully.
Table tutorials_tbl created successfully.
var mysql = require('mysql2');
var con = mysql.createConnection({
   host: "localhost",
   user: "root",
   password: "*****"
});

  //Connecting to MySQL
  con.connect(function (err) {
  if (err) throw err;
  console.log("Connected!");
  console.log("--------------------------");
  
  //Creating a table
  sql = "CREATE TABLE tutorials_tbl(tutorial_id INT NOT NULL AUTO_INCREMENT,tutorial_title VARCHAR(100) NOT NULL,tutorial_author VARCHAR(40) NOT NULL,submission_date DATE,PRIMARY KEY ( tutorial_id ));"
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log("The table tutorials_tbl is created successfully!");
  });
});

輸出

生成的輸出如下所示:

Connected!
--------------------------
The table tutorials_tbl is created successfully!
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class CreateTable {
   public static void main(String[] args) {
      String url = "jdbc:mysql://:3306/TUTORIALS";
        String username = "root";
        String password = "password";
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection = DriverManager.getConnection(url, username, password);
            Statement statement = connection.createStatement();
            System.out.println("Connected successfully...!");

            //Create new table...!
            String sql = "CREATE TABLE tutorials_tbl (ID Int Auto_Increment not null, tutorial_title Varchar(50) Not Null, tutorial_author Varchar(30) Not Null, Primary Key(ID))";
            statement.executeUpdate(sql);
            System.out.println("Table created successfully...!");

            ResultSet resultSet = statement.executeQuery("DESCRIBE tutorials_tbl");
            while (resultSet.next()) {
                System.out.print(resultSet.getNString(1));
                System.out.println();
            }
            connection.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

輸出

獲得的輸出如下所示:

Connected successfully...!
Table created successfully...!
ID
tutorial_title
tutorial_author
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
   user='root', password='password', host='localhost', database='tut'
)
#Creating a cursor object 
cursor = conn.cursor()
#Creating a table
sql ='''CREATE TABLE tutorials_tbl(
   tutorial_id INT NOT NULL AUTO_INCREMENT,
   tutorial_title VARCHAR(100) NOT NULL,
   tutorial_author VARCHAR(40) NOT NULL,
   submission_date DATE,
   PRIMARY KEY ( tutorial_id )
)'''
cursor.execute(sql)
print ("The table tutorials_tbl is created successfully!")
#Closing the connection
conn.close()

輸出

以下是以上程式碼的輸出:

The table tutorials_tbl is created successfully!
廣告