Suponha que eu tenha uma tabela contendo os seguintes dados:
Name | Things
-------------
Foo | 5
Bar | 3
Baz | 8
Se eu quiser inserir uma linha, para que o estado final da tabela seja:
Name | Things
-------------
Foo | 5
Qux | 6
Bar | 3
Baz | 8
Isso é possível?
Entendo que normalmente não dependemos da ordem das linhas em uma tabela, mas herdei um código que faz exatamente isso. Se eu puder inserir em um local, posso evitar uma refatoração significativa.
O código que você herdou está quebrado - e sempre esteve quebrado. Essa refatoração que você gostaria de evitar precisa ser feita. Não há alternativa a um explícito
order by
para garantir a ordem de classificação de um conjunto de resultados e nunca houve .Quem sabe se o código que você herdou sempre retornou linhas na ordem que o desenvolvedor original 'esperava' ou não.
Não, não é possível teoricamente, pois, como você diz, a ordem em que as linhas são retornadas é arbitrária sem um ORDER BY. Não há garantia de que o pedido será estável ao longo do tempo.
Não, geralmente não é possível na prática. No entanto, pode haver algumas soluções alternativas que você pode empregar.
Você pode renomear a tabela para
<<TABLENAME>>_OLD
, criar uma exibição em cima da tabela chamada<<TABLENAME>>
e incorporar um ORDER BY nessa exibição que retorna os dados na ordem desejada.Se a opção de visualização não funcionar (e pode ser problemático se você tiver muitos dados) e você realmente precisar de um hack, você pode criar uma nova tabela, inserir FOO (e todos outras linhas que estão antes da linha que você deseja adicionar), insira a nova linha e, em seguida, insira as linhas restantes. Em seguida, elimine a tabela antiga e renomeie a nova tabela para usar o nome da tabela antiga. Sem garantias, é claro, mas isso geralmente faria com que um ORDER BY-less
SELECT
retornasse os dados na ordem desejada. Terrivelmente feio se você tiver uma quantidade razoável de dados na tabela.Depende se, em seus dados reais, existe algum tipo de ordenação. Se houver, você pode conseguir isso usando uma tabela organizada por índice . Mas, como outros já disseram, os bancos de dados não são projetados para garantir implicitamente uma ordenação.