Mysqli 简明教程
MySQLi - ALTER Command
MySQL ALTER 命令非常有用,当你想更改表格名称、任何表格字段或你想添加或删除表格中的现有列时。
让我们从创建一个名为 tutorials_alter 的表格开始。
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tutorials_alter
→ (
→ i INT,
→ c CHAR(1)
→ );
Query OK, 0 rows affected (0.27 sec)
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i | int(11) | YES | | NULL | |
| c | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.02 sec)
Dropping, Adding or Repositioning a Column
假设您想放弃上面 MySQL 表的现有列 i ,那么您将按照如下所示,使用 DROP 子句和 ALTER 命令 −
mysql> ALTER TABLE tutorials_alter DROP i;
当列是表格中仅剩的一列时, DROP 不会起作用。
要添加列,请使用 ADD 并指定列定义。以下语句将 i 列还原到教程_更改 −
mysql> ALTER TABLE tutorials_alter ADD i INT;
发出此语句后,testalter 将包含与您首次创建表时相同的两列,但结构不会完全相同。这是因为默认情况下会将新列添加到表的末尾。因此,即使 i 最初是 mytbl 中的第一列,现在它也是最后一列了。
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 sec)
要指示您要在表的特定位置放置一列,请使用 FIRST 使其成为第一列,或使用 AFTER col_name 指示将新列置于 col_name 之后。试用一下以下 ALTER TABLE 语句,并在每个语句后使用 SHOW COLUMNS 来查看每个语句有什么效果 −
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;
FIRST 和 AFTER 限定符仅适用于 ADD 子句。这意味着如果您想重新定位表中现有的列,则必须先将其 DROP,然后在新的位置将其 ADD。
Changing a Column Definition or Name
要更改列的定义,请使用 MODIFY 或 CHANGE 子句以及 ALTER 命令。例如,要将列 c 从 CHAR(1) 更改为 CHAR(10),请这样做 −
mysql> ALTER TABLE tutorials_alter MODIFY c CHAR(10);
使用 CHANGE 时,语法有些不同。在 CHANGE 关键字后面,您命名要更改的列,然后指定新定义,其中包括新名称。试用以下示例:
mysql> ALTER TABLE tutorials_alter CHANGE i j BIGINT;
如果您现在使用 CHANGE 将 j 从 BIGINT 转换回 INT 而无需更改列名,则语句将按预期的那样 −
mysql> ALTER TABLE tutorials_alter CHANGE j j INT;
The Effect of ALTER TABLE on Null and Default Value Attributes −
在 MODIFY 或 CHANGE 列时,您还可以指定列是否可以包含 NULL 值以及其默认值是什么。事实上,如果不这样做,MySQL 会自动为这些属性分配值。
以下示例中,NOT NULL 列的默认值为 100。
mysql> ALTER TABLE tutorials_alter
→ MODIFY j BIGINT NOT NULL DEFAULT 100;
如果您不使用上述命令,那么 MySQL 将填入所有列中的 NULL 值。
Changing a Column’s Default Value
您可以使用 ALTER 命令更改任何列的默认值。试用以下示例。
mysql> ALTER TABLE tutorials_alter ALTER j SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c | char(10) | YES | | NULL | |
| j | bigint(20) | NO | | 1000 | |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)
您可以使用 DROP 子句和 ALTER 命令从任何列中删除默认约束。
mysql> ALTER TABLE tutorials_alter ALTER j DROP DEFAULT;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c | char(10) | YES | | NULL | |
| j | bigint(20) | NO | | NULL | |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)
Changing a Table Type
您可以使用 TYPE 子句和 ALTER 命令使用表类型。
要找出表当前的类型,请使用 SHOW TABLE STATUS 语句。
mysql> SHOW TABLE STATUS LIKE 'tutorials_alter'\G
*************************** 1. row ***************************
Name: tutorials_alter
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2017-02-17 11:30:29
Update_time: NULL
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)