JetBrains Exposed SQL框架中如何正确删除表的Column列
JetBrains Exposed SQL 框架删除表列的正确方法
问题原因说明
你之前的写法无法生效主要有两个原因:
- 手动构造的
Column<Int>实例没有和PlayerKits表的实际元数据绑定,生成的SQL语句不符合预期 dropStatement()方法仅会生成对应的删列SQL字符串,不会自动提交到数据库执行,需要手动触发执行
正确实现方式
方式1:与你新增列的用法对齐(推荐用于表结构迁移)
和你之前调用SchemaUtils.createMissingTablesAndColumns新增列的逻辑适配,无需手动写删列逻辑:
- 先把需要删除的列从
PlayerKits的表结构定义代码中移除 - 执行以下代码即可自动删除冗余列:
transaction { // 原有新增列/表的逻辑保留 SchemaUtils.createMissingTablesAndColumns(PlayerKits) // 新增这行自动删除所有数据库中存在、但代码定义里没有的列 SchemaUtils.dropExtraColumns(PlayerKits) }
方式2:直接删除指定列
如果不想改动表结构定义,仅需要删除指定列,可直接执行以下代码:
transaction { // 获取表中已存在的目标列实例 val targetColumn = PlayerKits.getColumnByName("test") // 生成删列SQL并提交到数据库执行 exec(targetColumn.dropStatement().first()) }
注意事项
使用dropExtraColumns前请确认数据库中没有需要保留的、未在代码里定义的列,避免误删数据。
内容的提问来源于stack exchange,提问作者GilbertoDamim
相关产品推荐
相关产品推荐

