INSERT auf eine VIEW
am 17.02.2006 21:28:57 von Holger Wesser
Hallo,
ich habe eine Tabelle, die wie folgt definiert wurde:
CREATE TABLE `test`.`hersteller` (
`hrs_id` int(11) NOT NULL,
`hrs_vorname` varchar(30) default NULL,
`hrs_nachname` varchar(30) default NULL,
`hrs_firma` varchar(50) default NULL,
PRIMARY KEY (`hrs_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
Danach habe ich via INSERT ein paar Testdatensätze angelegt und zum Spaß
eine VIEW kreiert:
CREATE VIEW hrs_benutzersicht AS (
SELECT hrs_vorname,hrs_nachname,hrs_firma from hersteller
)
Ein SELECT * FROM hrs_benutzersicht brachte auch das gewünschte Ergebnis.
Wenn ich jedoch ein:
INSERT INTO hrs_benutzersicht VALUES('Max','Mustermann','Test GmbH')
ausführe, erhalte ich die Meldung:
"Field of view 'test.hrs_benutzersicht' underlying table doesn't have a
default value"
Interessanterweise fügt MySQL den Datensatz ein und vergibt selbständig
den Wert "0" für hrs_id. Hätte ich eher nicht erwartet, sondern dass
MySQL das INSERT-Statement ablehnt.
Habe ich da jetzt einen Denkfehler oder ist das ein Fehler?
Grüße
Holger
Re: INSERT auf eine VIEW
am 18.02.2006 12:33:03 von Axel Schwenke
Holger Wesser wrote:
[ INSERT in VIEW ]
> Wenn ich jedoch ein:
>
> INSERT INTO hrs_benutzersicht VALUES('Max','Mustermann','Test GmbH')
>
> ausführe, erhalte ich die Meldung:
>
> "Field of view 'test.hrs_benutzersicht' underlying table doesn't have a
> default value"
Genauer gesagt erhältst du eine *Warning* mit diesem Inhalt.
> Interessanterweise fügt MySQL den Datensatz ein und vergibt selbständig
> den Wert "0" für hrs_id.
Das tut MySQL im "relaxed mode" (dem Default). Es wird der implizite
Default-Wert für den Spaltentyp verwendet (für INT ist das 0).
> Hätte ich eher nicht erwartet, sondern dass
> MySQL das INSERT-Statement ablehnt.
Wenn du das möchtest, mußt du den Server in den "strict mode" schalten.
Dann wird aus o.g. Warning ein Error.
http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html
XL
Re: INSERT auf eine VIEW
am 18.02.2006 14:54:03 von Holger Wesser
Man(n) lernt ja nie aus.
Vielen Dank für den Hinweis!
Holger
Axel Schwenke schrieb:
> Holger Wesser wrote:
>
> [ INSERT in VIEW ]
>
>> Wenn ich jedoch ein:
>>
>> INSERT INTO hrs_benutzersicht VALUES('Max','Mustermann','Test GmbH')
>>
>> ausführe, erhalte ich die Meldung:
>>
>> "Field of view 'test.hrs_benutzersicht' underlying table doesn't have a
>> default value"
>
> Genauer gesagt erhältst du eine *Warning* mit diesem Inhalt.
>
>> Interessanterweise fügt MySQL den Datensatz ein und vergibt selbständig
>> den Wert "0" für hrs_id.
>
> Das tut MySQL im "relaxed mode" (dem Default). Es wird der implizite
> Default-Wert für den Spaltentyp verwendet (für INT ist das 0).
>
>> Hätte ich eher nicht erwartet, sondern dass
>> MySQL das INSERT-Statement ablehnt.
>
> Wenn du das möchtest, mußt du den Server in den "strict mode" schalten.
> Dann wird aus o.g. Warning ein Error.
>
> http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html
>
>
> XL