Я хочу изменить тип данных нескольких столбцов с float на int. Какой самый простой способ сделать это?
Пока нет данных для беспокойства.
Я хочу изменить тип данных нескольких столбцов с float на int. Какой самый простой способ сделать это?
Пока нет данных для беспокойства.
Ответы:
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
ALTER TABLE tablename MODIFY columnname INTEGER;
Это изменит тип данных данного столбца
В зависимости от того, сколько столбцов вы хотите изменить, лучше всего сгенерировать скрипт или использовать какой-нибудь клиентский графический интерфейс mysql.
Если вы хотите изменить все столбцы определенного типа на другой тип, вы можете сгенерировать запросы, используя такой запрос:
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>';
Например, если вы хотите изменить столбцы с tinyint(4)
на bit(1)
, запустите их так:
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)';
и получить вывод, как это:
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;
!! Не сохраняет уникальных ограничений, но должен быть легко исправлен с помощью другого if
-параметра concat
. Я оставлю это на усмотрение читателя, чтобы реализовать это при необходимости ..
Alter TABLE `tableName` MODIFY COLUMN `ColumnName` datatype(length);
Пример:
Alter TABLE `tbl_users` MODIFY COLUMN `dup` VARCHAR(120);
Вы используете alter table ... change ...
метод, например:
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)
Для изменения типа данных столбца есть метод изменения и изменить метод
ALTER TABLE student_info CHANGE roll_no roll_no VARCHAR(255);
ALTER TABLE student_info MODIFY roll_no VARCHAR(255);
Для изменения имени поля также используйте метод change
ALTER TABLE student_info CHANGE roll_no identity_no VARCHAR(255);
https://dev.mysql.com/doc/refman/8.0/en/alter-table.html
Вы также можете установить значение по умолчанию для столбца, просто добавив ключевое слово DEFAULT, за которым следует значение.
ALTER TABLE [table_name] MODIFY [column_name] [NEW DATA TYPE] DEFAULT [VALUE];
Это также работает для MariaDB (протестированная версия 10.2)
ALTER TABLE
), на самом деле, будут работать, даже если столбец уже содержит данные. Однако преобразование плавающего столбца в целочисленный столбец приведет к тому, что любые нецелые значения в нем будут округлены до ближайшего целого числа.