Michael Schröpl: welche funktion für primärschlüssel

Beitrag lesen

Hi Klaus,

Das ID-Feld mußt Du schon weglassen, allerdings
müßtest Du dann das Statement um die Feldnamen
erweitern [1]:
INSERT INTO t_files (name,size) VALUES($name,$size);
(Ohne jetzt die Feldnamen wirklich zu kennen)

das ist einer der Gründe, weshalb ich so gegen AutoInkrement-Werte wettere: Sie machen die intuitive Mengen-Eigenschaft von Tabellen kaputt.

[1] wobei ich es vorziehe, immer alle Feldnamen
ausdrücklich anzugeben. Das erleichtert einerseits
die Fehlersuche, andererseits kann das bei
Strukturänderungen auch von Vorteil sein.

Bei SQL-Statements im Quelltext irgendwelcher Anwendungen magst Du recht haben.

Aber ich erlebe oft genug, daß ich mal eben schnell einen Teil einer Tabelle "klonen" will, so in der Art

CREATE TEMPORARY TABLE X AS
SELECT * FROM <tabellenname>
  WHERE <bedingung>;

UPDATE X
   SET <feldname> = <wert>;

INSERT INTO <tabellenname>
SELECT * FROM X;

Wobei <feldname> dann ggf. der Primärschlüssel (oder ein Teil desselben) ist.

Wenn ich mit Mengen arbeiten darf, dann sind solche Operationen ganz prima möglich. Habe ich aber auch nur eine einzige AutoInkrement-Spalte, dann kann ich so etwas vergessen.

Und ich muß dann im Quelltext meiner Anwendung auch tatsächlich die komplette Liste der Spaltennamen einbrennen (und diese bei jeder Änderung des Tabellenformats mit anpassen), die mich an dieser Stelle doch gar nicht interessieren sollte ...

Viele Grüße
      Michael
(der "seinen" Operateuren einen Benutzerkennung-Kloner mit CGI-GUI geschrieben hat, damit diese die Probleme von Kunden reproduzieren können, ohne sich mit deren Benutzerkennung und Passwort anmelden zu müssen - denn erstens kennen die Operateure das nur verschlüsselt gespeicherte Passwort des Kunden nicht und zweitens ist mehrfaches paralleles Login verboten - aber leider keinen Einfluß auf die Tabellenformate des verwendeten Fremdprodukts hatte und sich über die AutoInkrement-Spalte aus den beschriebenen Gründen mächtig geärgert hat)