piotrino1
3.03.2009, 20:29:11
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?
? 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.
? Pozdrawiam
vsemak
3.03.2009, 21:03:21
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
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ą
vsemak
3.03.2009, 21:26:06
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ą

Nie praktykuje się takich rozwiązań, jedna tabela jeden index.
drzalek
3.03.2009, 21:31:47
Proponuję abyś szerzej zaprezentował problem, bo moim zdaniem idziesz w złym kierunku. Dwie kolumny z indeksem na pewno nie będą potrzebne.
piotrino1
6.03.2009, 21:32:12
Ok, dzięki. Utworzyłem oddzielną t

belę i wniej dałem auto_increment. Widocznie jest tak jak mówisz w jednej tabeli nie mogą być podwójne "auto_increment". Pozdrawiam