Wo ist der Fehler?

Streethawk68

Aktiver Benutzer
Beiträge
38
Code:
CREATE TABLE 'fish' ('ID' int(11) NOT NULL auto_increment,
'NAME' varchar(30) NOT NULL default '',
'PRICE' decimal(5,2) NOT NULL default '0.00',
PRIMARY KEY ('ID')
) ENGINE=MyISAM AUTO_INCREMENT=27 DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;
 
Werbung:
Ich glaube, nachdem man die Spalte not null setzt, aktzeptiert er auch den mathemtischen Wert 0, in deinem Fall 0.00 nicht, sprich du musst mindestens 0.0000000000000.....1 verwenden, beziehungsweise einen möglichst geringen Wert über 0.

Bin unter Umständen noch unerfahren, ich glaube aber, das dem so ist, lasse mich gerne eines besseren lehren ;)
 
Um das für unseren @Kampfgummibaerlie noch mal zu erläutern: 0 hat nichts mit NULL zu tun. 0 ist die Information, daß ein Wert 0 ist. NULL ist die völlige Abwesenheit einer Information.

Code:
test=# create table null_or_0 (id serial primary key, val int not null);
CREATE TABLE
test=*# insert into null_or_0 (val) values (0);
INSERT 0 1
test=*# insert into null_or_0 (val) values (-1);
INSERT 0 1
test=*# insert into null_or_0 (val) values (+1);
INSERT 0 1
test=*# insert into null_or_0 (val) values (NULL);
FEHLER:  NULL-Wert in Spalte »val« verletzt Not-Null-Constraint
DETAIL:  Fehlgeschlagene Zeile enthält (4, null).
test=*#

Ein NOT NULL sorgt also dafür, daß in der Spalte eine Information stehen MUß, diese kann aber auch 0 sein. Und wenn eine Information vollständig fehlt, kann mit dieser auch nicht weiter gearbeitet werden. Während 0 + 1 = 1 ist, bleibt NULL + 1 eben NULL.

Code:
test=*# select 0 + 1 as demo;
 demo
------
  1
(1 row)

test=*# select NULL + 1 as demo;
 demo
------
   
(1 row)

test=*#


So, mal wieder den Erklärbär gemacht...
 
Statische Analyse:

4 Fehler wurden während der Analyse gefunden.

  1. Ein Symbolname wurde erwartet! (near "'ID'" at position 23)
  2. Mindestens eine Felddefinition wurde erwartet. (near "'ID'" at position 23)
  3. Unerwarteter Statement-Anfang. (near "11" at position 32)
  4. Unerkannte Statement-Typ. (near "NOT NULL" at position 36)
SQL-Befehl:

CREATE TABLE 'fish' ( 'ID' int(11) NOT NULL auto_increment, 'NAME' varchar(30) NOT NULL default '', 'PRICE' decimal(5,2) NOT NULL default '0.00', PRIMARY KEY ('ID') ) ENGINE=MyISAM AUTO_INCREMENT=27 DEFAULT CHARSET=latin1

MySQL meldet:

#1064 - Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei ''fish' (
'ID' int(11) NOT NULL auto_increment,
'NAME' varchar(30) NOT NULL def' in Zeile 1
 
Ja. Wie es da steht: schaue im Handbuch nach der exakten Syntax. Das dürften insbesondere die verwendeten ' oder ' oder ` oder " etc. sein, da ist MySQL pingelig. Hint: man kann den Müll auch weglassen. Aber das ist möglicherweise zu einfach.

PS.: MyISAM ist eine Technologie des letzten Jahrtausends.

Code:
test=*# create table fish (id serial primary key, name varchar(30) not null, price numeric(5,2) not null default 0.00);
CREATE TABLE
test=*# \d fish
  Table "public.fish"
 Column |  Type  | Collation | Nullable |  Default   
--------+-----------------------+-----------+----------+----------------------------------
 id  | integer  |  | not null | nextval('fish_id_seq'::regclass)
 name  | character varying(30) |  | not null |
 price  | numeric(5,2)  |  | not null | 0.00
Indexes:
  "fish_pkey" PRIMARY KEY, btree (id)

test=*#

Aber das ist kein MySQL.
 
lg.php
Akretschmer, so, ich habe sie alle durch: " " / ´ ´ / ` ´ / ' ' / ` `
Nichts bringt was.
 
Code:
CREATE TABLE fish (
ID int(11) NOT NULL auto_increment,
NAME varchar(30) NOT NULL default,
PRICE decimal(5,2) NOT NULL default 0.00,
PRIMARY KEY (ID)
) ENGINE=MyISAM AUTO_INCREMENT=27 DEFAULT CHARSET=latin1;

Statische Analyse:

4 Fehler wurden während der Analyse gefunden.

  1. Ein Komma oder eine schließende Klammer wird erwartet. (near "decimal" at position 100)
  2. Unerwarteter Statement-Anfang. (near "5" at position 108)
  3. Unerwarteter Statement-Anfang. (near "2" at position 110)
  4. Unerkannte Statement-Typ. (near "NOT NULL" at position 113)
SQL-Befehl:

CREATE TABLE fish ( ID int(11) NOT NULL auto_increment, NAME varchar(30) NOT NULL default, PRICE decimal(5,2) NOT NULL default 0.00, PRIMARY KEY (ID) ) ENGINE=MyISAM AUTO_INCREMENT=27 DEFAULT CHARSET=latin1

MySQL meldet:

#1064 - Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei '
PRICE decimal(5,2) NOT NULL default 0.00,
PRIMARY KEY (ID)
) ENGINE=MyISAM A' in Zeile 3

Schade, dass deine 'Lösung' unzumutbar ist. ;-)
 
Werbung:
Die Definition der Spalte NAME ist unvollständig. Wenn Du willst, daß da ein Default ist, muß Du ihn auch nennen. Erraten kann MySQL das nicht. (Oft errät MySQL ja das Ergebniss, oft auch falsch, aber das ist eine andere Baustelle...)


Andreas
 
Zurück
Oben