# 在 MySQL 中创建，更改和删除表

> 原文： [http://zetcode.com/databases/mysqltutorial/tables/](http://zetcode.com/databases/mysqltutorial/tables/)

在 MySQL 教程的这一部分中，我们将创建，更改和删除表。

我们将使用以下 SQL 语句：

*   `CREATE`
*   `ALTER`
*   `DROP`

`CREATE`，`ALTER`和`DROP`语句不限于表。 我们可以使用它们来创建其他数据库对象，例如事件，触发器，视图，函数或过程。 这些语句是 SQL 规范的数据定义语言（DDL）的一部分。

## `CREATE`和`DROP`语句

`CREATE`语句用于创建表。 它还用于创建索引，视图，事件，例程和触发器。

要创建表，我们给表及其列命名。 每列都有一个数据类型。 在上一章中，我们介绍了各种 MySQL 数据类型。 为列选择正确的数据类型是数据库初始设计的一部分。

```sql
mysql> CREATE TABLE Testing(Id INTEGER);

```

我们使用`CREATE TABLE`语句创建一个简单的测试表。 表名称是`Testing`。 该表具有称为`Id`的一列。 列的数据类型为`INTEGER`。

```sql
mysql> SHOW CREATE TABLE Testing;
+---------+------------------------------------------
| Table   | Create Table                                                                                
+---------+------------------------------------------
| Testing | CREATE TABLE `Testing` (
  `Id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+---------+------------------------------------------
1 row in set (0.00 sec)

```

使用`SHOW CREATE TABLE`语句，我们可以看到创建特定表的确切 SQL 语句。 还有一些默认设置。 如果我们不提供一些明确的属性，则选择这些属性。 如果没有另外指定，默认的 MySQL 引擎是 InnoDB。 （这适用于 MySQL 5.5+）。 默认字符集为 latin1。

```sql
mysql> SHOW TABLES LIKE 'T%';
+---------------------+
| Tables_in_mydb (T%) |
+---------------------+
| Testing             |
+---------------------+

```

可以使用`SHOW TABLES`语法显示已创建的非临时表。 我们可以使用`LIKE`子句限制显示的表。 在我们的例子中，我们显示所有以`T`开头的表。

```sql
mysql> DROP TABLE Testing;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW TABLES LIKE 'T%';
Empty set (0.00 sec)

```

`DROP TABLE`语句从数据库中删除一个表。

```sql
mysql> CREATE TABLE Testing(Id INT NOT NULL) ENGINE=MEMORY CHARACTER SET='utf8'
    -> COLLATE='utf8_slovak_ci';

```

我们重新创建`Testing`表。 `INT`是`INTEGER`的同义词。 数据库引擎显式设置为`MEMORY`。 我们还指定字符集和排序规则。

## `ALTER TABLE`语句

`ALTER TABLE`语句更改现有表的结构。 可以添加新列，删除列，重命名列和表或更改表的类型。 在下面的示例中，我们将演示一些可能性。

```sql
mysql> ALTER TABLE Testing RENAME TO TestTable;

mysql> SHOW TABLES LIKE 'T%';
+---------------------+
| Tables_in_mydb (T%) |
+---------------------+
| TestTable           |
+---------------------+

```

我们使用`RENAME TO`子句将测试表重命名为`TestTable`。

```sql
mysql> ALTER TABLE TestTable ADD iValues INT;

```

我们将一个名为`iValues`的新列添加到表中。

```sql
mysql> SHOW COLUMNS FROM TestTable;
+---------+---------+------+-----+---------+-------+
| Field   | Type    | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+-------+
| Id      | int(11) | NO   |     | NULL    |       |
| iValues | int(11) | YES  |     | NULL    |       |
+---------+---------+------+-----+---------+-------+

```

该语句显示表中的可用列。 我们看到新添加的列。

可以向表中添加约束。

```sql
mysql> ALTER TABLE TestTable ADD PRIMARY KEY (Id);

```

我们向`TestTable`添加`PRIMARY KEY`约束。

```sql
mysql> DESCRIBE TestTable;
+---------+---------+------+-----+---------+-------+
| Field   | Type    | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+-------+
| Id      | int(11) | NO   | PRI | NULL    |       |
| iValues | int(11) | YES  |     | NULL    |       |
+---------+---------+------+-----+---------+-------+

```

`DESCRIBE`是`SHOW COLUMNS FROM`的同义词。 我们可以在`Key`列下看到为 ID 列设置了主键约束。

```sql
mysql> ALTER TABLE TestTable CHANGE COLUMN iValues iValues1 INT;

```

在此 SQL 语句中，我们将列名从`iValues`更改为`iValues1`。

```sql
mysql> ALTER TABLE TestTable MODIFY COLUMN iValues1 MEDIUMINT;

mysql> DESCRIBE TestTable;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| Id       | int(11)      | NO   | PRI | NULL    |       |
| iValues1 | mediumint(9) | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+

```

我们使用上面的 SQL 语句来修改列定义。 我们将列数据类型从`INTEGER`更改为`MEDIUMINTEGER`。

```sql
mysql> ALTER TABLE TestTable DROP COLUMN iValues1;

mysql> DESCRIBE TestTable;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| Id    | int(11) | NO   | PRI | NULL    |       |
+-------+---------+------+-----+---------+-------+

```

在最后一个示例中，我们从表中删除了现有的列。

在 MySQL 教程的这一部分中，我们正在创建，更改和删除表。