mysql Ver 15.1 Distrib 10.2.6-MariaDB
我在O'Reilly的书“学习MySQL和MariaDB”中遇到了执行UPDATE语句的问题。代码在第5章 - 第218页&我正在阅读的电子书中有219本。
表“birds_new”中的“危险”字段是bit(1)类型。目的是将类型更改为ENUM。
alter table birds_new
modify column endangered
enum ('Extinct', 'Extinct in Wild', 'Threatened - Critically Endangered',
'Threatened - Endangered', 'Threatened - Vulnerable',
'Lower Risk - Conservation Dependent', 'Lower Risk - Near Threatened',
'Lower Risk - Least Concern')
after family_id;
失败了: ERROR 1265(01000):数据在第1行截断“危险”列
数据类型仍为位(1)。
ALTER声明有什么问题?
使用ALTER语句是否根本无法做到这一点?
我用两个单独的ALTER语句进行了更改:DROP COLUMN,然后是ADD COLUMN。
答案 0 :(得分:0)
BIT(1)
和ENUM
有些不同。我建议你分多步完成。但首先,我建议您ENUM
为NOT NULL
,并且有unknown
(或其他类似内容)的第一个选项。你不也需要'不濒危'吗?
ALTER TABLE birds_new
CHANGE COLUMN endangered old_end BIT(1) ...,
ADD COLUMN endangered ENUM
('unknown, 'Extinct', ..., 'Not endangered') NOT NULL;
UPDATE birds_new
SET endangered = IF(old_end, 'unknown', 'Not endangered')
ALTER TABLE birds_new
DROP COLUMN old_end;
然后,您需要使用一些代码将'unknown'
转换为“濒危”的特定级别。