如果我有一个包含列的表:a,b,c和更高版本我执行ALTER TABLE命令添加新列" d",是否可以在a和b之间添加它,例如,而不是最后?
我听说列的位置会影响性能。
答案 0 :(得分:8)
使用SQLite中的ALTER TABLE语句在两个现有列之间添加列是不可能的。这works as designed。
新列始终附加到现有列表的末尾 列。
据我所知,MySQL是唯一允许你determine the placement of new columns的SQL(ish)dbms。
要在表格行中的特定位置添加列,请使用FIRST 或者在col_name之后。默认是最后添加列。你也可以 在CHANGE或MODIFY操作中使用FIRST和AFTER重新排序列 在一张桌子里。
但这不是我经常使用的功能,所以“据我所知”并不是很远。
答案 1 :(得分:1)
对于每个sql平台,我已经看到了唯一的方法是删除表并重新创建它。
然而,我怀疑专栏的位置是否会影响表现......你会采用什么方式做什么,你认为它会产生什么影响呢?
我还要注意,放下桌子并重新创建它往往不是一个沉重的举动。在所有主要平台上进行表的备份和恢复该表都很容易,因此编写备份 - 删除 - 创建 - 还原脚本对于有能力的DBA来说是一件容易的事。
事实上,当用户提出要求时,我经常这样做 - 但我总觉得它有点傻。给出的最常见原因是,当按特定顺序创建列时,选择工具的行为会更好。 (这也是@ Jarad的原因如下)所以这对工具制造商来说是一个很好的教训,让你的工具能够重新排序列(并在运行之间记住它) - 然后每个人都很高兴。
答案 2 :(得分:0)
我使用DB.compileStatement:
sql = DB.compileStatement("INSERT INTO tableX VALUES (?,?,?);
sql.bindString(1,"value for column 1");
sql.bindString(2,"value for column 2");
sql.bindString(3,"value for column 3");
sql.executeUpdateDelete();
如果列的顺序不正确,那么会有很大的不同。 不幸的是,使用ALTER TABLE无法在特定位置添加列,至少在SQLite中是这样。 (MySQL是可能的)。 Workaroud正在重新创建表..(以及备份和恢复数据)