[MySQL] Default-Wert aus Tabelle entfernen

Konfiguration:
PHP-Interpreter: php4.2.3
Betriebssystem: Windows 98
Lokaler Webserver: OmniHTTPd209
Datenbank: MySQL3.23.52

Problem:
In der Spalte „m_nummer“ steht der Default-Wert „0“, wie ich aus
EXPLAIN person;
sehen kann. Das führt dazu, dass der erste eingefügte Datensatz diesen Wert hat und der zweite Datensatz nicht eingefügt werden kann (ist ja auch PRIMARY KEY).
Löschen der Default-Einstellung mit
ALTER TABLE person ALTER m_nummer DROP DEFAULT;
bringt keine Veränderung.

Gibt es da „geheime Zusammenhänge“?

Datenbank-Tabelle:
Meine Datenbank-Tabelle „person“ wurde so definiert:

CREATE TABLE person (
vorname CHAR(40) NOT NULL,
zusatz CHAR(10),
nachname CHAR(40) NOT NULL,
m_nummer INTEGER NOT NULL PRIMARY KEY);

Danke fürs Nachdenken!

Hallo!

Da du m_nummer anscheinend nicht explizit angibst und sie
intern auch nicht automatisch hochgezaehlt wird, ist klar,
dass er immer den default wert nimmt.
Dann ist egal welchen default-wert du hast.

Mit auto_increment koenntest du z.B. das Problem loesen,
da dann intern hochgezaehlt und m_nummer+1 genommen wird.

Deine Tabelle muesste dann etwa so aussehen:

...
m\_nummer INTEGER NOT NULL AUTO\_INCREMENT,

constraint primary key (m\_nummer)
...

(siehe dazu http://www.mysql.com/documentation/index.html)

Gruss
Patrick

Hallo Patrick!

Deine Ausführungen sind sicher richtig, aber sie helfen nicht.

Ich möchte in die Spalte m_nummer eine bereits vorhandene Mitgliedsnummer eingeben. Die lässt sich nicht automatisch hochzählen, da vielleicht nicht alle Zahlen belegt sind und ich ja auch die Eingabe nicht der Reihe nach mache.

Weitere Ideen?

Martin.

Gibt es da „geheime Zusammenhänge“?

Welche geheimen Zusammenhänge soll es denn da geben?

CREATE TABLE person (
vorname CHAR(40) NOT NULL,
zusatz CHAR(10),
nachname CHAR(40) NOT NULL,
m_nummer INTEGER NOT NULL PRIMARY KEY);

Damit gibst du ja explizit an, dass deine Spalte m_nummer ein Primär-Schlüssel ist.
Es kommt also auf deine Inserts an, wie die DB reagiert.
Ein einfaches

INSERT INTO person SET vorname="Hans", nachname="Dampf", m\_nummer=12;

funktioniert einwandfrei.
Ein weiteres

INSERT INTO person SET vorname="Hans", nachname="Guckindieluft", m\_nummer=123;

funktioniert auch.

Lässt du hingegen das Setzen von m_nummer weg, kann logischerweise kein 2. Datensatz eingefügt werden, wenn schon ein Datensatz als Primärschlüssel die 0 verwendet.

Auszug aus der Doku:
Wenn kein DEFAULT-Wert für eine Spalte angegeben wird, weist MySQL automatisch einen zu. Wenn die Spalte NULL als Wert aufnehmen darf, ist der Vorgabewert NULL. Wenn die Spalte als NOT NULL deklariert ist, hängt der Vorgabewert vom Spaltentyp ab:
Bei numerischen Typen ausser denen, die mit dem AUTO_INCREMENT-Attribut deklariert wurden, ist der Vorgabewert 0. Bei einer AUTO_INCREMENT-Spalte ist der Vorgabewert der nächste Wert in der Folge.

Ich verstehe also ehrlich gesagt dein Problem nicht.
Was genau willst du erreichen?

Ciao, Bill

Hallo, Bill!

Ich hatte im Feld m_nummer bislang immer eine Zeichenkette eintragen wollen. Die Datenbank hat mir den Fehler nicht angezeigt und einfach nichts bzw. den Default-Wert eingetragen. Daher auch der sich automatisch wiederholende Default-Wert.

Deine SQL-Anweisung zum Eintragen hat mich auf die Idee gebracht, die Anführungszeichen doch mal wegzulassen.

Danke.