Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> pytanie odnośnie auto_increment
lamcpp
post
Post #1





Grupa: Zarejestrowani
Postów: 372
Pomógł: 2
Dołączył: 10.05.2009

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


witam, chciałem nadać do drugiej kolumny w tabeli pole auto_increment, jednak wyskakuje mi błąd ze tylko jedna kolumna może mieć auto_increment i musi to być kolumna z kluczem głównym. Potrzebowałem tego do sortowania, tzn. chciałem zeby uzytkownik mogł dowolnie manipulować danymi z bazy (zdjeciami) i chciałem stworzyć dodatkową pozycję, numeryczną, po której odbywało by się sortowanie (ORDER BY) i nastepnie wyswietlanie. Problem z tym auto_increment, ponieważ nie chce do kazdego pola ręcznie przypisywać pozycji, chciałbym zeby to się odbywało automatycznie, ewentualnie jak bede chciał by jakies zdjecie było wyzej w pozycjach wyswietlania to zmienie wartosc sortowanego pola.
Czy jest jakis mechanizm poza auto_increment, który wstawi mi automatycznie po kolei wartość do bazy.. i umozliwi w razie koniecznosci wprowadzanie ręczne
Go to the top of the page
+Quote Post
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Zgaduję, że masz silnik InnoDB, niestety więcej niż jedno pole autoincrement jest tolerowane tylko w silnikach MyISAM i BDB:
Cytat
For MyISAM and BDB tables you can specify AUTO_INCREMENT on a secondary column in a multiple-column index. In this case, the generated value for the AUTO_INCREMENT column is calculated as MAX(auto_increment_column) + 1 WHERE prefix=given-prefix. This is useful when you want to put data into ordered groups.

[za: http://dev.mysql.com/doc/refman/5.0/en/exa...-increment.html ]

Cytat
jednak wyskakuje mi błąd

Możesz podać jego zawartość questionmark.gif

Cytat
Czy jest jakis mechanizm poza auto_increment, który wstawi mi automatycznie po kolei wartość do bazy

Jest i nazywa się trigger


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
lamcpp
post
Post #3





Grupa: Zarejestrowani
Postów: 372
Pomógł: 2
Dołączył: 10.05.2009

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


Po wpisaniu:
  1. ALTER TABLE data_zdj ADD pole INT AUTO_INCREMENT;

błąd następujący(w HeidiSQL):
Cytat
Błąd SQL: W tabeli może być tylko jedno pole auto i musi ono być zdefiniowane jako klucz
Go to the top of the page
+Quote Post
Mchl
post
Post #4





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Cytat(darko @ 29.11.2009, 02:49:39 ) *
Zgaduję, że masz silnik InnoDB, niestety więcej niż jedno pole autoincrement jest tolerowane tylko w silnikach MyISAM i BDB:


A próbowałeś? winksmiley.jpg W żadnym znanym mi silniku nie możesz mieć więcej niż jednego pola AUTO_INCREMENT (jak korzystałbyś z LAST_INSERT_ID())

To co przytaczasz w manualu, znaczy tyle, że w MyISAM i BDB, pole AUTO_INCREMENT może być drugą kolumną klucza głównego. Numerowanie wtedy odbywa się indywidualnie dla każdej wartości pierwszej kolumny PK.

  1. DROP TABLE IF EXISTS ai;
  2. CREATE TABLE ai (
  3. grp char(3) NOT NULL,
  4. grpAI int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  5. val varchar(45) NOT NULL,
  6. PRIMARY KEY (grp,grpAI)
  7. ) ENGINE=MyISAM
  8.  
  9. INSERT INTO test.ai (grp,val) VALUES ('a','v1'),('a','v2'),('b','v1'),('a','v3'),('b','v2');
  10.  
  11. SELECT * FROM ai;
  12.  
  13. 'a', 1, 'v1'
  14. 'a', 2, 'v2'
  15. 'b', 1, 'v1'
  16. 'a', 3, 'v3'
  17. 'b', 2, 'v2'
  18.  
Go to the top of the page
+Quote Post
darko
post
Post #5





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Cytat
W żadnym znanym mi silniku nie możesz mieć więcej niż jednego pola AUTO_INCREMENT

@Mchl: Też mi się tak wydawało, dopóki źle nie zinterpretowałem manuala sciana.gif Masz rację, mój błąd.


--------------------
Nie pomagam na pw, tylko forum.
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: 22.08.2025 - 06:36