INSERT auf eine VIEW

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