Aula 5 do MySQL - Modificar a estrutura da tabela
No MySQL, você pode usar a instrução ALTER TABLE para alterar a estrutura da tabela de dados original. As operações envolvidas na modificação da estrutura da tabela incluem principalmente: (1) adição e exclusão de campos; (2) modificação do tipo de dados do campo; (3) modificação do nome do campo; (4) modificação da posição de organização do campo; (5) adição e exclusão completa Restrições sexuais; (6) modificar o nome da tabela; (7) alterar o mecanismo de armazenamento da tabela.
O formato da sintaxe é o seguinte:
ALTER TABLE <表名> [修改选项];
[修改选项]的格式为:
ADD COLUMN <列名> <类型>
| CHANGE COLUMN <旧列名> <新列名> <新列类型>
| ALTER COLUMN <列名> [ SET DEFAULT <默认值> | DROP DEFAULT ]
| MODIFY COLUMN <列名> <类型>
| DROP COLUMN <列名>
| RENAME TO <新表名>
O exemplo a seguir usa a tabela de funcionários, que possui a seguinte estrutura:
mysql> desc employee;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | char(10) | YES | | NULL | |
| addr | varchar(100) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
Um, adicionar e excluir campos
1. Adicionar campos
O formato da sintaxe é o seguinte:
ALTER TABLE <表名> ADD COLUMN <列名> <类型> <完整性约束> [FIRST | AFTER 列名];
说明:使用 [FIRST | AFTER 列名] 选项可以设置新增字段的位置。
Por exemplo:
(1) Adicionar um telefone de coluna
mysql> alter table employee add phone char(20);
Query OK, 0 rows affected (0.17 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc employee;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | char(10) | YES | | NULL | |
| addr | varchar(100) | YES | | NULL | |
| phone | char(20) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
(2) Adicione um salário de coluna, o valor padrão é 0, não pode assumir um valor nulo
mysql> alter table employee add salary decimal(10,2) default 0 not null;
Query OK, 0 rows affected (0.11 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc employee;
+--------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | char(10) | YES | | NULL | |
| addr | varchar(100) | YES | | NULL | |
| phone | char(20) | YES | | NULL | |
| salary | decimal(10,2) | NO | | 0.00 | |
+--------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
(3) Adicione um novo campo de nascimento, e coloque-o após o campo de nome
mysql> ALTER TABLE employee ADD COLUMN birth datetime after name;
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc employee;
+--------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | char(10) | YES | | NULL | |
| birth | datetime | YES | | NULL | |
| addr | varchar(100) | YES | | NULL | |
| phone | char(20) | YES | | NULL | |
| salary | decimal(10,2) | NO | | 0.00 | |
+--------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
2. Exclua o campo
O formato da sintaxe é o seguinte:
ALTER TABLE <表名> DROP COLUMN <列名>;
Exemplo: Exclua o campo salário na tabela de funcionários
mysql> alter table employee drop column salary;
Query OK, 0 rows affected (0.17 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc employee;
+--------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | char(10) | YES | | NULL | |
| birth | datetime | YES | | NULL | |
| addr | varchar(100) | YES | | NULL | |
| phone | char(20) | YES | | NULL | |
+--------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
Dois, modifique o tipo de dados, nome e localização do campo
1. Modifique o tipo de dados do campo
Use a opção MODIFY para modificar o tipo de dados do campo. O formato da sintaxe é o seguinte:
ALTER TABLE <表名> MODIFY COLUMN <列名> <类型>;
说明:使用 MODIFY 选项不能更改字段的名称。
Exemplo: altere o tipo do nome do campo para varchar, com um comprimento de 20
mysql> alter table employee modify name varchar(20);
Query OK, 2 rows affected (0.05 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> desc employee;
+--------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| birth | datetime | YES | | NULL | |
| addr | varchar(100) | YES | | NULL | |
| phone | char(20) | YES | | NULL | |
| salary | decimal(10,2) | NO | | 0.00 | |
+--------+---------------+------+-----+---------+-------+
6 rows in set (0.01 sec)
2. Modifique o nome do campo
Use a opção ALTERAR para modificar o nome do campo. O formato da sintaxe é o seguinte:
ALTER TABLE <表名> CHANGE COLUMN <旧列名> <新列名> <新列类型>;
说明:使用 CHANGE 选项时,如果新列名和旧列名相同,则作用和 MODIFY 相同。
Exemplo: altere o nome da coluna addr para address e o tipo para varchar (200), e coloque-o após o campo phone
mysql> alter table employee change addr address varchar(200) after phone;
Query OK, 0 rows affected (0.13 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc employee;
+---------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| birth | datetime | YES | | NULL | |
| phone | char(20) | YES | | NULL | |
| address | varchar(200) | YES | | NULL | |
| salary | decimal(10,2) | NO | | 0.00 | |
+---------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
3. Altere a posição do campo
Ao usar a opção ADICIONAR para adicionar campos, usar a opção MODIFICAR para modificar o tipo e o comprimento do campo e usar a opção ALTERAR para modificar o nome e o tipo do campo, você pode usar a opção [FIRST | APÓS nome da coluna] para especificar a localização do campo. O formato da sintaxe é o seguinte:
--添加字段同时指定新增字段的位置
ALTER TABLE <表名> ADD COLUMN <列名> <类型> <完整性约束> [FIRST | AFTER 列名];
--修改字段的类型和长度同时指定字段的位置
ALTER TABLE <表名> MODIFY COLUMN <列名> <类型> [FIRST | AFTER 列名];
--修改字段的名称、类型和长度同时指定字段的位置
ALTER TABLE <表名> CHANGE COLUMN <旧列名> <新列名> <新列类型> [FIRST | AFTER 列名];
Por exemplo:
(1) Adicione um campo comm, o tipo é varchar (500), a posição está em primeiro lugar
mysql> alter table employee add comm varchar(500) first;
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc employee;
+---------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| comm | varchar(500) | YES | | NULL | |
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| birth | datetime | YES | | NULL | |
| phone | char(20) | YES | | NULL | |
| address | varchar(200) | YES | | NULL | |
| salary | decimal(10,2) | NO | | 0.00 | |
+---------+---------------+------+-----+---------+-------+
7 rows in set (0.01 sec)
(2) Modifique o comprimento do campo comm para 1000 e coloque-o antes do campo de salário
mysql> alter table employee modify comm varchar(1000) after address;
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc employee;
+---------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| birth | datetime | YES | | NULL | |
| phone | char(20) | YES | | NULL | |
| address | varchar(200) | YES | | NULL | |
| comm | varchar(1000) | YES | | NULL | |
| salary | decimal(10,2) | NO | | 0.00 | |
+---------+---------------+------+-----+---------+-------+
7 rows in set (0.01 sec)
(3) Mude o nome do campo comm para comme e coloque-o no final da tabela
mysql> alter table employee change comm comme varchar(1000) after salary;
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc employee;
+---------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| birth | datetime | YES | | NULL | |
| phone | char(20) | YES | | NULL | |
| address | varchar(200) | YES | | NULL | |
| salary | decimal(10,2) | NO | | 0.00 | |
| comme | varchar(1000) | YES | | NULL | |
+---------+---------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
Três, modifique o nome da tabela
O formato da sintaxe é o seguinte:
ALTER TABLE <表名> RENAME [TO] <新表名>;
Exemplo: altere o nome do funcionário da tabela de dados para emp
mysql> alter table employee rename emp;
Query OK, 0 rows affected (0.10 sec)
mysql> show tables;
+-----------------+
| Tables_in_hist |
+-----------------+
| dept |
| emp |
| stu |
| student |
| user_permission |
+-----------------+
5 rows in set (0.00 sec)