我正在测试删除主键列ID的迁移(我想使用外键作为主键)。当我运行并恢复迁移时,我看到我的表的状态是相同的,除了id列现在是最后一个。
它会以任何方式更改我的数据库的行为吗?我是否应该在迁移还原代码中恢复列顺序?
答案 0 :(得分:1)
从理论上讲,一切都应该没问题,但总会出现代码失败的情况。
例如:
a)blind insert
:
SELECT *
FROM tab
ORDER BY 1;
盲插件是指INSERT查询未指定哪些列接收插入的数据。
为什么这是件坏事?
因为数据库架构可能会更改。列可以移动,重命名, 添加或删除。当他们是,至少三件事之一 发生:
查询失败。这是最好的情况。有人从目标表中删除了一列,现在没有足够的列 插入进入,或有人更改数据类型和插入 类型不兼容,等等。但至少你的数据没有得到 已损坏,你甚至可能知道因为一个问题而存在 错误信息。
查询继续有效,没有错。这是一个中等最坏情况。你的数据不是腐败的,而是怪物 仍然躲在床下。
- 查询继续有效,但现在某些数据正在某个不属于的地方插入。您的数据已损坏。
醇>
i++;