M.: Fehlermeldung bei vorhandenen Index in Mysql

Beitrag lesen

Mahlzeit,

erstmal danke, auch an Jörg.

Rate ich richtig, dass dieser Index zum einen ein Unique Index ist (oder der Primary Key) und zum anderen ein Feld davon das Auto-Increment-Feld ist?

Hätte die Struktur posten sollen, sorry.
Die is ist Unique, Auto-Increment. Der zweite Index läuft über 4 Felder, deren Kombination nur genau einmal auftreten darf.

Hier mal der CREATE:

CREATE TABLE IF NOT EXISTS `xms_cashBook` (  
  `id` int(11) NOT NULL AUTO_INCREMENT,  
  `date` date NOT NULL,  
  `booked` date NOT NULL,  
  `text` varchar(255) NOT NULL,  
  `invoiceNr` varchar(255) NOT NULL,  
  `accountText` varchar(255) NOT NULL,  
  `accountNr` varchar(255) NOT NULL,  
  `taxRate` decimal(10,5) NOT NULL,  
  `purchaseExclTax` decimal(20,10) NOT NULL,  
  `description` text NOT NULL,  
  PRIMARY KEY (`date`,`text`,`invoiceNr`,`accountNr`),  
  UNIQUE KEY `id` (`id`)  
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8;

In welchem Fall? Wenn du die Werte händisch vergibst? Auto-Increment vergibt nur dann einen Wert selbständig, wenn du keinen vorgibst oder 0 oder NULL (bei NOT-NULL-Feldern).

Der wird nie per Hand vergeben.

Oder willst du dass der AI-Wert immer unterschiedlich ist, auch wenn durch unterschiedliche Werte im zweiten Feld bereits die Eindeutigkeit gegeben ist?

Ich will, dass erst gar nichts geändert wird in der Tabelle, wenn der Eintrag in der Kombination schon existiert.

Erst prüfen und später schreiben ergibt auch ein TOCTTOU-Problem.

Ist ne Single-User Applikation, deshalb kann ich das Risiko abschätzen ;)
Aber natürlich auch ein Aspekt der berücksichtigt werden muss.

--
eigentlich ist mir bewusst, dass ich hin und wieder einfach mal die Klappe halten sollte. Doch genau in den unpassendsten Momenten erwische ich mich dabei, wie ich dennoch etwas sage ...