Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pytanie odnośnie auto_increment
Forum PHP.pl > Forum > Bazy danych > MySQL
lamcpp
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
darko
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
lamcpp
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
Mchl
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.  
darko
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.