Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SERIAL-ähnliche INT-Spalte

Beim Informix-DBMS ändert sich die Spalte SERIAL nach dem Einfügen nicht; Tatsächlich können Sie einen SERIAL-Wert überhaupt nicht aktualisieren. Sie können einen neuen Wert entweder mit 0 als Wert einfügen – in diesem Fall wird ein neuer Wert generiert – oder Sie können einen anderen Wert einfügen. Wenn der andere Wert bereits vorhanden ist und es eine eindeutige Einschränkung gibt, schlägt dies fehl; Wenn es nicht vorhanden ist oder wenn es keine eindeutige Einschränkung für die serielle Spalte gibt, wird es erfolgreich sein. Wenn der eingefügte Wert größer ist als der größte zuvor eingefügte Wert, dann wird die nächste einzufügende Zahl wieder um eins größer sein. Wenn die eingefügte Zahl kleiner oder negativ ist, hat dies keine Auswirkung auf die nächste Zahl.

Sie könnten also Ihr Update durchführen, ohne den Wert zu ändern - kein Problem. Wenn Sie die Nummer ändern müssen, müssen Sie löschen und einfügen (oder einfügen und löschen), wobei die Einfügung eine Null enthält. Wenn Sie Konsistenz bevorzugen und Transaktionen verwenden, können Sie die Zeile mit derselben Nummer oder mit einer Null jederzeit löschen und dann (erneut) einfügen, um eine neue Nummer auszulösen. Dies setzt voraus, dass Sie eine Programmiersprache haben, auf der SQL ausgeführt wird. Ich glaube nicht, dass Sie ISQL und Perform optimieren können, um dies automatisch zu tun.

Daher sehe ich das Problem derzeit nicht bei Informix.

Mit der entsprechenden Version von IDS (alles, was unterstützt wird) können Sie mit SEQUENCE auch die eingefügten Werte steuern. Dies basiert auf der Oracle-Syntax und dem Konzept; DB2 unterstützt dies ebenfalls. Andere DBMS haben andere äquivalente (aber andere) Mechanismen zur Handhabung der automatisch generierten Nummern.