MySQL 创建、修改、删除表
最后修改于 2023 年 1 月 10 日
在本 MySQL 教程中,我们将创建、修改和删除表。
我们将使用以下 SQL 语句
- CREATE TABLE
- ALTER TABLE
- DROP TABLE
CREATE、ALTER 和 DROP 语句不仅限于表。 我们可以使用它们来创建其他数据库对象,例如事件、触发器、视图、函数或过程。 这些语句是 SQL 规范的数据定义语言 (DDL) 的一部分。
CREATE 和 DROP 语句
CREATE 语句用于创建表。 它也用于创建索引、视图、事件、例程和触发器。
要创建一个表,我们给表及其列起一个名称。 每列都有一个数据类型。 我们在上一章中介绍了各种 MySQL 数据类型。 为列选择正确的数据类型是数据库初始设计的一部分。
mysql> CREATE TABLE Testing(Id INTEGER);
我们使用 CREATE TABLE 语句创建一个简单的 Testing 表。 表名为 Testing。 该表有一列名为 Id。 并且列的数据类型为 INTEGER。
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。
mysql> SHOW TABLES LIKE 'T%'; +---------------------+ | Tables_in_mydb (T%) | +---------------------+ | Testing | +---------------------+
可以使用 SHOW TABLES 语法显示已创建的非临时表。 我们可以使用 LIKE 子句来限制显示的表。 在我们的例子中,我们显示所有以 T 开头的表。
mysql> DROP TABLE Testing; Query OK, 0 rows affected (0.00 sec) mysql> SHOW TABLES LIKE 'T%'; Empty set (0.00 sec)
DROP TABLE 语句从数据库中删除表。
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 语句更改现有表的结构。 它可以添加新列、删除列、重命名列和表或更改表的类型。 在以下示例中,我们将演示一些可能性。
mysql> ALTER TABLE Testing RENAME TO TestTable; mysql> SHOW TABLES LIKE 'T%'; +---------------------+ | Tables_in_mydb (T%) | +---------------------+ | TestTable | +---------------------+
我们使用 RENAME TO 子句将 Testing 表重命名为 TestTable。
mysql> ALTER TABLE TestTable ADD iValues INT;
我们向表中添加一个名为 iValues 的新列。
mysql> SHOW COLUMNS FROM TestTable; +---------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+---------+------+-----+---------+-------+ | Id | int(11) | NO | | NULL | | | iValues | int(11) | YES | | NULL | | +---------+---------+------+-----+---------+-------+
该语句显示表中的可用列。 我们看到新添加的列。
可以将约束添加到表中。
mysql> ALTER TABLE TestTable ADD PRIMARY KEY (Id);
我们向 TestTable 添加一个 PRIMARY KEY 约束。
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 列设置了主键约束。
mysql> ALTER TABLE TestTable CHANGE COLUMN iValues iValues1 INT;
在此 SQL 语句中,我们将列名从 iValues 更改为 iValues1。
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。
mysql> ALTER TABLE TestTable DROP COLUMN iValues1; mysql> DESCRIBE TestTable; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | Id | int(11) | NO | PRI | NULL | | +-------+---------+------+-----+---------+-------+
在最后一个示例中,我们从表中删除一个现有列。
在本 MySQL 教程中,我们创建、修改和删除了表。