MySQL - 创建表
在 MySQL 关系数据库系统中,SQL 用于以结构化表的形式存储数据。这些表由字段和记录组成。字段代表定义表中存储数据类型的列,而记录则代表包含实际数据的行。MySQL 提供各种查询来与数据交互,允许您创建、更新、删除表等。
MySQL CREATE TABLE 语句
要在 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 列的值。它从下一个可用的数字开始。
使用字段属性 NOT NULL 是因为我们不希望此字段为 NULL。因此,如果用户尝试在该字段中创建包含 NULL 值的记录,MySQL 将引发错误。
关键字 PRIMARY KEY 用于将列定义为主键。它确保该列中的每条记录都是唯一的。您还可以将其用于多个列,只需用逗号分隔即可。
输出
执行上述查询后,将获得以下输出:-
Query OK, 0 rows affected (0.03 sec)
验证
创建表后,我们可以使用以下查询检查表是否创建成功:-
DESC CUSTOMERS;
上述查询显示了 CUSTOMERS 表的结构:列名、数据类型等。
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | int | NO | PRI | NULL | auto_increment |
NAME | varchar(20) | NO | NULL | ||
AGE | int | NO | NULL | ||
ADDRESS | char(25) | YES | NULL | ||
SALARY | decimal(18,2) | YES | 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 表的结构和描述 −
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | int | NO | PRI | NULL | auto_increment |
NAME | varchar(20) | NO | NULL | ||
AGE | int | NO | NULL | ||
ADDRESS | char(25) | YES | NULL | ||
SALARY | decimal(18,2) | YES | 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
如果您将 IF NOT EXISTS 子句与 CREATE 语句一起使用(如下所示),则会创建一个新表;如果指定名称的表已存在,则查询将被忽略。
CREATE TABLE Test(Name VARCHAR(255)); Query OK, 0 rows affected (0.69 sec)
使用客户端程序在 MySQL 数据库中创建表
除了使用 MySQL 查询在 MySQL 数据库中创建表之外,我们还可以使用客户端程序执行 CREATE TABLE 操作。
语法
以下是使用各种编程语言创建表的语法 -
要通过 PHP 程序在 MySQL 数据库中创建表,我们需要使用 mysqli 函数 query() 执行 CREATE TABLE 语句,如下所示:-
$sql = "CREATE TABLE table_name (column_name column_type)"; $mysqli->query($sql);
要通过 Node.js 程序在 MySQL 数据库中创建表,我们需要使用 mysql2 库中的 query() 函数执行 CREATE TABLE 语句,如下所示:-
sql = "CREATE TABLE table_name (column_name column_type)"; con.query(sql);
要通过 Java 程序在 MySQL 数据库中创建表,我们需要使用 JDBC 函数 executeUpdate() 执行 CREATE TABLE 语句,如下所示:-
String sql = "CREATE TABLE table_name (column_name column_type)"; statement.execute(sql);
要通过 Pyhton 程序在 MySQL 数据库中创建表,我们需要使用 MySQL Connector/Python 的 execute() 函数执行 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: "*****" }); //连接到 MySQL con.connect(function (err) { if (err) throw err; console.log("Connected!"); console.log("--------------------------"); //创建一个表 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://localhost: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 #建立连接 conn = mysql.connector.connect( user='root', password='password', host='localhost', database='tut' ) #创建游标对象 cursor = conn.cursor() #创建表 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!") #关闭连接 conn.close()
输出
以下是上述代码的输出 -
The table tutorials_tbl is created successfully!