Scenariusz:Definiowanie Composite Klucz z automatycznego przyrostu w MySQL
Mam tabeli, która odwołuje się dwa klucze obce, a dla każdej unikalnej kombinacji tych kluczy obcych, posiada własną kolumnę auto_increment. Trzeba zaimplementować kompozytowy klucz, który pomoże zidentyfikować wiersz jako unikalny z użyciem kombinacji tych trzech (jeden dla kluczy obcych i kolumny auto_increment i jedną drugą kolumnę nieunikalny wartości)
Tabela:
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)
);
oczywiście, nie musi być coś nie tak z moim zapytaniu, z powodu której błąd wrzucony jest:
eRROR 1075: Niepoprawna definicja tabeli; może być tylko jedno auto kolumna i musi być zdefiniowany jako kluczowy
Co usiłuję osiągnąć:
Mam tabela Application (z APP_ID jako jej klucz podstawowy), każdy Aplikacja ma zestaw problemów do rozwiązania, a każda aplikacja ma wiele testów (więc test_id col) Sr_no col powinien wzrosnąć dla unikalnych app_id i test_id.
tj Dane w tabeli powinna wyglądać następująco:
silnikBaza danych jest InnoDB. Chcę to osiągnąć z jak największą prostotą (tj. Unikać wyzwalaczy/procedur, jeśli to możliwe - co sugerowano w podobnych przypadkach w innych pytaniach).
OK i jakie zmiany należy wprowadzić w zapytaniu Utwórz tabelę? Nie mogę uczynić sr_no kluczem podstawowym, ponieważ nie będzie wyjątkowy. I nie mogę zrobić Autoinkrementacji bez uczynienia go Kluczem Podstawowym ... –
Po prostu wyłącz autoinkrementację - nie może zrobić tego, co chcesz. Klucz podstawowy pozostaje taki sam. – noz
Przykro mi, że nie pracowałem z wyzwalaczami, a ten kod wyzwalający wyrzuca "Błąd składni" - nic więcej nie zdefiniowano. Czy możesz oczyścić kod, a kiedy już to zrobisz, wstaw tutaj komentarz? Błąd: BŁĄD 1064: Wystąpił błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL dla właściwej składni do użycia w pobliżu '.sr_no = (wybierz ifnull (wybierz max (sr_no) +1 z issue_log gdzie app_id = new.app_id' w linii 3 –