Datatyper i SQL

Ledig

Introduktion til datatyper i SQL

I modsætning til JavaScript har SQL stærk indtastning. I hver tabel har hver kolonne sin egen faste datatype.

Der er mange datatyper, men i modsætning til Java-sproget er der så mange af dem ikke, fordi der er datatyper til alle lejligheder. Databaser er meget afhængige af størrelsen af ​​dataene, så mange datatyper adskiller sig kun fra hinanden i længden.

I alt kan datatyper opdeles i 5 grupper:

  • Numeriske typer
  • Strengetyper _
  • Typer til lagring af datoer og tidspunkter
  • Objekter: normalt repræsenteret som en samling af bytes
  • Transport : JSON og XML

Normalt har forskellige DBMS stadig deres egne datatyper. Hvert DBMS har sin egen specialisering, så det er meget almindeligt at tilføje nye datatyper.

En anden ting er, at det ikke er nok at tilføje en ny datatype, du skal tilføje funktioner, der fungerer sammen med den, samt få dette til at arbejde bekvemt og hurtigt.

Hvis du arbejder på en industriel (enterprise) DBMS, vil du højst sandsynligt have at gøre med dens datatyper og dens funktioner. For hvad det vil være nødvendigt at læse 2-5 gode bøger.

Som en del af vores kendskab til SQL vil vi overveje tre hovedgrupper af datatyper:

  • Tal
  • Strenge
  • Datoer

Numeriske typer i SQL

I SQL er numeriske typer opdelt i tre grupper:

  • Heltalstyper
  • Faste punkttal (fast antal decimaler)
  • Flydende kommatal

Lad os starte med heltal . Der er kun 5 af dem, og de kan beskrives i én tabel:

# Indtast navn Længde i bytes Analog fra Java Minimumsværdi Maksimal værdi
1 TINYINT 1 byte -128 127
2 SMALLINT 2 kort -32.768 32.767
3 MEDIUMINT 3 -8.388.608 8.388.607
4 INT 4 int -2.147.483.648 2.147.483.647
5 STORT 8 lang -2 63 2 63-1

Datatyperne minder meget om Java-datatyperne, men der er også en heltalstype, der er tre byte lang. Dette gøres for at spare på størrelsen.

Dernæst kommer typerne med flydende komma , ligesom i Java, der er kun to af dem:

# Indtast navn Længde i bytes Analog fra Java Minimumsværdi Maksimal værdi
1 FLYDE 4 flyde -3,40E+38 +1,18E+38
2 DOBBELT 8 dobbelt -1,79E+308 +1,79E+308

Igen, intet nyt. Alt er det samme som i Java. Men i modsætning til Java har SQL en anden speciel type, det faste reelle tal. Det hedder DECIMAL.

Typisk bruges denne type til at opbevare pengebeløb. Når navnet på denne type skrives, så angives det normalt efter det, hvor mange decimaler tallet har før og efter decimaltegnet. Det generelle format ser således ud:

DECIMAL(total_characters, after_comma)

Og et lille eksempel:

salary DECIMAL(5,2)

Sådan beskrev vi det faktum, at lønkolonnen kan indeholde heltal (maks. 3 decimaler) og en brøkdel - 2 decimaler.

Det maksimale antal tegn, som DECIMAL-typen understøtter, er 65.

Strengtyper i SQL

Rækker i en database kan gemmes i to former:

  • Fast længde strenge
  • Strenge med variabel længde

Fast-længde strenge er specificeret som CHAR :

CHAR(length)

Fast længde betyder, at alle værdier i denne kolonne vil indeholde et strengt fastsat antal tegn.

Et eksempel på en streng med fast længde:

country_code CHAR(2)

Strenge med variabel længde er specificeret af VARCHAR -typen :

VARCHAR(max_length)

Variabel længde betyder, at alle værdier i denne kolonne vil indeholde tekst af enhver længde, men ikke mere end den maksimale længde.

Eksempel på streng med variabel længde:

phone VARCHAR(12)

Fast længde strenge har en meget stor fordel. Hvis klienten bad SQL-serveren om at returnere den 1.000.000. række fra tabellen til ham, og rækkerne i tabellen er af fast længde, så kan du, ved at kende længden af ​​rækken, nemt beregne de bytes, der vedrører den ønskede række.

Ved variabel længde af linjer vil det ikke være muligt hurtigt at finde den ønskede række i tabellen. Husk adgangshastigheden til ArrayList og LinkedList, situationen er omtrent den samme her.

Lad os sammenligne, hvordan strenge af forskellig længde bliver gemt i en tabel, afhængigt af datatypen.

Linje CHAR(4) Byte at gemme VARCHAR(4) Byte at gemme
'' ' ' 4 '' 1
'ab' 'ab' 4 'ab' 3
'abcd' 'abcd' 4 'abcd' 5
'abcdefgh' 'abcd' 4 'abcd' 5

Bemærk. VARCHAR-typen kræver en byte mere for samme længde, fordi den yderligere skal gemme længden af ​​strengen.

Midlertidige typer i SQL

SQL har også specielle typer til lagring af datoer og tidspunkter. Der er fem typer i alt:

# Indtast navn Analog fra Java DateTime API Eksempel Minimumsværdi Maksimal værdi
1 DATO LocalDate '2022-06-30' '1000-01-01' '9999-12-31'
2 TID Lokal tid 'tt:mm:ss[.brøk]' '-838:59:59.000000' '838:59:59.000000'
3 DATO TID LocalDateTime '1000-01-01 00:00:00.000000' '9999-12-31 23:59:59.999999'
4 TIDSSTEMPEL Dato '1970-01-01 00:00:01.000000' '2038-01-19 03:14:07.999999'
5 ÅR 1901 2155

Alle data i forespørgsler skrives som en streng - i enkelte anførselstegn. Indtastningsformatet går fra største til mindste:

  • År
  • Måned
  • Dag
  • Time
  • Minut
  • Anden
  • Brøkdele af et sekund

DATE, TIME og DATETIME typerne kan traditionelt betragtes som analoger af typerne fra Java DateTme API: LocalDate, LocalTime, LocalDateTime. Logikken er omtrent den samme.

TIMESTAMP-typen gemmer data i millisekunder siden begyndelsen af ​​1970 (en UNIX-operativsystemstandard). Det er i denne form, de gemmes af datotypen i Java-sproget.

Og endelig er der typen ÅR, som er 1 byte lang og gemmer værdier fra 1 til 255. Derfor er den tilgængelige årrække 1901-2155. Året 1900 kan ikke gemmes af denne type, da værdien 0 bruges til at kode en NULL-værdi.

Lagring af objekter i SQL

Der er specielle typer til opbevaring af genstande eller tekster af stor længde. Vi vil ikke gå i detaljer om dem, men jeg vil liste dem alligevel:

# Indtast navn Forklaring
1 TEKST Bruges til at gemme lange tekster. Ved sammenligning og sortering på dette felt bruges kun de første 100 tegn.
2 BLOB Navnet står for Byte Large Object. Gemt som blot en samling af bytes. Kan bruges til fx at gemme billeder i en database.
3 KLUB Navnet står for Char Large Object. Bruges til at gemme lange tekster.
4 ENUM Giver dig mulighed for at indstille et fast sæt værdier og gemme en af ​​dem som en værdi.
5 SÆT Giver dig mulighed for at indstille et fast sæt værdier og gemme enhver delmængde af dem som en værdi. Normalt gemmer dem som en binær maske.

Teoretisk set kan du serialisere ethvert Java-objekt som et sæt bytes og gemme det i databasen som en BLOB. Det er ikke et problem at gemme objektet. Hvordan arbejder man videre med ham?

Lad os sige, at et bord gemmer en million objekter i serieform - hvordan vil du søge gennem dem? Et DBMS understøtter kun en bestemt type data, når det giver et omfattende sæt funktioner til at arbejde med det.

Kommentarer
  • Populær
  • Ny
  • Gammel
Du skal være logget ind for at skrive en kommentar
Denne side har ingen kommentarer endnu