Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MYSQL]błąd w zapytaniu w bazie danych mysql, mysql
piotrino1
post
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 22.02.2009

Ostrzeżenie: (0%)
-----


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?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.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.(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ? Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
vsemak
post
Post #2





Grupa: Zarejestrowani
Postów: 22
Pomógł: 2
Dołączył: 3.03.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował vsemak 3.03.2009, 21:14:45
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.10.2025 - 00:20