在我的名为“ stocktakings”的表中,有一个来自ENUM类型的列,称为“ status”。 “状态”具有以下字段:
我想将值更改为:
我尝试了以下命令:
ALTER TABLE `stocktakings` MODIFY `stocktakings.status`
`stocktakings.status` ENUM(
`ready_for_relocation`,
`search_shelf_location`,
`stock_update_succeeded`,
`stock_update_failed`,
`updating_stock`
);
没用。有什么想法吗?
答案 0 :(得分:5)
您不能仅从Column定义中删除Old Enum值。否则,将导致无法挽回的数据丢失(所有字段都可能变为空白)。这将是一个多步骤的过程:
向现有列定义添加新的枚举值。另外,枚举值用单引号引起来(而不是反引号)
public async Task<Boat> GetByIdAsync(string id)
=> await _boatContext.Boats.Where(x => x.id == id).FirstOrDefaultAsync();
[Fact]
public async Task GetByIdAsync_WhenCalled_ReturnsItem()
{
// Arrange
var models = new[] { new Boat { id = "p1" } };
var dbContextMock = new DbContextMock<BoatContext>();
dbContextMock.CreateDbQueryMock(x => x.Boats, models);
var service = new Properties(dbContextMock.Object);
// Act
var okResult = await service.GetByIdAsync("p1");
// Assert
Assert.IsType<Boat>(okResult.Result);
}
现在,运行ALTER TABLE `stocktakings` MODIFY `stocktakings`.`status` ENUM(
'Pending',
'Processing',
'Failed',
'Succeeded',
'ready_for_relocation',
'search_shelf_location',
'stock_update_succeeded',
'stock_update_failed',
'updating_stock'
);
查询以相应地更新所有枚举值:
Update
现在,UPDATE `stocktakings`
SET status = CASE status
WHEN 'Pending' THEN 'ready_for_relocation'
WHEN 'Processing' THEN 'search_shelf_location'
WHEN 'Failed' THEN 'stock_update_failed'
WHEN 'Succeeded' THEN 'stock_update_succeeded'
END
并删除旧的枚举值。
Alter Table