Scenario:Definizione chiave composita con incremento automatico in MySQL
Ho una tabella che fa riferimento a due chiavi esterne, e per ogni combinazione unica di questi chiavi esterne, ha la propria colonna AUTO_INCREMENT. Ho bisogno di attuare una chiave composita che aiuterà identificare la riga univoco utilizzando combinazione di questi tre (uno chiavi esterne ed una colonna auto_increment, e un'altra colonna con valori non uniche)
Tabella:
CREATE TABLE `issue_log` (
`sr_no` INT NOT NULL AUTO_INCREMENT ,
`app_id` INT NOT NULL ,
`test_id` INT NOT NULL ,
`issue_name` VARCHAR(255) NOT NULL ,
primary key (app_id, test_id,sr_no)
);
Naturalmente, ci deve essere qualcosa di sbagliato con la mia domanda, a causa del quale l'errore è gettato:
errore 1075: definizione della tabella non corretta; non ci può essere una sola auto colonna e deve essere definito come chiave
Quello che sto cercando di realizzare:
Ho una tabella applicativa (con APP_ID come la sua chiave primaria), ciascuna L'applicazione ha una serie di problemi da risolvere e ogni applicazione ha più test (quindi il campo test_id) Il campo sr_no deve essere incrementato per app_id e test_id univoci.
vale a dire I dati della tabella dovrebbe essere simile:
motoreIl database è InnoDB. Voglio raggiungere questo obiettivo con la massima semplicità possibile (ad esempio, evitare trigger/procedure se possibile), che è stato suggerito per casi simili su altre domande).
Ok, e quali cambiamenti devo fare nel mio Creare query di creazione tabella? Non posso fare sr_no una chiave primaria perché non sarà unica. E non posso renderlo Autoincrement senza renderlo chiave primaria ... –
Basta togliere l'autoincremento - non può fare quello che vuoi. La chiave primaria rimane la stessa. – noz
Mi dispiace di non aver lavorato con i trigger e questo codice di trigger sta eliminando "Errore di sintassi" - con nient'altro definito. Puoi pulire il codice, e una volta fatto, metti un commento qui? L'errore è: ERRORE 1064: Hai un errore nella sintassi SQL; controllare il manuale che corrisponde alla versione del server MySQL per la sintassi diritto di utilizzare in prossimità di '.sr_no = (selezionare IFNULL (selezionare max (sr_no) +1 dal issue_log dove APP_ID = new.app_id' at line 3 –