Voglio cambiare il tipo di dati di più colonne da float a int. Qual è il modo più semplice per farlo?
Non ci sono ancora dati di cui preoccuparsi.
Voglio cambiare il tipo di dati di più colonne da float a int. Qual è il modo più semplice per farlo?
Non ci sono ancora dati di cui preoccuparsi.
Risposte:
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
ALTER TABLE tablename MODIFY columnname INTEGER;
Questo cambierà il tipo di dati di una determinata colonna
A seconda di quante colonne desideri modificare, potrebbe essere meglio generare uno script o utilizzare un qualche tipo di interfaccia grafica client mysql
Se si desidera modificare tutte le colonne di un determinato tipo in un altro tipo, è possibile generare query utilizzando una query come questa:
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>';
Ad esempio, se si desidera modificare le colonne da tinyint(4)a bit(1), eseguirlo in questo modo:
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 ottieni un output come questo:
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;
!! Non mantiene vincoli univoci, ma dovrebbe essere facilmente risolto con un altro ifparametro a concat. Lascio al lettore la possibilità di implementarlo se necessario ..
Alter TABLE `tableName` MODIFY COLUMN `ColumnName` datatype(length);
Es:
Alter TABLE `tbl_users` MODIFY COLUMN `dup` VARCHAR(120);
Si utilizza il alter table ... change ...metodo, ad esempio:
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)
Per modificare il tipo di dati di colonna ci sono cambiamenti metodo e di modifica metodo
ALTER TABLE student_info CHANGE roll_no roll_no VARCHAR(255);
ALTER TABLE student_info MODIFY roll_no VARCHAR(255);
Per modificare il nome del campo utilizzare anche il metodo di modifica
ALTER TABLE student_info CHANGE roll_no identity_no VARCHAR(255);
https://dev.mysql.com/doc/refman/8.0/en/alter-table.html
È inoltre possibile impostare un valore predefinito per la colonna semplicemente aggiungere la parola chiave DEFAULT seguita dal valore.
ALTER TABLE [table_name] MODIFY [column_name] [NEW DATA TYPE] DEFAULT [VALUE];
Questo funziona anche con MariaDB (versione testata 10.2)
ALTER TABLE) funzioneranno, anche se la colonna contiene già dei dati. Tuttavia, la conversione di una colonna float in una colonna intera farà sì che tutti i valori non interi in essa contenuti vengano arrotondati al numero intero più vicino.