原文: http://zetcode.com/databases/mysqltutorial/tables/

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

我们将使用以下 SQL 语句:

  • CREATE
  • ALTER
  • DROP

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

CREATEDROP语句

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

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

  1. mysql> CREATE TABLE Testing(Id INTEGER);

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

  1. mysql> SHOW CREATE TABLE Testing;
  2. +---------+------------------------------------------
  3. | Table | Create Table
  4. +---------+------------------------------------------
  5. | Testing | CREATE TABLE `Testing` (
  6. `Id` int(11) DEFAULT NULL
  7. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
  8. +---------+------------------------------------------
  9. 1 row in set (0.00 sec)

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

  1. mysql> SHOW TABLES LIKE 'T%';
  2. +---------------------+
  3. | Tables_in_mydb (T%) |
  4. +---------------------+
  5. | Testing |
  6. +---------------------+

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

  1. mysql> DROP TABLE Testing;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> SHOW TABLES LIKE 'T%';
  4. Empty set (0.00 sec)

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

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

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

ALTER TABLE语句

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

  1. mysql> ALTER TABLE Testing RENAME TO TestTable;
  2. mysql> SHOW TABLES LIKE 'T%';
  3. +---------------------+
  4. | Tables_in_mydb (T%) |
  5. +---------------------+
  6. | TestTable |
  7. +---------------------+

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

  1. mysql> ALTER TABLE TestTable ADD iValues INT;

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

  1. mysql> SHOW COLUMNS FROM TestTable;
  2. +---------+---------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +---------+---------+------+-----+---------+-------+
  5. | Id | int(11) | NO | | NULL | |
  6. | iValues | int(11) | YES | | NULL | |
  7. +---------+---------+------+-----+---------+-------+

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

可以向表中添加约束。

  1. mysql> ALTER TABLE TestTable ADD PRIMARY KEY (Id);

我们向TestTable添加PRIMARY KEY约束。

  1. mysql> DESCRIBE TestTable;
  2. +---------+---------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +---------+---------+------+-----+---------+-------+
  5. | Id | int(11) | NO | PRI | NULL | |
  6. | iValues | int(11) | YES | | NULL | |
  7. +---------+---------+------+-----+---------+-------+

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

  1. mysql> ALTER TABLE TestTable CHANGE COLUMN iValues iValues1 INT;

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

  1. mysql> ALTER TABLE TestTable MODIFY COLUMN iValues1 MEDIUMINT;
  2. mysql> DESCRIBE TestTable;
  3. +----------+--------------+------+-----+---------+-------+
  4. | Field | Type | Null | Key | Default | Extra |
  5. +----------+--------------+------+-----+---------+-------+
  6. | Id | int(11) | NO | PRI | NULL | |
  7. | iValues1 | mediumint(9) | YES | | NULL | |
  8. +----------+--------------+------+-----+---------+-------+

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

  1. mysql> ALTER TABLE TestTable DROP COLUMN iValues1;
  2. mysql> DESCRIBE TestTable;
  3. +-------+---------+------+-----+---------+-------+
  4. | Field | Type | Null | Key | Default | Extra |
  5. +-------+---------+------+-----+---------+-------+
  6. | Id | int(11) | NO | PRI | NULL | |
  7. +-------+---------+------+-----+---------+-------+

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

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