![]() |
![]() |
![]()
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? ![]() ![]() ![]() |
|
|
![]() |
![]()
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 |
|
|
![]()
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ą
![]() ![]() Ten post edytował piotrino1 3.03.2009, 21:12:31 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 22 Pomógł: 2 Dołączył: 3.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
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.
|
|
|
![]()
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
![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 22:42 |