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?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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
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
piotrino1
post
Post #3





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

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


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

Ten post edytował piotrino1 3.03.2009, 21:12:31
Go to the top of the page
+Quote Post
vsemak
post
Post #4





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

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


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.
Go to the top of the page
+Quote Post
drzalek
post
Post #5





Grupa: Zarejestrowani
Postów: 170
Pomógł: 18
Dołączył: 6.03.2007

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


Proponuję abyś szerzej zaprezentował problem, bo moim zdaniem idziesz w złym kierunku. Dwie kolumny z indeksem na pewno nie będą potrzebne.
Go to the top of the page
+Quote Post
piotrino1
post
Post #6





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

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


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
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 22:42