更改表列数据类型

时间:2013-08-29 20:04:07

标签: mysql sql

我希望在不改变名称的情况下,将列的类型从TIME数据类型更改为SMALL int,其秒数为秒。

我有一个select语句进行此更改,但我想知道是否有办法直接更改数据类型而不创建临时字段。

select ROUND(convert(begin_time, UNSIGNED)/100) % 100 +
       60 * ROUND(convert(begin_time, UNSIGNED)/10000) from time_window;

1 个答案:

答案 0 :(得分:1)

我认为你不能像这样一举改变架构和数据。这并不是说你不能原子地 - 你可以根据你的存储引擎使用一个事务。但是你将不得不分步进行。

1)更改旧列的名称。

ALTER TABLE time_window CHANGE COLUMN begin_time begin_time_old TIME;

2)使用列的旧名称添加类型为SMALL的新列以存储新数据。

ALTER TABLE time_window ADD COLUMN begin_time SMALL;

3)使用您的转化插入数据。

UPDATE time_window 
SET begin_time = ROUND(convert(begin_time_old, UNSIGNED)/100) % 100 +
60 * ROUND(convert(begin_time_old, UNSIGNED)/10000)

4)放下旧栏。

ALTER TABLE time_window DROP COLUMN begin_time_old