Konkretna liczba znaków

0

Cześć,

czy jest jakiś sposób żeby wymusić podczas wprowadzania wartości do danej kolumny w tablicy żeby miała konkretną ilość znaków? Np. jeżeli mam pole PESEL to żeby dało się tam wprowadzić zawsze tylko konkretnie 13 znaków.

Dodatkowo czy to normalne, że jeżeli mam w jakimś polu np. ID ustawione AUTO_INCREMENT to nawet jak nie wprowadzę danych do tabeli, ale kilka razy będę usiłował, to jak mi się w końcu uda to będę miał w ID wartość o kilka wyższą a nie kolejną? Może podam przykład:
mam tabelę osoba, mam w niej dwie osoby o ID=1 i ID=2, kilka razy próbuję dodać nową osobę, ale za każdym razem albo robię literówkę albo coś tam innego, kiedy w końcu mi się udaje to ta osoba ma np. ID=5.

0
  1. Ustaw długość tego pola na tyle? o_O
  2. Tak.
0
  1. Z tego co do tej pory znalazłem to można ustawić maksymalną liczbę znaków, ale jak ustawić konkretną czyli np zawsze 13, nie maksymalnie 13 ale dokładnie 13? bigint(13) w ten sposób nie działa. Mógłbym zrobić na kolumnie właściwość zerofill ale to w tym przypadku byłoby bez sensu. Jeżeli jest jakiś sposób na ustawienie tej właśnie konkretnej liczny znaków jakie trzeba wprowadzić korzystając tylko z sql-a to bardzo proszę o schemat lub nazwę tej właściwości.

  2. A da się to jakoś obejść, żeby jednak nadawało konkretną w stosunku do tego co rzeczywiście mam w tabeli?

0
rez0op napisał(a):
  1. Z tego co do tej pory znalazłem to można ustawić maksymalną liczbę znaków, ale jak ustawić konkretną czyli np zawsze 13, nie maksymalnie 13 ale dokładnie 13? bigint(13) w ten sposób nie działa. Mógłbym zrobić na kolumnie właściwość zerofill ale to w tym przypadku byłoby bez sensu. Jeżeli jest jakiś sposób na ustawienie tej właśnie konkretnej liczny znaków jakie trzeba wprowadzić korzystając tylko z sql-a to bardzo proszę o schemat lub nazwę tej właściwości.

PESEL to jest numer, a nie liczba, więc powinieneś go przechowywać jako typ znakowy o stałej długości, a nie liczbowy. Użyj char(11) i nie kombinuj.

  1. A da się to jakoś obejść, żeby jednak nadawało konkretną w stosunku do tego co rzeczywiście mam w tabeli?

A po co? ID jest potrzebne wyłącznie do działania bazy i aplikacji, to nie jest informacja dla użytkownika, więc po co nią manipulować?

0
  1. Jeżeli zastosuję char(11) to nadal mogę wprowadzić ciąg znaków krótszy niż 11, a brakujące znaki zostaną zastąpione przez spacje, więc takie numery PESEL będą błędne.

  2. Po prostu chciałbym żeby ID był jednocześnie licznikiem dla mnie. Jeżeli się nie da to ok, ale jeżeli się da to chciałbym wiedzieć jak to zrobić.

0
  1. To załóż constraint na to pole który określa minimalną liczbę znaków
  2. Nie da się i nie należy tak robić. Powód jest prosty: baza danych ma wielodostęp. Co jeśli 2 tym samym czasie 2 osoby próbują dodać rekord do bazy a wcześniejsza transakcja się wysypie? To mimo wszystko masz "dziurę" w id.
0
rez0op napisał(a):
  1. Jeżeli zastosuję char(11) to nadal mogę wprowadzić ciąg znaków krótszy niż 11, a brakujące znaki zostaną zastąpione przez spacje, więc takie numery PESEL będą błędne.

PESEL 11111111111 również jest błędny. Jak chcesz zabronić wpisania takiego do bazy?

  1. Po prostu chciałbym żeby ID był jednocześnie licznikiem dla mnie. Jeżeli się nie da to ok, ale jeżeli się da to chciałbym wiedzieć jak to zrobić.

Zrób sobie swoje pole na licznik. Chociaż nie wiem, co chcesz w ten sposób liczyć? Suche majtki na dnie morza?

0

@Shalom: dzięki za wyjaśnienie

@somekind: Tobie również dziękuję, choć jeżeli odpowiadanie mi lub innym userom jest poniżej Twojej godności to ja Cię przecież do niczego nie zmuszam. W ćwiczeniu jakie usiłowałem wykonać 11111111111 nie bylo by błędem natomiast 12345 już tak.

Pozdrawiam i jeszcze raz dzięki za pomoc

0

@rez0op, przecież 11111111111 również jest błędnym PESELem. To, czy jest on prawidłowy i czy ma odpowiednią długość należy sprawdzić programowo, a nie sterując typem danych dla kolumny.

0

PESEL był tu tylko obrazowym przykładem. Chodziło mi własnie czy w samym SQL-u jest jakiś mechanizm jak własnie wspomniany przez Shalom-a constraint, teraz już wiem czego szukać. Z tym ustawianiem różnych "parametrów" pól programowo to gdzieś mi się już czytałem, ale jak mówię interesowało mnie czy ma coś takiego już sam SQL. Ogólnie dzięki za wszystkie odpowiedzi. Teraz już wiem czego szukać a co sobie odpuścić. Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1