Quero alterar o tipo de dados de várias colunas de float para int. Qual é a maneira mais simples de fazer isso?
Ainda não há dados para se preocupar.
Quero alterar o tipo de dados de várias colunas de float para int. Qual é a maneira mais simples de fazer isso?
Ainda não há dados para se preocupar.
Respostas:
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
ALTER TABLE tablename MODIFY columnname INTEGER;
Isso mudará o tipo de dados da coluna especificada
Dependendo de quantas colunas você deseja modificar, pode ser melhor gerar um script ou usar algum tipo de GUI do cliente mysql
Se você deseja alterar todas as colunas de um determinado tipo para outro, pode gerar consultas usando uma consulta como esta:
select distinct concat('alter table ',
table_name,
' modify ',
column_name,
' <new datatype> ',
if(is_nullable = 'NO', ' NOT ', ''),
' NULL;')
from information_schema.columns
where table_schema = '<your database>'
and column_type = '<old datatype>';
Por exemplo, se você deseja alterar as colunas de tinyint(4)
para bit(1)
, execute-o assim:
select distinct concat('alter table ',
table_name,
' modify ',
column_name,
' bit(1) ',
if(is_nullable = 'NO', ' NOT ', ''),
' NULL;')
from information_schema.columns
where table_schema = 'MyDatabase'
and column_type = 'tinyint(4)';
e obtenha uma saída como esta:
alter table table1 modify finished bit(1) NOT NULL;
alter table table2 modify canItBeTrue bit(1) NOT NULL;
alter table table3 modify canBeNull bit(1) NULL;
!! Não mantém restrições exclusivas, mas deve ser facilmente corrigido com outro if
parâmetro para concat
. Vou deixar para o leitor implementar isso, se necessário ..
Alter TABLE `tableName` MODIFY COLUMN `ColumnName` datatype(length);
Ex:
Alter TABLE `tbl_users` MODIFY COLUMN `dup` VARCHAR(120);
Você usa o alter table ... change ...
método, por exemplo:
mysql> create table yar (id int);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into yar values(5);
Query OK, 1 row affected (0.01 sec)
mysql> alter table yar change id id varchar(255);
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> desc yar;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
1 row in set (0.00 sec)
Para alterar o tipo de dados da coluna, existem métodos de alteração e método de modificação
ALTER TABLE student_info CHANGE roll_no roll_no VARCHAR(255);
ALTER TABLE student_info MODIFY roll_no VARCHAR(255);
Para alterar o nome do campo, use também o método change
ALTER TABLE student_info CHANGE roll_no identity_no VARCHAR(255);
https://dev.mysql.com/doc/refman/8.0/en/alter-table.html
Você também pode definir um valor padrão para a coluna, basta adicionar a palavra-chave DEFAULT seguida pelo valor.
ALTER TABLE [table_name] MODIFY [column_name] [NEW DATA TYPE] DEFAULT [VALUE];
Isso também está funcionando para MariaDB (versão testada 10.2)
ALTER TABLE
) funcionarão mesmo se a coluna já contiver dados. No entanto, converter uma coluna flutuante em uma coluna inteira fará com que quaisquer valores não inteiros nela sejam arredondados para o número inteiro mais próximo.