I have to migrate an old Mysql Db to a new mysql8 server.
I have an update statement in my code, which generates this sql, which throws an error:
UPDATE artikel
SET personalnummer = 'p325111',
empfangendes_haus = '612',
status = '10',
freigegeben = 'nein',
aenderung_durch = 'intranet',
kommentar = 'serdfghfdf',
seriennummer = 'y5e4rzthfrzu',
lagerstellplatz = 'jhgfds',
zustand = 0,
zeitpunkt = '2023-07-24 18:41:45'
WHERE barcode = '59655420705527500276'
The update statement does only update a selection of my 27 fields in the table. The auto increment field, which is also the primary key is a bigint field called "inkrement".
If I execute the statement I get this message from the db server:
[HY000][1364] Field 'inkrement' doesn't have a default value
Yeah no surprise there, since it is the auto increment field it has no default value.
If I export the structure of the table it looks like this (sorry to copy so much, but somewhere might be the problem in this, may it be indexes or triggers or...) :
create table if not exists mimo2.artikel
(
barcode varchar(50) default '' not null,
inkrement bigint auto_increment primary key,
lieferscheinnr int unsigned default '0' not null,
rechnungsnr varchar(16) default '' not null,
lieferantennr int(6) unsigned zerofill default 0 not null,
artikelnr varchar(8) default '' not null,
laufende_nr int unsigned default '0' not null,
pruefziffer tinyint unsigned default '0' not null,
ausgehendes_haus int unsigned default '0' not null,
empfangendes_haus int unsigned default '0' not null,
datum_aenderung_empfangendes_haus datetime null,
lagerort enum ('nebenflaeche', 'verkauf', 'undefiniert') default 'undefiniert' not null,
freigegeben enum ('ja', 'nein') default 'nein' not null,
status int unsigned default '3' not null,
datum_statusaenderung datetime null,
preis double(20, 2) default 0.00 not null,
waehrung varchar(255) default '' not null,
personalnummer varchar(7) default '' not null,
zeitpunkt timestamp default CURRENT_TIMESTAMP not null,
kommentar longtext not null,
bildpfad varchar(255) null,
aenderung_durch enum ('lieferant', 'dienstleister', 'intranet', 'unbekannt') default 'unbekannt' not null,
datum_anlage_initial datetime not null comment 'Anlage des ersten Datnesatzes zu dem Barcode',
duplicate enum ('none', 'mark', 'dublicated', 'duplicated') default 'none' not null,
zustand tinyint default 0 not null,
seriennummer text not null,
lagerstellplatz text not null,
constraint Secondary_Key
unique (barcode),
constraint artikel_ibfk_1
foreign key (status) references mimo2.status (nr)
on update cascade on delete cascade,
constraint artikel_ibfk_2
foreign key (zustand) references mimo2.zustand (zustand)
on update cascade on delete cascade
)
collate = utf8_unicode_ci;
create index artikelnr
on mimo2.artikel (artikelnr);
create index ausgehendes_haus
on mimo2.artikel (ausgehendes_haus);
create index datum_aenderung_empfangendes_haus
on mimo2.artikel (datum_aenderung_empfangendes_haus);
create index empfangendes_haus
on mimo2.artikel (empfangendes_haus);
create index freigegeben
on mimo2.artikel (freigegeben);
create index lagerort
on mimo2.artikel (lagerort);
create index laufende_nr
on mimo2.artikel (laufende_nr);
create index lieferantennr
on mimo2.artikel (lieferantennr);
create index personalnummer
on mimo2.artikel (personalnummer);
create index status
on mimo2.artikel (status);
create index zeitpunkt
on mimo2.artikel (zeitpunkt);
create index zustand
on mimo2.artikel (zustand);
create definer = `my-db-user`@`` trigger mimo2.artikel_history_before_delete
before delete
on mimo2.artikel
for each row
INSERT INTO mimo2.artikel_historie
SET barcode = OLD.barcode,
lieferscheinnr = OLD.lieferscheinnr,
rechnungsnr = OLD.rechnungsnr,
lieferantennr = OLD.lieferantennr,
artikelnr = OLD.artikelnr,
laufende_nr = OLD.laufende_nr,
pruefziffer = OLD.pruefziffer,
ausgehendes_haus = OLD.ausgehendes_haus,
empfangendes_haus = OLD.empfangendes_haus,
lagerort = OLD.lagerort,
freigegeben = OLD.freigegeben,
status = OLD.status,
preis = OLD.preis,
waehrung = OLD.waehrung,
personalnummer = OLD.personalnummer,
zeitpunkt = OLD.zeitpunkt,
kommentar = OLD.kommentar,
bildpfad = OLD.bildpfad,
aenderung_durch = OLD.aenderung_durch,
datum_anlage_initial = OLD.datum_anlage_initial,
dublicate = OLD.duplicate,
zustand = OLD.zustand,
historie_datum = NOW();
create definer = `my-db-user`@`` trigger mimo2.artikel_history_before_update
before update
on mimo2.artikel
for each row
INSERT INTO mimo2.artikel_historie
SET barcode = OLD.barcode,
lieferscheinnr = OLD.lieferscheinnr,
rechnungsnr = OLD.rechnungsnr,
lieferantennr = OLD.lieferantennr,
artikelnr = OLD.artikelnr,
laufende_nr = OLD.laufende_nr,
pruefziffer = OLD.pruefziffer,
ausgehendes_haus = OLD.ausgehendes_haus,
empfangendes_haus = OLD.empfangendes_haus,
lagerort = OLD.lagerort,
freigegeben = OLD.freigegeben,
status = OLD.status,
preis = OLD.preis,
waehrung = OLD.waehrung,
personalnummer = OLD.personalnummer,
zeitpunkt = OLD.zeitpunkt,
kommentar = OLD.kommentar,
bildpfad = OLD.bildpfad,
aenderung_durch = OLD.aenderung_durch,
datum_anlage_initial = OLD.datum_anlage_initial,
dublicate = OLD.duplicate,
zustand = OLD.zustand,
historie_datum = NOW();
The most likely cause is an inkrement
field in your artikel_historie
table which is specified as NOT NULL
but not being populated. Either make it nullable or add it to the list of fields in the two triggers. If adding it to the triggers, you might want to set PK on (inkrement, historie_datum)
.