2016-06-01 11 views
-2

Nach dem Ändern Spalte MySql einen Fehler melden:Wie wählen Sie Zeile durch ihre Nummer in MySql?

ALTER TABLE MyTable MODIFY mycolumn DECIMAL(9,4) 
[2016-05-31 15:43:03] [22001][1264] Data truncation: Out of range value for column 'mycolumn' at row 33934497 

Die Frage ist, wie mit der Nummer 33934497 Zeile auszuwählen?

Wichtige Hinweise

Wie ich verstehe MySql auf jede Zeile in der Tabelle eine Zeilennummer anhängen. Es muss also eine Möglichkeit geben, nach dieser Nummer zu wählen. Eine LIMIT-Klausel ist kein Fall, weil sie bereits ausgewählte Zeilen, z. Zeilen in Select, nicht in Tabelle. Auch die Bestellung während select und modify Anweisung kann unterschiedlich sein, so dass LIMIT ist keine Lösung.

AKTUALISIERT

Informationen über Min- und Max-Werte in der Tabelle:

select Max(mycolumn) from MyTable = -333240,0000

select Min(mycolumn) from MyTable = 1000000,0000

Sie 1000000 und -333240 passt zu DECIMAL(9,4)?

+0

Sie wollen Sie 'SELECT'? Dies ist eine 'ALTER TABLE' Anfrage. Alle Zeilenbezeichner, die MySQL hat, werden niemals absichtlich offengelegt. Deine Frage hier ist wirklich verwirrt. Worauf willst du hinaus? – tadman

+0

Woher wissen Sie, dass MySQL eine Zeilennummer an jede Zeile in der Tabelle anfügt? Wenn eine Zeile in der Mitte der Tabelle gelöscht wird, ändert MySQL automatisch auch die Zeilennummer, die an alle nachfolgenden Zeilen angehängt ist? Beeinflusst die Reihenfolge der Zeilen in der Tabelle die Zeilennummer, die MySQL anhängen soll? ** NEIN. ** Es passiert nicht. MySQL hängt * keine * Zeilennummer an jede Zeile in der Tabelle an. – spencer7593

+0

Ok, angenommen, es wird keine Zeilennummer angehängt, was bedeutet das dann in Zeile 33934497? Wenn es über einen Fehler mit "einer Nummer" für 1 Zeile berichtet, muss es einen Weg zu einer solchen Zeile geben, nein? – Cherry

Antwort

-1
SELECT 
... 
OFFSET 33934496 
LIMIT 1 

OFFSET - überspringt n Zeilen Hinweis, dass es Ihre ORDER verwendet BY

0

Wenn Ihre aktuelle Spaltentyp INT ist und Sie versuchen, zu DECIMAL(9,4) wechseln Ich möchte alle Datensätze auswählen, die Werte größer als 5 enthalten Ziffern (9-4), die 99999

ist also nur

SELECT * 
FROM mytable 
WHERE mycolumn>99999 
+0

Und negative Werte könnten auch außerhalb des Bereichs liegen. – spencer7593