Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL]błąd w zapytaniu w bazie danych mysql
Forum PHP.pl > Forum > Przedszkole
piotrino1
Witam, mam utworzoną tabele w mysql, i tu mam problem tzn. mam tabele i jak dodaje nową kolumnę do tej tabeli z zapytaniem:
Kod
alter table informacje add column faktura_id smallint(4) unsigned auto_increment primary key (faktura_id) after data_ur;
to dostaję taki bład: 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'primary key (faktura_id) after data_ur' at line 1. Jest jedno ale, to znaczy ze juz w tej tabeli mam utworzone id_klienta varchar(30) not null auto_increment primary key (id_klienta);
Gdzie robię błąd w zapytaniu jak dodaję nową kolumnę do aktualnej tabeli?questionmark.gifquestionmark.gif? I jak dosłownie mozna zrozumiec ten bład:
for the right syntax to use near 'primary key (faktura_id) after data_ur' at line 1.questionmark.gif? Pozdrawiam
vsemak
Jeżeli w tabeli są już jakieś rekordy to zapytanie jest nieprawidłowe.
Wyobraź sobie tą tabelę bez pola faktura_id.
W bazie jest kilka rekordów i kiedy Ty dodajesz pole faktura_id to dla wszystkich tych rekordów pole faktura_id = 0, NULL lub cokolwiek tam sobie wybierzesz.
Kiedy piszesz, że pole faktura_id ma być primary (czyli unikatowe) to powstaje konflikt bo istnieje już kilka rekordów o tej samej wartości faktura_id, a to nie jest dopuszczalne w polu unikatowym jakim jest primery.

Dodatkowo, nie jestem pewien, ale raczej nie można stosować dwóch indeksów z autoincrementacją w jednej tabeli.

Kolejna sprawa:

Wnioskuję, że tabela o nazwie INFORMACJE to tylko rozwinięcie tabeli KLIENCI.
Identyfikator klienta powinien być incrementowany wewnątrz tabeli KLIENCI a do tabeli INFORMACJE powinno się tylko dopisywać ten identyfikator w celu powiązania obu tabel, można skorzystać z zaawansowanych indeksów o ile używasz odpowiedniego silnika bazy danych.

W przypadku FAKTURA_ID to nie rozumiem w ogóle tego pola, klienci zazwyczaj posiadają kilka faktur i nie umiem wyimaginować przypadku w którym to klient ma tylko jedną fakturę. Tak że, sytuacja jest taka sama, to w tabeli z fakturami powinno się incrementować ID i potem przypisywać do klienta ale nie w informacjach bo to relacja jeden do wielu. Możesz stworzyć pomocniczą tabelę FAKTURY_KLIENTA o polach FAKTURA_ID i KLIENT_ID albo w tabeli FAKTURY dodać pole KLIENT_ID.

Może troszkę za bardzo wybiegam, nie wiem kiedy tu wrócę uprzedzam tylko kolejne posty.
piotrino1
Ok, to jak mam dodawać(dodatkową kolumnę) np do bazy danych wartość auto_increment primary key jak w danej tabeli mam już jedną taką wartość utworzoną questionmark.gif questionmark.gif
vsemak
Cytat(piotrino1 @ 3.03.2009, 21:11:26 ) *
Ok, to jak mam dodawać(dodatkową kolumnę) np do bazy danych wartość auto_increment primary key jak w danej tabeli mam już jedną taką wartość utworzoną questionmark.gif questionmark.gif


Nie praktykuje się takich rozwiązań, jedna tabela jeden index.
drzalek
Proponuję abyś szerzej zaprezentował problem, bo moim zdaniem idziesz w złym kierunku. Dwie kolumny z indeksem na pewno nie będą potrzebne.
piotrino1
Ok, dzięki. Utworzyłem oddzielną t rolleyes.gif belę i wniej dałem auto_increment. Widocznie jest tak jak mówisz w jednej tabeli nie mogą być podwójne "auto_increment". Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.