*Markus: (MySQL) Obwohl Feld NOT NULL, einfügen möglich?

Beitrag lesen

Hallo,

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| kdnr         | int(11)      | NO   | PRI | NULL    | auto_increment |

Ein Feld, das keine NULL-Werte erlaubt kann kein NULL als Default-Wert haben. Diese Tabelle schwindelt.

Ich verstehe nicht, wie man Tabellen sonst anlegen soll/kann. Bei create table habe ich mal alle NULL weggenommen, aber dennoch wird so eine gleichwertige Tabelle erzeugt:

  
CREATE TABLE Kunde  
  
      (kdnr                  INTEGER NOT NULL AUTO_INCREMENT,  
  
       b_id                  INTEGER NOT NULL,  
  
       status_id             INTEGER NOT NULL,  
  
       plz                   INTEGER NOT NULL,  
  
       kundenname            VARCHAR(100) NOT NULL,  
  
       betriebsname          VARCHAR(100),  
  
       k_strasse             VARCHAR(100) NOT NULL,  
  
       k_telefon             VARCHAR(20),  
  
       k_email               VARCHAR(70),  
  
       k_fax                 VARCHAR(30),  
  
       k_website             VARCHAR(200),  
       k_checksum	     VARCHAR(255) NOT NULL,  
  
       PRIMARY KEY (kdnr)  
  
) ENGINE=INNODB;  

...einen Datensatz einfüge, indem k_checksum absichtlich nicht vorkommt, kann dieser Datensatz trotzdem gespeichert werden? Wieso?

Der Defaultwert der tatsächlich aktiv ist, wird eingefügt.

Da der Defaultwert ja NULL ist, wie kann er dann in ein Feld, das NOT NULL ist, eingefügt werden?

Query OK, 1 row affected, 1 warning (0.00 sec)
Der Datensatz wird also eingefügt. Darüberhinaus frage ich mich, wo ich diese "warning" sehen kann?

SHOW WARNINGS wäre eine Möglichkeit.

Ok, der Sinn der Meldung mit der o.g. create-table-Syntax ist mir auch nicht wirklich klar:

+---------+------+-------------------------------------------------+
| Level   | Code | Message                                         |
+---------+------+-------------------------------------------------+
| Warning | 1364 | Field 'k_checksum' doesn't have a default value |
+---------+------+-------------------------------------------------+

Somit ist die Verwirrung komplett. Ich habe angeblich keine Default-Values, diese werden jedoch bei "show fields" angezeigt und Datensätze darf ich darüberhinaus auch noch einfügen. Muss ich das jetzt verstehen? :)

Markus