SQL CREATE TABLE 语句
- SQL CREATE TABLE 语句
- 验证表创建
- 带有 PRIMARY KEY 的 SQL CREATE TABLE
- SQL CREATE TABLE IF NOT EXISTS
- 使用另一个表创建表
- 创建表的重要要点
在 RDBMS(关系数据库管理系统)中,数据库表用于以结构化的方式存储数据,使用 字段 和 记录。
- 字段 是表中的一列,它定义了将存储什么样的数据(例如姓名、日期或数字)。
- 记录 是表中的一行,它保存每个字段的实际数据。
简单来说,表由行和列组成,就像电子表格一样。SQL 为我们提供了不同类型的命令来轻松处理这些数据。我们可以使用 SQL 来:
- 创建或删除表
- 在这些表中插入、更新或删除数据
SQL CREATE TABLE 语句
SQL 中的 CREATE TABLE 语句用于在现有数据库中创建新表。
创建表时,您必须定义其结构,指定唯一的表名并列出所有列名及其各自的数据类型。这些数据类型可以包括数字、文本、日期等,具体取决于您要存储的数据类型。
语法
以下是在 SQL 中创建表的基本语法:
CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, ... columnN datatype );
这里:
- CREATE TABLE: 这是创建新表的 SQL 命令。
- table_name: 这是您要为表指定的名称。
- column1, column2, ...: 这些是您希望表中包含的列名。
- datatype: 指定每列将存储的数据类型,例如
INT、VARCHAR、DATE等。
示例
让我们创建一个名为 CUSTOMERS 的表,包含以下列:
- ID: 客户 ID(整数),非空
- NAME: 客户姓名(文本),非空
- AGE: 客户年龄(整数),非空
- ADDRESS: 客户地址(定长文本)
- SALARY: 客户薪资(十进制数)
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(25), SALARY DECIMAL(18, 2) );
在 MySQL 数据库中执行上述命令后,您将得到以下输出:
Query OK, 0 rows affected (0.13 sec)
验证表创建
您可以使用以下 SQL 命令列出所有表来检查表是否已成功创建:
SHOW TABLES;
如果列出了 CUSTOMERS 表,则表示表已成功创建:
| Tables_in_testdb |
|---|
| customers |
| orders |
| products |
此外,您可以使用 SQL DESC table_name 命令来列出表的描述,如下所示:
DESC CUSTOMERS;
这将显示创建的表的结构:列名、各自的数据类型、约束(如果有)等,如下所示:
| Field | Type | Null | Key | Default | Extra |
|---|---|---|---|---|---|
| ID | int | NO | NULL | ||
| NAME | varchar(20) | NO | NULL | ||
| AGE | int | NO | NULL | ||
| ADDRESS | char(25) | YES | NULL | ||
| SALARY | decimal(18,2) | YES | NULL |
SQL CREATE TABLE with PRIMARY KEY
在 SQL 中,你可以使用约束如 PRIMARY KEY 来确保一列(或多列组合)只包含唯一且非空的值。它用于唯一标识表中的每条记录。
语法
以下是在 SQL 中创建带有 PRIMARY KEY 的表的语法:
方法 1:直接在一列上定义 PRIMARY KEY
CREATE TABLE table_name ( column1 datatype PRIMARY KEY, column2 datatype, ... );
方法 2:为一个或多个列单独定义 PRIMARY KEY
CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, ... columnN datatype, PRIMARY KEY (column_name) );
你可以使用第二种方法通过在括号内列出多个列来为多列定义主键(称为 composite primary key)。
示例
让我们再次创建 CUSTOMERS 表,这次将 ID 列作为主键:
CREATE TABLE CUSTOMERS ( ID INT NOT NULL PRIMARY KEY, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(25), SALARY DECIMAL(18, 2) );
执行上述命令后,你将得到以下输出:
Query OK, 0 rows affected (0.07 sec)
SQL CREATE TABLE IF NOT EXISTS
有时,你可能尝试创建数据库中已存在的表。在这种情况下,SQL 将返回如下错误:
ERROR 1050 (42S01): Table 'CUSTOMERS' already exists
为了避免此错误,你可以使用 CREATE TABLE IF NOT EXISTS 命令。只有在表不存在时才会创建表。如果表已存在,该命令将什么也不做并无错误退出。
语法
以下是 CREATE TABLE IF NOT EXISTS 语句的基本语法:
CREATE TABLE IF NOT EXISTS table_name( column1 datatype, column2 datatype, column3 datatype, ...... columnN datatype, PRIMARY KEY( one or more columns ) );
示例
以下 SQL 命令仅在数据库中不存在 CUSTOMERS 表时创建它,否则将无错误退出:
CREATE TABLE IF NOT EXISTS CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(25), SALARY DECIMAL(18, 2), PRIMARY KEY (ID) );
我们得到的输出如下所示:
Query OK, 0 rows affected, 1 warning (0.02 sec)
使用另一个表 CREATE TABLE
与其从头创建完全新的表,你也可以通过从现有表复制结构和/或数据来创建表。这在你想快速克隆或备份表的一部分时很有帮助。
语法
在 SQL 中从另一个表创建表的基本语法如下:
CREATE TABLE NEW_TABLE_NAME AS SELECT [column1, column2...columnN] FROM EXISTING_TABLE_NAME WHERE Condition;
此命令将:
- 创建具有与所选字段相同列的新表
- 将所有匹配的数据行复制到新表中
示例
以下 SQL 命令使用 CUSTOMERS 表的两个列 ID 和 SALARY 创建名为 SALARY 的新表:
CREATE TABLE SALARY AS SELECT ID, SALARY FROM CUSTOMERS;
运行此命令后,新 SALARY 表的结构如下:
| Field | Type | Null | Key | Default | Extra |
|---|---|---|---|---|---|
| ID | int(11) | NO | PRI | NULL | |
| SALARY | decimal(18,2) | YES | NULL |
如果你只想复制结构而不复制数据,可以添加一个始终为假的条件,如下所示:
CREATE TABLE SALARY AS SELECT ID, SALARY FROM CUSTOMERS WHERE 1 = 0;
我们得到的输出如下所示:
Query OK, 0 rows affected (0.07 sec) Records: 0 Duplicates: 0 Warnings: 0
创建表的重要注意事项
在 SQL 中创建表时,需要记住以下重要注意事项:
- 表名应具有实际意义,并在同一数据库中唯一。
- 使用清晰且描述性的列名,如 FIRST_NAME(而不是 1stname)、AGE、SALARY。
- 为每个列选择正确的数据类型。例如,使用 DECIMAL 表示货币,VARCHAR 表示姓名,INT 表示 ID 或年龄。
- 始终使用 PRIMARY KEY 来唯一标识记录。