• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Automatyczna numeracja rekordów w tabeli MySQL.

Object Storage Arubacloud
0 głosów
766 wizyt
pytanie zadane 22 marca 2022 w SQL, bazy danych przez Marcin Lorek Początkujący (260 p.)

Witam,

Jak ustawić w kolumnie numerację rekordów bez względu na numer ID, w sytuacji kiedy usuwam rekord o idproduktu="2" i wtedy autmatyczny numer przejmuje rekord o idproduktu="3".

autmatyczna_numeracja idproduktu nazwa
1 1 koszulka
2 3 spodnie
3 4 czapka

 

1 odpowiedź

0 głosów
odpowiedź 22 marca 2022 przez radek024 Szeryf (77,160 p.)
Jeżeli dobrze rozumiem treść pytania, to takie działania naruszają takie coś jak ACID - polecam przeczytać: https://pl.wikipedia.org/wiki/ACID. Zmiana tej wartości może sprawić, że relacje między tabelami mogą się posypać, ponieważ rekord Y powołując się na rekord X w drugiej tabeli może automatycznie dotyczyć innego elementu. Łamiesz zatem zasadę spójności danych.

Jeżeli jednak chcesz potrenować sobie SQL, to możesz napisać triggera, który będzie automatycznie zmieniał wartości idproduktu po aktualizacji tabel, rzecz jasna jeżeli idproduktu nie jest ograniczone jakimiś obłożeniami.
1
komentarz 22 marca 2022 przez Wiciorny Ekspert (270,170 p.)

Nie prawda, generalnie rekord w bazie "może mieć dowolne" miejsce niezależnie od indeksu.
Choćby i dlatego, że jest tak zwane indeksowane sekwencyjne (generacyjne- gdzie indeksy są generowane np z wartością co 10), w takim wypadku po dodaniu 3 elementów możesz mieć indeksy 1: 10 2:20 3:30 :) i różne inne, też pomiedzy możesz dodać obiekt który będzie miał 4 pozycje o indeksie 21 ;) rekordy w bazie nie są sortowane. - lub nie muszą być, a jak już to są wedle klucza, co dalej nie zmienia że jeśli klucz nie istnieje to nie może element mieć pozycji o wartości 3 gdy np właśnie klucz 3 nie istnieje
https://www.mssqltips.com/sqlservertip/1600/auto-generated-sql-server-keys-with-the-uniqueidentifier-or-identity/
i to z ACID nie ma totalnie nic wspólnego  bo to jest akronim dla transakcji .
 zbiór właściwości gwarantujących poprawne przetwarzanie transakcji w bazach danych

komentarz 11 kwietnia 2022 przez Marcin Lorek Początkujący (260 p.)

Dzięki za pomoc, użyłem zapytanie SELECT * FROM tabel WHERE kategoria='czapka' AND ilosc > 0 LIMIT x OFFSET y;

 Resztę generuje PHP, np. LIMIT x OFFSET y zmieniał wartość w interakcji z użytkownikiem podczas zmiany strony. Gdy towaru nie ma to się nie wyświetla, bo ilosc=0. Ilość wyświetlonych produktów na stronie ograniczam pętlą for(), w której maximum jest liczba wygenerowanych wierszy przez SQL.

Co do ACID do przydatne jest do historii zakupów, natomiast indeksowanie sekwencyjne nie jest tym czego szukałem. 

Pozdrawiam.

Podobne pytania

0 głosów
1 odpowiedź 371 wizyt
0 głosów
1 odpowiedź 446 wizyt
0 głosów
1 odpowiedź 1,121 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...